Android分享---呼叫系統自帶的分享功能

姜康發表於2018-03-04

實現分享功能的幾個辦法


  1. 呼叫系統的分享功能
  2. 通過第三方SDK,如ShareSDK,友盟等
  3. 自行使用各自平臺的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);
複製程式碼

效果如下:

分享到QQ

注意:文章省略了6.0的動態許可權,與7.0的FileProvider的適配細節,請自行新增。

原始碼參考

KTools

歡迎關注該公眾號,不定期分享技術文章

超光速

相關文章