gpt4 book ai didi

android - 对 SEND 操作 Intent 的权限拒绝

转载 作者:搜寻专家 更新时间:2023-11-01 08:17:38 25 4
gpt4 key购买 nike

这是日志,我在运行 Oreo O'S 的三星系统中遇到崩溃:

Fatal Exception: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.SEND typ=text/plain flg=0x80001 pkg=com.google.android.apps.maps cmp=com.google.android.apps.maps/com.google.android.apps.gmm.sharing.SendTextToClipboardActivity clip={text/plain T:"XYZ"

Intent share = new Intent(Intent.ACTION_SEND);
share.setType("text/plain");
share.setComponent(new ComponentName(packageName, resolveInfo.activityInfo.name));
share.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
share.putExtra(Intent.EXTRA_TEXT, shareMessage);
share.setPackage(packageName);

请提出建议。

谢谢

最佳答案

这里有几个选项。您可以通过专门过滤掉 Google map 最近添加为 Intent 处理程序的 SendTextToClipboardActivity 来避免此崩溃。 (它看起来完全像真正的 Android“复制到剪贴板”共享目标,并且很可能是 Google map 部分错误的结果。)或者您可以过滤掉任何 ResolveInfo 其中不导出对应的Activity;但是,这可能会导致在您自己的应用程序中过滤掉您确实想要向用户显示的共享目标,在这种情况下,您需要允许非从您自己的应用程序包中导出 Activity 。

例如,假设您有类似这样的东西来为您的ACTION_SEND Intent 获取提供者列表:

PackageManager packageManager = mActivity.getPackageManager();
List<ResolveInfo> providers = packageManager.queryIntentActivities(sendIntent, 0);

然后您可以过滤掉已知会导致问题的提供程序,和/或 Activity 未标记为已导出的提供程序。例如,您可以使用如下检查来构建您自己的提供商列表以显示给用户:

for (ResolveInfo provider : providers) {
if ("com.google.android.apps.maps".equalsIgnoreCase(provider.activityInfo.packageName)
&& "com.google.android.apps.gmm.sharing.SendTextToClipboardActivity".equalsIgnoreCase(provider.activityInfo.name)) {
continue; // Skip specific Activity you don't want to show
}
if (!BuildConfig.APPLICATION_ID.equalsIgnoreCase(provider.activityInfo.packageName) && !provider.activityInfo.exported) {
continue; // Skip providers where the Activity is not marked with exported=true, unless they're from our own app
}
acceptableProviders.add(provider);
}

然后如何将 acceptableProviders 显示为共享选项留给读者作为练习。关键是过滤掉已知的不良提供商。

与此同时,您还可以联系 Google 提示这个新的 Intent 处理程序的不良行为,它本质上是伪装成用于“复制到剪贴板”的受信任的 Android text/plain 处理程序共享目标。

关于android - 对 SEND 操作 Intent 的权限拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57662388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com