Android 调用系统分享到其他包中,首先判断手机中是否含有该app
public static synchronized boolean isContainPackName(final Context mContext , String packName) {
boolean isContainPack = false;
try {
PackageManager packageManager = mContext.getPackageManager();
PackageInfo info = packageManager.getPackageInfo(packName , PackageManager.GET_ACTIVITIES);
if(info != null){
isContainPack = true;
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return isContainPack;
}
Facebook 包名为 : com.facebook.katana
Messager包名为 : com.facebook.orca
What's App 包名为 : com.whatsapp
然后调用系统的分享
1.分享文字或链接:
sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT,shareText);//shareText 为需要分享的内容 sendIntent.setType("text/plain"); sendIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); sendIntent.setPackage(packageName);//packageName 为需要分享到的包名 startActivity(sendIntent);
2.分享文件:
//直接调用系统的分享,我这里只是实现了录音的 public void shareAudioRecord(Context mContext , File file){ if(file.exists() && file.length() > 0){ // Uri mUri = getFileUri(mContext , file); Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addCategory("android.intent.category.DEFAULT"); intent.putExtra(Intent.EXTRA_STREAM,getFileUri(mContext , file)); intent.setType("audio/*");//设置分享的格式 // intent.putExtra(Intent.EXTRA_STREAM, mUri); // 授予目录临时共享权限 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); try { mContext.startActivity(Intent.createChooser(intent,mContext.getResources(). getString(R.string.shareRecord_titleName))); } catch (Exception e) { e.printStackTrace(); } }
//指定包名分享
public void shareAudioRecord(Context mContext , File file , String packageName){ if(file.exists() && file.length() > 0){ Uri mUri = getFileUri(mContext , file); Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_STREAM,getFileUri(mContext , file)); intent.setPackage(packageName); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addCategory("android.intent.category.DEFAULT"); // intent.putExtra(Intent.EXTRA_STREAM, mUri); // 授予目录临时共享权限 // intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION // | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); // // String fileType = ""; // Uri fileUri = getFileUri(mContext, file); // if (fileUri != null && !TextUtils.isEmpty(fileUri.toString())) { // ContentResolver contentResolver = mContext.getContentResolver(); // if(contentResolver != null){ // fileType = contentResolver.getType(fileUri); // } // } // // if (TextUtils.isEmpty(fileType)){ // fileType = getFileType(file.getAbsolutePath()); // 使用上面的根据文件头信息获取文件类型的方法 // } // // if (TextUtils.isEmpty(fileType)){ // fileType = "*/*"; // } // intent.setDataAndType(mUri, "audio/3gpp"); intent.setType("audio/*"); try { mContext.startActivity(Intent.createChooser(intent,mContext.getResources(). getString(R.string.shareRecord_titleName))); } catch (Exception e) { e.printStackTrace(); } } } private static Uri getFileUri(Context context, File file){ Uri uri; // 低版本直接用 Uri.fromFile if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { uri = Uri.fromFile(file); }else { // 使用 FileProvider 会在某些 app 下不支持(在使用FileProvider 方式情况下QQ不能支持图片、视频分享,微信不支持视频分享) uri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileProvider", file); } return uri; }