需求:
用户分享照片、音视频等特定文件时,系统弹出分享面板,让我们选择目标程序,如:微信、朋友圈、QQ、微博邮件等。那么如何让我们的APP也出现在分享面板中,供用户选择呢??

实现
- 增加 intent-filter
修改androidmanifest.xml文件,在对应的activity(用于接收分享过来的文件的Activity)上,配置intent-filter
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="iwangzhe.customsystemshare">
<application
android:allowBackup="true"
android:icon="@mipmap/fightk"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="image/*"/><!--可增加文件类型-->
</intent-filter>
</activity>
</application>
</manifest>
- activity中接收分享的文件
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
if (Intent.ACTION_SEND.equals(action) && type != null) {
Uri uri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
String filePath=getRealPathFromURI(uri);
Toast.makeText(this, "filepath:"+filePath, Toast.LENGTH_SHORT).show();
}
}
private String getRealPathFromURI(Uri uri) {
String[] proj = {MediaStore.MediaColumns.DATA};
Cursor cursor=getContentResolver().query(uri, proj, null, null, null);
if(cursor.moveToNext()){
return cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA));
}
cursor.close();
return null;
}
}
本示例仅输出文件的路径,很简单。
-
安装APP
安装成功,一起看下效果吧。
2.png
网友评论