【问题标题】:Android requestPermission doesnot show a dialogAndroid请求权限不显示对话框
【发布时间】:2016-07-21 11:57:47
【问题描述】:

我需要从我的应用程序中拨打给定的电话号码。

所以我必须验证通话权限。

但对话框显示在我的应用程序中,它直接进入拒绝功能。我在这里做了什么问题。请查看我的代码并为此提供解决方案。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 105);
            } else {
                startActivity(callIntent);
            }
        } else {
            startActivity(callIntent);
        }

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case 105:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                callJobseeker();
            } else {
                Toast.makeText(getApplicationContext(), "You cannot make a call.Because call permission is denied", Toast.LENGTH_SHORT).show();
            }
            break;
                 }
                }

在清单文件中被授予如下权限:

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

【问题讨论】:

  • 您正在检查哪个 android 操作系统?
  • @NilayDani 正在检查 6.0 版本
  • @KrishnaVeni 为什么你有写权限 com.jobsearchtry.permission.CALL_PHONE
  • @KrishnaVeni 运行时权限stackoverflow.com/questions/38141523/…
  • @SohailZahid 是的,我已经尝试过同样的方法...但是没有显示允许和拒绝的警报对话框...它会自动转到拒绝选项。为什么?

标签: android permissions request android-6.0-marshmallow


【解决方案1】:

尝试 shouldShowRequestPermissionRationale

//Function use for request permission to access camera & gallary.
    private void requestPermission() {
        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CALL_PHONE)) {
            Toast.show(context, getString(R.string.requestPermission));
        } else {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, PERMISSION_REQUEST_CODE);
        }
    }

【讨论】:

    【解决方案2】:

    你可以这样做。制作如下所示的课程

    public class CheckPermisson  {
    
        private Context context;
    
        public CheckPermisson(Context context) {
            this.context = context;
        }
    
        public boolean checkCallPermission() {
            if (ContextCompat.checkSelfPermission(context.getApplicationContext(), Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
                Log.i("TAG","Call Permission is granted");
              return true;
    
    
            } else {
    
                return false;
            }
    
        }
        public boolean checkExternalStoragePermission() {
            if (ContextCompat.checkSelfPermission(context.getApplicationContext(),android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    == PackageManager.PERMISSION_GRANTED) {
                Log.i("TAG", "Storage Permission is granted");
                return true;
            }
            else
            {
                return false;
            }
        }
        public boolean checkLocationPermission() {
            if (ContextCompat.checkSelfPermission(context.getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(context.getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
                Log.i("TAG", "Location Permission is granted");
                return true;
            }
            else
            {
                return false;
            }
        }
    }
    

    你可以像下面这样使用

    CheckPermisson permisson = new CheckPermisson(getActivity());
    
    if (Build.VERSION.SDK_INT >= 23) {
        if (permisson.checkCallPermission()) {
            itemSelectedPosition = position;
            createDialogBox(position);
        } else {
            requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, CALL_PERMISSION_REQUEST_CODE);
        }
    } else {
        createDialogBox(position);
    }
    

    在清单中添加以下权限

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

    【讨论】:

      【解决方案3】:

      您应该通过以下方式检查用户是否已授予 CALL_PHONE 权限:

      if (checkSelfPermission(android.Manifest.permission. CALL_PHONE)
                  == PackageManager.PERMISSION_GRANTED) {
              Log.v(TAG,"Permission is granted");
              return true; 
      }
      

      【讨论】:

        【解决方案4】:

        我得到了答案。,

        我在帖子中的错误是。,

        在 android 清单文件中,我已经删除了这一行。,

        <permission android:name="com.example.permission.CALL_PHONE"
            />
        

        我已更改以下代码。,

        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                            ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.CALL_PHONE}, 105);
                        } else {
                            startActivity(callIntent);
                        }
        

        【讨论】:

          猜你喜欢
          • 2017-05-06
          • 2018-03-19
          • 1970-01-01
          • 1970-01-01
          • 2022-06-30
          • 2015-10-30
          • 2016-03-18
          • 2021-03-06
          • 1970-01-01
          相关资源
          最近更新 更多