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

Posted

技术标签:

【中文标题】如何在 Android 10 中根据包名共享不同的文本?【英文标题】:How to share different texts based on package name in Android 10? 【发布时间】:2020-08-06 09:38:48 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

例如here是Facebook等的自定义分享,但是这个方法相当耗时。

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

BroadcastReceiver 创建一个PendingIntent 并在Intent.createChooser() 中提供其IntentSender,如下所示:
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 10 中根据包名共享不同的文本?的主要内容,如果未能解决你的问题,请参考以下文章

android应用锁之获取前台进程包名方法

请教如何使用android studio同时打包多个apk

如何在不重构的情况下发布两个具有相同源代码但不同包名的 android 应用程序

如何在android中获取Fragment的包名(不是Activity的)[重复]

google play store - 如何推广具有不同包名的测试应用程序?

Android 在两个应用程序之间共享用户 ID