现在的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