我是 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/