Android 在手机图库分享,或者在其他软件分享,实现我指定的app能接收到那个分享信息

现在的app都有自带的分享功能,但是你有没有想过,你分享的时候是怎么获取到那个功能,或者是那个app呢,所以今天我们就来说一说。

1.就是需要在主运行的activity配置清单里面注册,这样app才能接收到别人分享的东西
这个是获取到jpeg照片格式

 <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="image/jpeg" />
            intent-filter>

下面是获取本地png图片申请的权限

  <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="image/png" />
            intent-filter>

这个是获取网址申请的权限

 <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/html" />
            intent-filter>

这个是可以允许任意的文件,没有指定文件类型。(这两个差不多)

 <intent-filter android:label="@string/app_name" >
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="*/*" />
            intent-filter>
            <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:scheme="file" />
                <data android:mimeType="*/*" />
                <data android:pathPattern=".*\\.pdf" />
                <data android:host="*" />
            intent-filter>

下面的是运行主代码:

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private static final String TAG="MainActivity";
    private TextView mTv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTv=findViewById(R.id.mTv);
        //这个是获取分享过来的视频链接,等都可以接收
        Intent intent = getIntent();
        String stringExtra = intent.getStringExtra(Intent.EXTRA_TEXT);
        if (!TextUtils.isEmpty(stringExtra)) {
            mTv.setText(stringExtra);
        }
        //下面注释的都是从本地获取的
//        Intent itnIn = getIntent();
//        Bundle extras = itnIn.getExtras();
//        String action = itnIn.getAction();
//        Log.e(TAG,"我是接受的消息111");
//        if (Intent.ACTION_SEND.equals(action)) {
//            if (extras.containsKey(Intent.EXTRA_STREAM)) {
//                try {
//                    // Get resource path from intent
//                    Uri uri2 = (Uri) extras.getParcelable(Intent.EXTRA_STREAM);
//                    Log.e(TAG,"我是接受的消息"+uri2);
//
////                // 返回路径
////                    String path = getRealPathFromURI(MainActivity.this, uri2);
////                    Log.e(TAG,"我是文件路径"+path);
//                } catch (Exception e) {
//                    Log.e(this.getClass().getName(), e.toString());
//                }
//
//            }
//        }
    }
    /**
     * 通过Uri获取文件在本地存储的真实路径
     * @param act
     * @param contentUri
     * @return
     */
    public String getRealPathFromURI(Activity act, Uri contentUri) {

// can post image
        String[] proj = { MediaStore.Images.Media.DATA };
        Cursor cursor = act.managedQuery(contentUri, proj, // Which columns to return
                null, // WHERE clause; which rows to return (all rows)
                null, // WHERE clause selection arguments (none)
                null); // Order-by clause (ascending by name)
        if (cursor==null) {
            String path = contentUri.getPath();
            return path;
        }

        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);

    }
}

布局就不粘贴了,就是一个Textview

你可能感兴趣的:(Android)