android - 方法中声明的最终静态 bool 变量

标签 android variables scope sharedpreferences

我有一个相机权限按钮,在按钮点击监听器上我有 2 个主要的以下条件。 1:如果获得许可,只需转到相机 Activity ... 2:否则检查 2 个进一步的条件(1:我检查(使用 bool 变量)是否在对话框中选中“不再询问权限”然后转到设置....2:否则请求权限)。

在 onRequestPermissionsResult 方法中,我检查了用户是否授予权限然后转到相机 Activity ...否则检查用户是否选中“不再请求权限”设置为真 bool 变量否则显示权限被拒绝。

一切正常,但当我重新启动 Activity 时,它会将 bool 变量设置为 false(现在,如果用户上次可能已经检查了“不要再次请求许可”),它应该将用户带到设置但是第一次点击时不会,点击后(当 bool 变量设置为 true 时)它会起作用。 所以我的问题是如何在 onRequestPermissionsResult 方法中设置 bool 变量 final(因此它不会在 Activity 重启时改变)并在 onCreate 方法中使用它(超出范围)。

这里是 onCreate 中的按钮 onclick 监听器代码。

                if (checkPermission())
               {

                Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

                startActivityForResult(intent, 7);
               // Toast.makeText(GalleryImageSelection.this,"CAMERA permission allows us to Access CAMERA app", Toast.LENGTH_LONG).show();

            }
            else {
                if (test){ //test is that boolean variable
                    Uri packageUri = Uri.fromParts( "package", getApplicationContext().getPackageName(), null );

                    Intent intent = new Intent();

                    intent.setAction( Settings.ACTION_APPLICATION_DETAILS_SETTINGS );
                    intent.setData( packageUri );
                    intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );

                    startActivity( intent );
                }else {
                ActivityCompat.requestPermissions(GalleryImageSelection.this,new String[]{
                        Manifest.permission.CAMERA}, RequestPermissionCode);

            } }

这里是onRequestPermissionsResult方法代码

@Override
public void onRequestPermissionsResult(int RC, String per[], int[] PResult) {

    switch (RC) {

        case RequestPermissionCode:

                if (PResult[0] == PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(GalleryImageSelection.this, "Permission Granted, Now your application can access CAMERA.", Toast.LENGTH_LONG).show();

                    Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivityForResult(intent, 7);

                } else {
                   // for (int i = 0, len = per.length; i < len; i++) {
                     //   String permission = per[i];
                        if (PResult[0] == PackageManager.PERMISSION_DENIED){
                    boolean showRational =shouldShowRequestPermissionRationale(per[0]);
                    if (!showRational){
                        test = true;//test is declared above onCreate for 
                                    //scope purpose
                    }
                    else if (CAMERA.equals(per[0])) {
                        Toast.makeText(GalleryImageSelection.this, "Permission Denied, your application cannot access CAMERA.", Toast.LENGTH_LONG).show();

                    }
                }
                    }

                break;
            }
    }

最佳答案

您可以使用 ActivityCompat#shouldShowRequestPermissionRational在 onRequestPermissionsResult 上

原始答案:Link

关于android - 方法中声明的最终静态 bool 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57800732/

相关文章:

java - 如何解决 java.net.ConnectException :/ip_address:port - Connection refused exception in android

linux - 从另一个函数打印

class - 如何在 Smalltalk 中访问类变量

c++ - 堆栈分配的对象在超出范围后仍然占用内存?

c++ - 我想确认我对变量作用域的理解在 C++ 中是正确的

javascript - javascript 和 Node.js 中的全局变量作用域

android - 逐帧播放视频

android - 如何有条件地启动 RxJava 链,将 Completable 转换为 Flowable?

Android 应用程序在模拟器中工作但不在设备中

java - 该变量属于哪个线程?