我目前正在开发一个 Android 应用程序,需要一个启动电话的功能,所以我添加了这段代码。
public void dialPhoneNumber(String phoneNumber) {
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:" + phoneNumber));
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
..它似乎在较旧的 Android 版本中完美运行,但是当我在 Android 11 中测试它时,它根本不起作用我尝试过action_call
并添加了权限<uses-permission android:name="android.permission.CALL_PHONE" />
还是不行。
你的问题出在代码行intent.resolveActivity(getPackageManager())
。当您调用resolveActivity时,您将收到如下警告:
调用此方法时,请考虑在清单中添加声明;看https://g.co/dev/packagevisibility欲了解详情
检查下面的文档包管理器,你会看到这个注释:
注意:如果您的应用面向 Android 11(API 级别 30)或更高版本,则此类中的每个方法都会返回经过筛选的应用列表。详细了解如何管理包可见性。
那么这意味着什么呢?
在 Android 11 中,Google 添加了包可见性策略。应用程序现在可以更严格地控制查看其他应用程序。您的应用程序将无法查看或访问您的应用程序之外的应用程序。
你需要做什么?
您需要做的就是添加以下代码行AndroidManifest.xml
:
<manifest>
<queries>
<!-- Specific intents you query for -->
<intent>
<action android:name="android.intent.action.DIAL" />
</intent>
</queries>
</manifest>
更多信息:
- Android 11 中的包可见性
- Android 上的包可见性过滤
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)