问题描述
示例:在我的应用程序中有一个通讯录,我想通过Whatsapp与朋友共享一个联系人[类别:联系人]。当他收到消息时,他应该能够直接在应用程序中打开联系人,或者,如果未安装该联系人,则应将其定向到Play商店下载该应用程序。
我找到了发送简单文本的方法,并且为每个要共享对应的Parcelable的类构建了代码。 现在,以下是我的代码,共享表正在打开,但是如果我选择要与之共享的联系人,则会给我一个错误消息:“共享失败,重试”(Whatsapp)或“不支持的内容”(电报)。
sContact = new Contact();
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
ArrayList<Contact> ContactsList = new ArrayList<Contact>();
ContactsList.add(sContact);
Parcel.obtain().readList(ContactsList,Contact.class.getClassLoader());
sendIntent.putParcelableArrayListExtra("ShareContact",ContactsList);
sendIntent.setType("image/*");
Intent shareIntent = Intent.createChooser(sendIntent,null);
startActivity(shareIntent);
我不明白的另一件事是,如果我将一个项目添加到ContactsList,则应用程序崩溃,错误为“ android.os.BadParcelableException:ClassNotFoundException,当解组时:com.myapp.Contact”,而列表为空打开。
解决方法
有可能吗?
关于“自定义数据”的含义,不。
当他收到消息后,他应该能够直接在应用程序中打开联系人,或者,如果未安装该联系人,则应将其定向到Play商店下载该应用程序。
您可以与Web服务器共享一个https
URL,该URL包含联系人的不透明标识符。您可以让您的应用程序支持该URL结构的深层链接,例如,如果用户安装了该应用程序,则单击该链接可能会打开您的应用程序(您可以在其中解码URL并使用标识符)。如果Web服务器认为发出请求的客户端是Android Web浏览器,则您的Web服务器可以为实际页面做任何事情,包括发出重定向到应用程序的market:
URL
。
现在以下是我的代码,共享表正在打开,但是如果我选择要与之共享的联系人,则会给我一条错误消息
首先,其他应用没有您的Contact
类。如果您在Intent
中放一个,它们将以ClassNotFoundException
崩溃。
第二,您没有关注the rules for ACTION_SEND
。当其他应用尝试使用您的Intent
时,即使Contact
没问题,它们也会失败,因为它们将尝试使用EXTRA_TEXT
或EXTRA_STREAM
,而您没有一个。他们将尝试使用image/*
作为MIME类型,这不仅无法匹配您不存在的文本或流,而且还是通配符,您需要提供具体的MIME类型。