筆記:分享圖片/文字/HTML到其他App
分享文字/圖片到其他App,例如FB、Line
以前分享文字
以前分享文字,自己寫intent,然後開啟Activity
static Intent getSendTextIntent(String text) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, text);
return intent;
}
startActivity(getSendTextIntent("Hello, just do a test!"));
一般還會建議應該再判斷是否可以啟動Activity
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
現在分享文字
現在用ShareCompat就好了
import android.support.v4.app.ShareCompat;
最新的JetPack是引用
import androidx.core.app.ShareCompat;
ShareCompat.IntentBuilder.from(MainActivity.this)
.setType("text/plain")
.setChooserTitle("Share Text")
.setText("Hello, just do a test!")
.startChooser();
如果要Intent也是可以getIntent()取出來
Intent intent =
ShareCompat.IntentBuilder.from(MainActivity.this)
.setType("text/plain")
.setText("Hello, just do a test!")
.getIntent();
現在取得分享內容
在Activity中加入AndroidManifest.xml
<intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:mimeType="text/plain" /> </intent-filter>
處理分享內容
ShareCompat.IntentReader intentReader =
ShareCompat.IntentReader.from(MainActivity.this);
if (intentReader.isShareIntent()) {
Toast.makeText(getApplicationContext(),
"got share intent@onCreate text:" + intentReader.getText(),
Toast.LENGTH_LONG).show();
}
Intent intent = ShareCompat.IntentBuilder.from(MainActivity.this)
.setType(getContentResolver().getType(uriToImage))
.setStream(uriToImage)
.getIntent();
intent.setData(uriToImage);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(intent, "Share Image"));
setType如果沒有寫,會導致你用IntentReader來接收分享,需要額外多寫一段處理。
這裡的Type是透過ContentResolver幫我們決定,就不用自己寫"image/jpeg", "image/png"之類的。(偷懶XD)
粗體字部份如果沒有寫,在選擇分享到哪個App的時候不會顯示預覽圖。設FLAG的目的是讓分享的App可以直接有權限讀取該Uri。
現在分享圖片到其他App
Uri uriToImage = 你的從圖片選取器中取的Uri;Intent intent = ShareCompat.IntentBuilder.from(MainActivity.this)
.setType(getContentResolver().getType(uriToImage))
.setStream(uriToImage)
.getIntent();
intent.setData(uriToImage);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(intent, "Share Image"));
setType如果沒有寫,會導致你用IntentReader來接收分享,需要額外多寫一段處理。
這裡的Type是透過ContentResolver幫我們決定,就不用自己寫"image/jpeg", "image/png"之類的。(偷懶XD)
粗體字部份如果沒有寫,在選擇分享到哪個App的時候不會顯示預覽圖。設FLAG的目的是讓分享的App可以直接有權限讀取該Uri。
提供範例
https://github.com/Mirochiu/ShareToApps其他關於分享
- https://medium.com/androiddevelopers/2e6db9d1368b
圖片跟檔案的分享 - https://www.jianshu.com/p/eb66de7f504c
分享到Line的坑,只在Intent中指定package會有LINE和LINE Keep - https://medium.com/androiddevelopers/2e6db9d1368b
Android framework成員寫的關於分享內容,很完整!
留言