【问题标题】:Ask Location & Storage permission again in Android在 Android 中再次询问位置和存储权限
【发布时间】:2022-10-07 21:28:11
【问题描述】:

我正在使用最少api level 23 构建我的 android 应用程序。我的应用需要storage(READ/WRITE) 和当前位置权限。当用户访问被拒绝 2 次时,对话框不会再次弹出。

我想再次显示弹出窗口,而不是在拒绝后将用户发送到 app-info 以手动授予权限。那可能吗?

我的存储权限代码:

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

        

            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE != PackageManager.PERMISSION_GRANTED) {
                this.requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 2);

            }
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                this.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 2);
          
            }
   

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {

        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 2: {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(this, "Permission granted!", Toast.LENGTH_SHORT).show();
                }
                else {
                    Toast.makeText(this, "Permission denied!", Toast.LENGTH_SHORT).show();
                }
                break;
            }
        }
    }

我的位置权限代码:


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

 if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
 this.requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
}



@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if (requestCode == 1){
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED){
           Toast.makeText(this, "Permission granted!", Toast.LENGTH_SHORT).show();
            }else {
                    Toast.makeText(this, "Permission denied!", Toast.LENGTH_SHORT).show();
                }
        }
    }

【问题讨论】:

    标签: android permissions android-permissions permission-denied


    【解决方案1】:

    不,这是不可能的。您应该显示一些弹出窗口,通知用户您的应用程序需要此权限,然后单击肯定按钮后,您应该将用户移动到应用程序设置。

    原因是两次拒绝权限后,状态设置为“永远拒绝”,ActivityCompat.shouldShowRequestPermissionRationale(activity, permission) 方法将返回 false。

    一些应用程序通过禁用应用程序的特定功能来强制用户授予权限。例如,单击“在地图上显示”按钮后,只需请求权限,如果拒绝,则会显示一个弹出窗口,表明应用程序需要此权限并且用户无法打开地图视图。

    【讨论】:

      猜你喜欢
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      相关资源
      最近更新 更多