Google Play短信和电话访问

时间:2018-12-20 00:27:11

标签: 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控制台帮助中心”文章,其中描述了预期的用途,例外,无效的用途以及使用“呼叫日志”或SMS权限的替代选项,以确定以下哪些选项适用于受影响的用户应用程序:

选项1)您的应用程序不需要访问呼叫日志或SMS权限:从应用程序清单中删除指定的权限,或者在2019年1月9日之前迁移到其他实现。如果您需要额外的时间来删除权限或迁移,其他选择,请提交“权限声明表”以请求将其延期至2019年3月9日。

选项2)您的应用是默认处理程序,或者您认为自己的应用符合例外条件:如果您尚未这样做,请在2019年1月9日之前使用“权限声明表格”提交请求。我们正在审核提交,并将回复您的请求。注意:您无需对应用进行更改即可有资格提交请求。 确保您的应用符合其他所有开发者计划政策,以防止您的应用被删除。

感谢您一直以来的支持,以使Google Play为开发人员和用户带来积极的体验。

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

  

我在做什么错了?

现在,您是:

  • 使用ACTION_CALL拨打电话,并且
  • 尝试使用ACTION_VIEW sms:中的Uri启动SMS客户端

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

您确实需要CALL_PHONE权限才能使用ACTION_CALL直接拨打电话。如果您愿意使用ACTION_DIAL,则可以摆脱CALL_PHONE权限。代价是ACTION_DIAL只是在您所需的电话号码上显示拨号程序,迫使用户点击一个按钮来拨打电话。我认为这是一个合理的权衡,因为您的SMS代码实际上并没有发送SMS,而是启动了可以发送SMS的应用程序。使用ACTION_DIAL可以使您的操作具有并行性,并且可以消除这两种权限。

答案 1 :(得分:0)

Google已将CALL_PHONESEND_SMS等标记为敏感权限。由于包含个人数据,因此如果控制不当或向任何钓鱼号码发送/发送消息,任何人都不可能滥用此数据。

他们试图做的是,那些主要不依赖于这些许可的应用程序(例如需要短信验证或类似操作的常规应用程序)将其从这些许可权中删除。而且,只有核心功能依赖于这些权限的应用程序才应该拥有这些权限,例如仅使用依赖于这些权限的运营商应用程序。