android - 如何在 Android 10 中根据包名共享不同的文本?

标签 android android-intent android-intent-chooser

我的应用程序共享一个特定 URL 以在其他应用程序中打开,但我想使用自定义 URL,具体取决于用户与之共享的应用程序。例如,对于 Gmail,我想使用 myurl.com?src=gmail , 和 FB 我想使用 myurl.com?src=fb等等

这通常可以使用这个著名的方法:https://stackoverflow.com/a/18068122/3015986 .
但是,在 Android 10 中,该解决方案不再有效:https://medium.com/@AndroidDeveloperLB/this-wont-work-anymore-on-android-q-1702c19eb7bb

那么,还有哪些其他选择?

最佳答案

好吧,总是有选择。在这种特殊情况下(使用有关 URL 查询参数的给定条件),我建议为您要与之共享内容的每个平台创建单独的共享方法,而不是使用 Android 默认共享方法。

例如 here是 Facebook 等的自定义共享。但是该方法非常耗时。

但是有一个更好的选择来处理这种情况。这是一种获取有关选择了哪个应用程序的信息的相对较新的方法。这很容易。基本上你需要:

  • 创建 PendingIntent对于 BroadcastReceiver并提供其IntentSenderIntent.createChooser()像这样:
  • Intent share = new Intent(ACTION_SEND);
    ...
    PendingIntent pi = PendingIntent.getBroadcast(myContext, requestCode,
                    new Intent(myContext, MyBroadcastReceiver.class),
                    FLAG_UPDATE_CURRENT);
    share = Intent.createChooser(share, null, pi.getIntentSender());
    
  • MyBroadcastReceiver 中接收回调并查看 Intent.EXTRA_CHOSEN_COMPONENT像这样:
  • @Override public void onReceive(Context context, Intent intent) {
      ...
      ComponentName clickedComponent = intent.getParcelableExtra(EXTRA_CHOSEN_COMPONENT);
    }
    

    更多信息 here

    尽管您无法更改每个特定案例的 URL,因为共享事件已经发生,但您可以实现单独的 API 调用或 URL 链接,使用它们可以收集分析数据,更改您发送的 URL 点击的结果(如果您控制后端,当然)或者只是向您的应用程序的用户显示一条自定义消息。

    请记住,对于此方法的某些用例,您共享的 URL 对于每个用户应该是唯一的(例如,更改 URL 单击的结果等)。

    希望能帮助到你。

    关于android - 如何在 Android 10 中根据包名共享不同的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61380847/

    相关文章:

    java - 将 .spd 文件转换为 pdf 文件

    android - 如何处理 libGDX 中的不同纵横比?

    android - android中 Activity 的单个实例

    android - 如何在 Android 10 中以编程方式安装任何 Android 应用

    android - 将信息从 CustomDialog 传递到主 Activity

    android - 用户取消 Intent 选择器时是否有事件?

    android - 为 Zip 文件选择 Intent

    android - 在 Canvas 上绘制两个 3D 字符串?

    Android aapt 输出格式

    android - 执行 createChooser(context,intent,IntentSender) 后不调用 BroadcastReceiver