Whatsapp喜欢通过短信实现邀请,只是短信,而不是通过意图选择器

但使书种多,会有岁稔时。这篇文章主要讲述Whatsapp喜欢通过短信实现邀请,只是短信,而不是通过意图选择器相关的知识,希望能为你提供帮助。
无法在我的应用程序堆栈中启动默认短信活动。在nexus 6棒棒糖和android一个棉花糖中看到的问题。
我试图发送ACTION_VIEW的意图,并设置smsto:和sms正文。
我能够启动短信应用程序。
我有我的应用程序的以下行为。

  1. 我的应用程序中有联系号码列表
  2. 当用户说邀请时,我想启动默认短信应用程序,填写和短信正文和默认短信应用程序应该在我的活动任务。
  3. 在退回时,我想关闭消息应用程序。
请参阅下面的参考图片1.我的应用程序邀请2.在邀请,启动短信
send sms, press back, check recent app list
我能够实现的目标。我能够在kitkat中实现上述功能。 (默认短信应用程序完成),但不是在棒棒糖和棉花糖。默认短信应用程序转到后台。
  1. 启动默认短信应用并填写数据。
  2. 在按下时,消息传递应用程序转到后台。
  3. 现在,我将能够从最近的应用程序列表中启动短信应用程序,该应用程序列表再次填充具有相同号码和正文的收件人,这不是预期的。
问题是,app在新的活动任务中启动。我无法在我的活动任务中获得该消息传递应用程序。如果我按回该消息传递应用程序,我可以回到我的应用程序。但是如果我从最近的列表中选择消息传递应用程序,它每次都会显示短信收件人和正文填充的活动。
请在下面找到代码段
private void sendTextMessage(String to) { if (Build.VERSION.SDK_INT > = Build.VERSION_CODES.KITKAT) // At least KitKat { String defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(mActivity); // Need to change the build to API 19 Logger.log_error(TAG + "sendTextMessage() above KITKAT"); Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.setType("text/plain"); sendIntent.putExtra("address", to); sendIntent.putExtra("sms_body", "sms body"); sendIntent.putExtra(Intent.EXTRA_TEXT, "sms body"); if (defaultSmsPackageName != null)// Can be null in case that there is no default, then the user would be able to choose // any app that support this intent. { sendIntent.setPackage(defaultSmsPackageName); Logger.log_error(TAG + "sendTextMessage() defaultSmsPackageName = " + defaultSmsPackageName); } getContext().startActivity(sendIntent); } else // For early versions, do what worked for you before. { Intent smsIntent = new Intent(android.content.Intent.ACTION_VIEW); Logger.log_error(TAG + "sendTextMessage() below KITKAT"); smsIntent.setType("vnd.android-dir/mms-sms"); smsIntent.putExtra("address", to); smsIntent.putExtra("sms_body", getString(R.string.str_share_app_short_text)); startActivity(smsIntent); } }

这种启动方式正在搞乱消息应用程序。
我尝试启动没有历史记录的意图,单个实例,从最近排除。
作为参考,我附上了whatsapp屏幕截图,我试图在我的活动中使用它。我无法在堆栈溢出中发布超过2个链接,因此仅保留最近的应用列表。
  1. 启动whatsapp,转到联系人,向下滚动,查找绿色邀请和邀请。
  2. 它将推出短信应用程序。
  3. 检查最近。
check in recent list
答案我想,我找到了答案。可能不是理想但有效。
private void shareEx() { List< Intent> targetShareIntents=new ArrayList< Intent> (); PackageManager packageManager = getContext().getPackageManager(); Intent shareIntent=new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.setType("text/plain"); List< ResolveInfo> resInfos= getContext().getPackageManager().queryIntentActivities(shareIntent, 0); if(!resInfos.isEmpty()){ Logger.log_error( TAG + "sharenew Have package"); for(ResolveInfo resInfo : resInfos){ String packageName = resInfo.activityInfo.packageName; Intent intent = new Intent(); intent.setComponent(new ComponentName(packageName, resInfo.activityInfo.name)); intent.setAction(Intent.ACTION_SEND); intent.setType("text/plain"); intent.setPackage(resInfo.activityInfo.parentActivityName); //ignore list if(packageName.contains("wifi") || packageName.contains("bluetooth") || packageName.contains("nfc") || packageName.contains("connect") || packageName.contains("memo") || packageName.contains("translate") || packageName.contains("gps") || packageName.contains("file") || packageName.contains("File") || packageName.contains("drive") || packageName.contains("office") || packageName.contains("docs") || packageName.contains("dropbox") || packageName.contains("beam") || packageName.contains("keep")) { Logger.log_error( TAG + "sharenew IGNORE Package packageName = " + packageName); continue; }Logger.log_error( TAG + "sharenew Package packageName = " + packageName); if (packageName.contains("sms") || packageName.contains("mms") || packageName.contains("talk") || packageName.contains("messaging") || packageName.contains("twitter") || packageName.contains("com.facebook.orca")) { intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.str_share_app_short_text)); intent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.str_share_app_subject)); } else if(packageName.contains("whatsapp")) { // dont add subject for whatsapp intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.str_share_app_long_text)); } else { intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.str_share_app_long_text)); intent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.str_share_app_subject)); } targetShareIntents.add(new LabeledIntent(intent, packageName, resInfo.loadLabel(packageManager), resInfo.icon)); } if(!targetShareIntents.isEmpty()){ Logger.log_error( TAG +"sharenew Have Intent"); Intent chooserIntent=Intent.createChooser(targetShareIntents.remove(0), "Choose app to share"); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetShareIntents.toArray(new Parcelable[]{})); startActivity(chooserIntent); }else{ Logger.log_error( TAG +"sharenew nothing"); } } }

参考:How to filter specific apps for ACTION_SEND intent (and set a different text for each app)
【Whatsapp喜欢通过短信实现邀请,只是短信,而不是通过意图选择器】我要求人们改进答案。谢谢。

    推荐阅读