java - Google Play 短信和通话权限

标签 java android google-play

我是 Android 的新手,所以非常感谢任何帮助。我写了一个简单的目录应用程序来列出我们组织的联系人。选择联系人后,您可以单击两个按钮之一:调用或文本。当按下调用按钮时,它会向该人发起电话调用,而当按下文本按钮时,它会向该人发起短信。这是我的代码:

private void makePhoneCall() {

        if (ContextCompat.checkSelfPermission(EntryDetailActivity.this,
                Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(EntryDetailActivity.this,
                    new String[] {Manifest.permission.CALL_PHONE}, REQUEST_CALL);

        } else {
            String dial = "tel:" + currentPhoneNumber;
            startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(dial)));
        }

    }

    private void sendSMS() {

        if (ContextCompat.checkSelfPermission(EntryDetailActivity.this,
                Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(EntryDetailActivity.this,
                    new String[] {Manifest.permission.SEND_SMS}, REQUEST_SMS);

        } else {
            String dial = "sms:" + currentPhoneNumber;
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(dial)));
        }

    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == REQUEST_CALL) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                makePhoneCall();
            } else {
                Toast.makeText(this, "Please grant permission to make call!", Toast.LENGTH_SHORT).show();
            }
        }

        if (requestCode == REQUEST_SMS) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                sendSMS();
            } else {
                Toast.makeText(this, "Please grant permission to send text messages!", Toast.LENGTH_SHORT).show();
            }
        }
    }

这是我在 AndroidManifest.xml 文件中的内容:

<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.SEND_SMS" />

提交到 Google Play 商店后,我收到来自 Google 的电子邮件通知,说明:

需要采取的行动

请通读权限政策和 Play 管理中心帮助中心文章,其中描述了预期用途、异常(exception)情况、无效用途以及使用通话记录或短信权限的替代选项,以确定以下哪些选项适用于您的受影响应用程序:

选项 1)您的应用不需要访问通话记录或短信权限:从您的应用 list 中删除指定的权限,或在 2019 年 1 月 9 日之前迁移到替代实现。如果您需要更多时间来删除权限或迁移对于替代选项,请提交权限声明表以请求延期至 2019 年 3 月 9 日。

选项 2)您的应用是默认处理程序,或者您认为您的应用符合异常(exception)条件:如果您尚未这样做,请在 2019 年 1 月 9 日之前使用权限声明表提交请求。我们目前正在审核意见书,并将回应您的要求。注意:您无需更改应用即可获得提交请求的资格。 确保您的应用在其他方面符合所有其他开发者计划政策,以防止您的应用被移除。

感谢您一直以来的支持,让 Google Play 为开发者和我们的用户带来积极的体验。

我做错了什么?

最佳答案

What am I doing wrong?

现在,你是:

  • 使用 ACTION_CALL 调用电话,以及
  • 尝试使用 sms: Uri
  • ACTION_VIEW 启动 SMS 客户端

使用Intent 启动SMS 客户端不需要SEND_SMS 权限。如果您使用 SmsManager 直接发送 SMS,则需要该权限。因此,您可以从 list 和代码中删除 SEND_SMS 权限以清除它。

您确实需要 CALL_PHONE 权限才能使用 ACTION_CALL 直接调用电话。如果您愿意使用 ACTION_DIAL,则可以取消 CALL_PHONE 权限。代价是 ACTION_DIAL 只是在您想要的电话号码上调出拨号器,迫使用户点击一个按钮来调用电话。我认为这是一个合理的权衡,因为您的短信代码实际上并没有发送短信,而是调出了一个可以发送短信的应用程序。使用 ACTION_DIAL 将为您的操作带来并行性,并且允许您消除这两种权限。

关于java - Google Play 短信和通话权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53860967/

相关文章:

java - 编译器告诉我他无法解析 Singleton 方法

java - 如何在接口(interface)中存储变量以供使用?

java - 方向总是导致纵向(libgdx 中的运动控制)

java - 为什么我的代码总是转到 else 语句?

android - AndroidManifest.xml 的区别

android - 在android中从JSON中获取值

java - 创建一个加载圆/轮(类似于 ProgressDialog 中的,但没有对话框)

Android 应用内结算错误 : This item could no be purchased.(错误代码:IAB-DPTL)

java - 2020 年 11 月 1 日/ 'Account Hold' : is it mandatory to display an explanatory message to 'Account Hold' users?

android - 尝试更新测试版时出现 Google Play 错误