Android,通过Sharesheet共享自定义数据?

问题描述

我正在尝试使用共享表共享自定义数据,第一个问题是:可能吗?

示例:在我的应用程序中有一个通讯录,我想通过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_TEXTEXTRA_STREAM,而您没有一个。他们将尝试使用image/*作为MIME类型,这不仅无法匹配您不存在的文本或流,而且还是通配符,您需要提供具体的MIME类型。