Ash*_*sha 5 java android android-studio
我目前正在开发一个 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);
}
}
Run Code Online (Sandbox Code Playgroud)
..它似乎在旧的 Android 版本中完美工作,但是当我在 Android 11 中测试它时,它根本不起作用我尝试action_call并添加了权限<uses-permission android:name="android.permission.CALL_PHONE" />仍然不起作用。
Dươ*_*inh 22
你的问题出在代码行上intent.resolveActivity(getPackageManager())。当您调用resolveActivity时,您将收到如下警告:
调用此方法时,请考虑在清单中添加声明;有关详细信息,请参阅https://g.co/dev/packagevisibility
查看PackageManager下的文档,你会看到这样的注释:
注意:如果您的应用面向 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>
Run Code Online (Sandbox Code Playgroud)
更多信息:
| 归档时间: |
|
| 查看次数: |
5405 次 |
| 最近记录: |