从拨号盘拨打电话号码会返回警告:"呼叫需要获得用户可能拒绝的权限,并且#34;

时间:2016-01-20 06:55:03

标签: java android android-intent android-permissions

当用户点击具有数字的TextView时,我试图基本上拨号:

number_title.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent callIntent = new Intent(Intent.ACTION_CALL);
                        callIntent.setData(Uri.parse("tel:+"+user.getTelephone()));
                        activity.startActivity(callIntent);
                        //the above line returns the warning given below
                    }
});

我得到的警告:

  

通话需要获得用户拒绝的许可。代码到   明确检查权限是否可用

我了解如果之前未授予权限,则应用需要请求权限。我的问题是,如何在拨打电话前明确请求许可?

3 个答案:

答案 0 :(得分:2)

这只是检查权限的参考调用示例:

if(!checkSelfPermission(Manifest.permission. CALL_PHONE)==PackageManager.PERMISSION_GRANTED){

    requestPermissions(this,new String {}(Manifest.permission. CALL_PHONE),INT_TO_CHECK RESULT);

}

让我知道这是否有效。

编辑:对代码进行修改以解释。

答案 1 :(得分:2)

嗯,这是关于运行时权限的,所以只在manifest中声明它们才行不通。相反,您必须在开始通话之前检查权限。

这样的事情应该有用 - 如果用户之前没有授予许可(或者如果他撤销了),则只会要求用户获得许可:

CREATE FUNCTION test_create_common_test_2() RETURNS SETOF TEXT AS $$
        BEGIN
            PERFORM _create_common_test('i_am_argument2');
        END
    $$ LANGUAGE plpgsql;

我主要从谷歌上面的代码: http://developer.android.com/training/permissions/requesting.html 如果您想了解更多信息,请访问该链接。

编辑: private static final int MY_PERMISSIONS_REQUEST_CALL_PHONE = 1234; public void yourfunction() { number_title.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.CALL_PHONE}, MY_PERMISSIONS_REQUEST_CALL_PHONE); } else { executeCall(); } } }); } private void executeCall() { // start your call here activity.runOnUiThread(new Runnable() { @Override public void run() { Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:+"+user.getTelephone())); activity.startActivity(callIntent); } }); } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_CALL_PHONE: { // If request is cancelled, the result arrays are empty. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // permission was granted, yay! executeCall(); } else { // permission denied, boo! Disable the // functionality that depends on this permission. } return; } } } 将成为您活动中的回调函数。你可能必须在那里处理电话。

答案 2 :(得分:0)

使用它可能会起作用:

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