android intent 分发,Android分享操作
現在用的比較多的都是三方的分享,其實安卓自帶的就有簡單的分享。
在構建Intent時,可以指定這個Intent需要觸發的actions。比如ACTION_SEND,該action表明該intent用于從一個activity發送數據到另外一個activity的,甚至可以跨進程之間的數據發送。系統會自動識別出能夠兼容接受的這些數據的activity。如果這些選擇有多個,則把這些activity顯示給用戶進行選擇;如果只有一個,則立即啟動該Activity。
分享數據
分享簡單的數據
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT,"This is my text to send");
sendIntent.setType("text/plain");
startActivity(sendIntent);
在不同的程序之間使用intent收發數據是在社交分享內容時最常用的方法。
若有多個匹配的程序,則系統會把他們都給篩選出來,并呈現Dialog給用戶進行選擇。
如果設備上安裝有某個能夠匹配ACTION_SEND且MIME類型為text/plain的程序,則Android系統會立即執行它。
不過為intent調用了Intent.createChooser(),那么Android總是會顯示可供選擇:
startActivity(Intent.createChooser(sendIntent,getResources().getText(R.string.send_to)));
看下顯示效果:
image.png
image.png
image.png
分享圖片
如果想要分享圖片不是文字的話,首先得將setType設置成“image/jpeg”,如果不確定圖片類型直接使用"image/*,同時數據需要結合設置特定的MIME類型,EXTRA_STREAM里面放置數據的URI。
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_STREAM, mCroppedImageFile.getPath());
sendIntent.setType("image/");
startActivity(Intent.createChooser(sendIntent, "分享"));
image.png
image.png
image.png
分享多種類型數據
如果分享3張JPEG的圖片,那么MIME類型仍然是image/jpeg。如果是不同圖片格式的話,應該是用image/來匹配那些可以接收任何圖片類型的activity。如果需要分享多種不同類型的數據,可以使用/*來表示MIME。
一次分享多張圖片
ArrayList imageUris = new ArrayList<>();
imageUris.add(Uri.fromFile(mCroppedImageFile));
imageUris.add(Uri.fromFile(mCroppedImageFile));
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
sendIntent.putExtra(Intent.EXTRA_STREAM, imageUris);
sendIntent.setType("image/*");
startActivity(Intent.createChooser(sendIntent, "分享"));
可以看到同時分發了2張圖片:
image.png
接收從其他App傳送來的數據
讓自己的app可以接受數據
Intent filters告訴Android系統一個程序愿意接受的數據類型。
android:name=".MainActivity"
android:theme="@style/CustomActionBarTheme">
上面將當前app的MainActivity可以接受文字。然后我們用另外一個app來分享文字:
image.png
上圖中的TraningApp就是我自己定義能接受文字分享的app
處理接受到的數據
為了處理從Intent帶來的數據,可以通過調用getIntent()方法來獲取到Intent對象。拿到這個對象后,我們可以對其中面的數據進行判斷,從而決定下一步行為。
Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
if (Intent.ACTION_SEND.equals(action)){
if ("text/plain".equals(type)){
Log.e(TAG, "ACTION_SEND:"+intent.getStringExtra(Intent.EXTRA_TEXT) );
}
}
然后發送消息:
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "測試文字");
sendIntent.setType("text/plain");
startActivity(Intent.createChooser(sendIntent, "分享"));
查看log日志:
07-26 12:32:51.315 9746-9746/com.example.frc.trainingapp E/MainActivity: ACTION_SEND:測試文字
同樣我們可以添加圖片的處理:
if (Intent.ACTION_SEND.equals(action)) {
if ("text/plain".equals(type)) {
Log.e(TAG, "ACTION_SEND:" + intent.getStringExtra(Intent.EXTRA_TEXT));
} else if ("image/*".equals(type)) {
Uri uri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
Log.e(TAG, "ACTION_SEND_URI:"+uri.toString());
}
}
查看Log日志:
07-26 14:09:37.135 30944-30944/com.yanxiu.yxsanke_android E/SK::: /storage/emulated/0/YXSanKe_Android/res/nnnn.jpg
note:需要注意的是處理發送過來的數據可能會是耗時操作,建議不要在UI線程進行
總結
以上是生活随笔為你收集整理的android intent 分发,Android分享操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 静态注册wifi广播,A
- 下一篇: android 5.1 raw,升级安卓