實現分享功能的幾個辦法
- 呼叫系統的分享功能
- 通過第三方SDK,如ShareSDK,友盟等
- 自行使用各自平臺的SDK,比如QQ,微信,微博各自的SDK
這裡就記錄下第一種辦法。
分享文字資訊
Intent textIntent = new Intent(Intent.ACTION_SEND);
textIntent.setType("text/plain");
textIntent.putExtra(Intent.EXTRA_TEXT, "這是一段分享的文字");
startActivity(Intent.createChooser(textIntent, "分享"));
複製程式碼
效果如下圖:
分享單張圖片
String path = getResourcesUri(R.drawable.shu_1);
Intent imageIntent = new Intent(Intent.ACTION_SEND);
imageIntent.setType("image/jpeg");
imageIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(path));
startActivity(Intent.createChooser(imageIntent, "分享"));
複製程式碼
分享多個檔案
ArrayList<Uri> imageUris = new ArrayList<>();
Uri uri1 = Uri.parse(getResourcesUri(R.drawable.dog));
Uri uri2 = Uri.parse(getResourcesUri(R.drawable.shu_1));
imageUris.add(uri1);
imageUris.add(uri2);
Intent mulIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
mulIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
mulIntent.setType("image/jpeg");
startActivity(Intent.createChooser(mulIntent,"多檔案分享"));
複製程式碼
上面幾個例子的效果都是一樣的,建立一個選擇器,讓使用者自己選擇分享到哪裡。 這裡有一點得注意,就是通過這種方法進行分享,Intent傳遞的資料的Type(就是setType()方法)一定要控制好,不然會出錯。(至於為什麼後面說)。 其中由於是分享的res中的圖片,故轉變為uri,方法在這:
private String getResourcesUri(@DrawableRes int id) {
Resources resources = getResources();
String uriPath = ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
resources.getResourcePackageName(id) + "/" +
resources.getResourceTypeName(id) + "/" +
resources.getResourceEntryName(id);
Toast.makeText(this, "Uri:" + uriPath, Toast.LENGTH_SHORT).show();
return uriPath;
}
複製程式碼
指定分享到微信
Intent wechatIntent = new Intent(Intent.ACTION_SEND);
wechatIntent.setPackage("com.tencent.mm");
wechatIntent.setType("text/plain");
wechatIntent.putExtra(Intent.EXTRA_TEXT, "分享到微信的內容");
startActivity(wechatIntent);
複製程式碼
效果如下:
指定分享到QQ
Intent qqIntent = new Intent(Intent.ACTION_SEND);
qqIntent.setPackage("com.tencent.mobileqq");
qqIntent.setType("text/plain");
qqIntent.putExtra(Intent.EXTRA_TEXT, "分享到微信的內容");
startActivity(qqIntent);
複製程式碼
效果如下:
注意:文章省略了6.0的動態許可權,與7.0的FileProvider的適配細節,請自行新增。
原始碼參考
歡迎關注該公眾號,不定期分享技術文章