【问题标题】:Intent Action_dial does not function in android 11Intent Action_dial 在 android 11 中不起作用
【发布时间】:2021-10-10 00:29:17
【问题描述】:

我目前正在开发一个 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" /> 仍然不起作用。

【问题讨论】:

    标签: java android android-studio


    【解决方案1】:

    您的问题在于代码行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>
    

    更多信息:

    1. Package visibility in Android 11
    2. Package visibility filtering on Android

    【讨论】:

      【解决方案2】:

      你可以试试这个,它也可以在 android 11 上完美运行

      val intent = Intent(Intent.ACTION_DIAL)
      intent.data = Uri.parse("tel:$contactNo")
      startActivity(intent)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-20
        • 1970-01-01
        • 2022-01-19
        • 2011-11-04
        • 1970-01-01
        • 2022-01-03
        相关资源
        最近更新 更多