我是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为开发人员和用户带来积极的体验。
我在做什么错了?
答案 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_PHONE
,SEND_SMS
等标记为敏感权限。由于包含个人数据,因此如果控制不当或向任何钓鱼号码发送/发送消息,任何人都不可能滥用此数据。
他们试图做的是,那些主要不依赖于这些许可的应用程序(例如需要短信验证或类似操作的常规应用程序)将其从这些许可权中删除。而且,只有核心功能依赖于这些权限的应用程序才应该拥有这些权限,例如仅使用依赖于这些权限的运营商应用程序。