Android 方法中声明的最终静态布尔变量
我有一个摄像头权限按钮,在按钮上点击listener我有以下两个主要条件。 1:如果获得许可,只需进入摄像机活动。。。 2:else检查2个进一步的条件(1:i检查(使用布尔变量)如果“不再请求权限”已在对话框中签入,则转到设置…2:else请求权限) 在onRequestPermissionsResult方法中,我检查了用户是否授予权限,然后转到相机活动。。。else检查用户是否选中“不再请求权限”将布尔变量else show权限设置为true被拒绝 一切正常,但当我重新启动活动时,它会将该布尔变量设置为false(现在,如果用户上次可能已选中“不再请求权限”),它应该将用户带到设置中,但在第一次单击时它不会,单击一次(当该布尔变量设置为true)后,它将工作。 所以我的问题是如何在onRequestPermissionsResult方法中设置布尔变量final(这样它在活动重新启动时不会更改),并在onCreate方法中使用它(超出范围) 下面是onCreate中的按钮onclick侦听器代码Android 方法中声明的最终静态布尔变量,android,variables,scope,sharedpreferences,Android,Variables,Scope,Sharedpreferences,我有一个摄像头权限按钮,在按钮上点击listener我有以下两个主要条件。 1:如果获得许可,只需进入摄像机活动。。。 2:else检查2个进一步的条件(1:i检查(使用布尔变量)如果“不再请求权限”已在对话框中签入,则转到设置…2:else请求权限) 在onRequestPermissionsResult方法中,我检查了用户是否授予权限,然后转到相机活动。。。else检查用户是否选中“不再请求权限”将布尔变量else show权限设置为true被拒绝 一切正常,但当我重新启动活动时,它会将该布
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;
}
}
@覆盖
public void onRequestPermissionsResult(int-RC,字符串per[],int[]PResult){
开关(RC){
案例请求许可代码:
if(假定[0]==已授予PackageManager.PERMISSION){
Toast.makeText(GalleryImageSelection.this,“已授予权限,现在您的应用程序可以访问摄像头。”,Toast.LENGTH_LONG.show();
Intent Intent=新Intent(android.provider.MediaStore.ACTION\u IMAGE\u CAPTURE);
startActivityForResult(意向书,7);
}否则{
//for(int i=0,len=per.length;i
无需使用该布尔值来处理权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.CAMERA}, 1001);
} else {
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 7);
}
} else {
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 7);
}
而在onRequestPermissionsResult中
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults != null && grantResults.length > 0) {
switch (requestCode) {
case 1001:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 7);
} else {
if (ActivityCompat.shouldShowRequestPermissionRationale(HomeActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
Toast.makeText(this, "Please allow permission", Toast.LENGTH_SHORT).show();
} else {
AlertDialog dialog= new AlertDialog.Builder(HomeActivity.this)
.setMessage("Apply permission")
.setPositiveButton("Open Settings", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
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 );
}
})
.create();
dialog.show();
}
}
break;
}
}
}
不需要使用该布尔值来处理权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.CAMERA}, 1001);
} else {
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 7);
}
} else {
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 7);
}
而在onRequestPermissionsResult中
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults != null && grantResults.length > 0) {
switch (requestCode) {
case 1001:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 7);
} else {
if (ActivityCompat.shouldShowRequestPermissionRationale(HomeActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
Toast.makeText(this, "Please allow permission", Toast.LENGTH_SHORT).show();
} else {
AlertDialog dialog= new AlertDialog.Builder(HomeActivity.this)
.setMessage("Apply permission")
.setPositiveButton("Open Settings", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
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 );
}
})
.create();
dialog.show();
}
}
break;
}
}
}
您可以在onRequestPermissionsResult上使用
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults != null && grantResults.length > 0) {
switch (requestCode) {
case 1001:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 7);
} else {
if (ActivityCompat.shouldShowRequestPermissionRationale(HomeActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
Toast.makeText(this, "Please allow permission", Toast.LENGTH_SHORT).show();
} else {
AlertDialog dialog= new AlertDialog.Builder(HomeActivity.this)
.setMessage("Apply permission")
.setPositiveButton("Open Settings", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
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 );
}
})
.create();
dialog.show();
}
}
break;
}
}
}
原始答案:您可以在onRequestPermissionsResult上使用
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults != null && grantResults.length > 0) {
switch (requestCode) {
case 1001:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 7);
} else {
if (ActivityCompat.shouldShowRequestPermissionRationale(HomeActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
Toast.makeText(this, "Please allow permission", Toast.LENGTH_SHORT).show();
} else {
AlertDialog dialog= new AlertDialog.Builder(HomeActivity.this)
.setMessage("Apply permission")
.setPositiveButton("Open Settings", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
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 );
}
})
.create();
dialog.show();
}
}
break;
}
}
}
原始答案:我使用SharedReference解决了这个问题。我将布尔值放入SharedReference中,如下所示:
if (!showRational){
boolean isChecked= true;
sharedpreferences = getSharedPreferences(mypreference,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean("isChecked", isChecked);
editor.commit();
}
sharedpreferences = getSharedPreferences(mypreference,
Context.MODE_PRIVATE);
boolean checked = sharedpreferences.getBoolean("isChecked", false);
if (checkPermission())
{
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 7);
}
else if(checked)
{
openSetting();
}else {
requestPermission();
}
然后点击按钮进入,如下所示:
if (!showRational){
boolean isChecked= true;
sharedpreferences = getSharedPreferences(mypreference,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean("isChecked", isChecked);
editor.commit();
}
sharedpreferences = getSharedPreferences(mypreference,
Context.MODE_PRIVATE);
boolean checked = sharedpreferences.getBoolean("isChecked", false);
if (checkPermission())
{
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 7);
}
else if(checked)
{
openSetting();
}else {
requestPermission();
}
现在,当我重新启动活动时,它不会更改布尔变量的值
所以结论是“如果有人想使用变量:
-应在一个方法中声明和初始化,并在另一个方法中调用(超出范围),
-(或)在一个方法中需要初始化一次,然后永远不应该更改,并且在任何方法中都应该可用
我们将在SharedReference中保存该变量的值,并将其放在任何需要的地方。我使用SharedReference解决了它。我将布尔值放在SharedReference中,如下所示:
if (!showRational){
boolean isChecked= true;
sharedpreferences = getSharedPreferences(mypreference,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean("isChecked", isChecked);
editor.commit();
}
sharedpreferences = getSharedPreferences(mypreference,
Context.MODE_PRIVATE);
boolean checked = sharedpreferences.getBoolean("isChecked", false);
if (checkPermission())
{
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 7);
}
else if(checked)
{
openSetting();
}else {
requestPermission();
}
然后点击按钮进入,如下所示:
if (!showRational){
boolean isChecked= true;
sharedpreferences = getSharedPreferences(mypreference,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean("isChecked", isChecked);
editor.commit();
}
sharedpreferences = getSharedPreferences(mypreference,
Context.MODE_PRIVATE);
boolean checked = sharedpreferences.getBoolean("isChecked", false);
if (checkPermission())
{
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 7);
}
else if(checked)
{
openSetting();
}else {
requestPermission();
}
现在,当我重新启动活动时,它不会更改布尔变量的值
所以结论是“如果有人想使用变量:
-应在一个方法中声明和初始化,并在另一个方法中调用(超出范围),
-(或)在一个方法中需要初始化一次,然后永远不应该更改,并且在任何方法中都应该可用
我们将在SharedReference中保存该变量的值,并将其获取到所需的任何位置。为什么不使用SharedReference跟踪。为什么不使用SharedReference跟踪。没有帮助,我正在处理此案例“当应用程序显示“请求权限”对话框时,如果用户单击“不再显示”复选框并拒绝该权限,则下次用户再次单击“请求权限”按钮时,它应将用户带到“设置”中。它可以工作,但问题是当用户重新启动活动时,它第一次将不工作,没有帮助,我正在处理此案例。”“当应用程序显示“请求权限”对话框时,如果用户单击“不再显示”复选框并拒绝该权限,则下次用户再次单击按钮时,它应将用户带到“设置”中。它可以工作,但问题是当用户重新启动活动时,它第一次将无法工作,