PHONE_CALL权限在Dexter中无效

时间:2017-01-18 09:38:39

标签: android android-intent android-permissions android-phone-call

我在我的应用中实施了Dexter。它适用于CAMERA,EXTERNAL STORAGE和INTERNAL STORAGE许可。我想通过Dexter与PHONE_CALL权限通话。当我打电话给这样的电话时打算:

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需要自我许可?

2 个答案:

答案 0 :(得分: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检查运行时。这是针对targetsdkversion 23及以上。

如果你将目标sdkversion降低到23以下,那么你就不需要这种延迟,Intent.ACTION_CALL可以正常工作。

答案 1 :(得分:0)

我有一个类似的问题。对我来说,当我尝试拨打电话时,我的辩解正在显示。我添加了清单标签:

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

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