5

我已经在我的应用程序中实现了Dexter。它适用于 CAMERA、EXTERNAL STORAGE 和 INTERNAL STORAGE 权限。我想用 PHONE_CALL 权限与Dexter通话。当我像这样拨打电话的意图时:

Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + strNum));
startActivity(callIntent);

然后startActivity显示警告Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with checkPermission) or explicitly handle a potential SecurityException less... (Ctrl+F1)

我不明白我已经实现了Dexter那么为什么startActivity要自我许可呢?

4

2 回答 2

2

对于 API 23+,您应该检查权限:

if (mContext.checkSelfPermission(Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
    Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + strNum));
    startActivity(callIntent):   
}

Intent.ACTION_CALL intent,这需要一个权限,即android.permission.CALL_PHONE一个。但是对于 sdk>=23 你需要在运行时使用Manifest.permission.CALL_PHONE. 它适用于targetedsdkversion 23 及更高版本。

如果您将targetedsdkversion 降低到23 以下,则不需要此权限并且Intent.ACTION_CALL可以正常工作。

于 2017-01-18T10:11:13.840 回答
0

我有一个类似的问题。对我来说,当我试图打电话时,我的理由就显现出来了。我添加了清单标签:

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

不知道为什么除了使用 Dexter 运行时检查之外我还必须这样做,但它解决了我的问题。

于 2018-11-08T06:54:19.487 回答