Android 自定义系统分享面板

作者: Android技术分享 | 来源:发表于2018-02-07 15:06 被阅读68次

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

1.png

实现

  1. 增加 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>
  1. 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;
    }
}

本示例仅输出文件的路径,很简单。

  1. 安装APP
    安装成功,一起看下效果吧。


    2.png

相关文章

网友评论

    本文标题:Android 自定义系统分享面板

    本文链接:https://www.haomeiwen.com/subject/fezozxtx.html