最近项目有需求可以从其它应用中分享内容进自己的应用,自己做第三方接口让别人适配不现实,研究了下,挺简单,很多app支持系统分享,好像还不错。
从Android官方文档上看,系统分享只支持三类格式:文本、图片、多张图片。通过它们我们可以接收其它应用分享的数据,也能分享数据到其它应用。
-
首先接收其它应用分享的数据
你需要在你接口数据的Activity里做配置,即AndroidManitest.xml对Activity做配置
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="image/"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="image/"/>
</intent-filter>
可能这样配置了,你还是分享不到内容,那可能是在Activity中设置了android:exported=false,设为true就好。
配置好后,你还需要在当前设置的Activity中接收:
Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
if (action.equals(Intent.ACTION_SEND) && type != null) {
if (type.equals("text/plain")) {
handleSendText(intent);
} else if (type.startsWith("image/")) {
handleSendImage(intent);
}
} else if (action.equals(Intent.ACTION_SEND_MULTIPLE) && type != null)
{
if (type.startsWith("image/")) {
handleSendMultiImage(intent);
}
} else { //do nothing.}private void handleSendText(Intent intent) { String shareText = intent.getStringExtra(Intent.EXTRA_TEXT); String title = intent.getStringExtra(Intent.EXTRA_SUBJECT); Map<String, String> stringMap = getContent(intent); if (!TextUtils.isEmpty(shareText)) { //处理获取到的内容 } } private void handleSendImage(Intent intent) { Uri shareUri = intent.getParcelableExtra(Intent.EXTRA_STREAM); if (shareUri != null) { //处理获取的图片 } } private void handleSendMultiImage(Intent intent) { ArrayList<Uri> uris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); if (uris != null && uris.size() > 0) { //处理获取到的多图 } }
做完上述东西,当你打开点击其它应用分享图标时,你就能看到自己的应用图标了。
-
将数据分享给其它应用
相信看完上面的数据接收过程,对数据怎么分享出去有大概思路了,见代码:
private void shareText() {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, "我是全世界最聪明的人!");
intent.setType("text/plain");
startActivity(intent);
}private void shareImage() { Uri uri = Uri.parse("content://notes/data/media/20"); Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_STREAM, uri); intent.setType("image/*"); startActivity(intent); } private void shareMultiImage() { ArrayList<Uri> uris = new ArrayList<>(); uris.add(Uri.parse("content://notes/data/media/20")); uris.add(Uri.parse("content://notes/data/media/21")); uris.add(Uri.parse("content://notes/data/media/22")); uris.add(Uri.parse("content://notes/data/media/23")); Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND_MULTIPLE); intent.putExtra(Intent.EXTRA_STREAM, uris); intent.setType("image/*"); startActivity(intent); }
ok,简单的系统分享功能完成!