setOnClickListener don';当我拒绝许可时,我不会做任何事情-android
我有我的主体setOnClickListener don';当我拒绝许可时,我不会做任何事情-android,android,button,onclicklistener,android-permissions,Android,Button,Onclicklistener,Android Permissions,我有我的主体活动,首先我调用一个对话框向用户发出警告 权限,当用户在GPS权限中单击“接受”时,按钮可以正常工作,但当我“拒绝”权限时,按钮不能工作 这是我的班级: public class InicioActivity extends AppCompatActivity { public int count=0; int tempInt = 0; private FirebaseUser mFirebaseUser; private FirebaseAuth firebaseUser;
活动
,首先我调用一个对话框向用户发出警告
权限,当用户在GPS权限中单击“接受”时,按钮可以正常工作,但当我“拒绝”权限时,按钮不能工作
这是我的班级:
public class InicioActivity extends AppCompatActivity {
public int count=0;
int tempInt = 0;
private FirebaseUser mFirebaseUser;
private FirebaseAuth firebaseUser;
private Button mButtonTrabajador;
private Button mButtonCliente;
private static final int RC_LOCATION_CONTACTS_PERM = 99;
private static final int RC_LOCATION_CONTACTS_PERME = 122;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_inicio);
mFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/RobotoLight.ttf")
.setFontAttrId(R.attr.fontPath)
.build()
);
String permission = "android.permission.ACCESS_COARSE_LOCATION";
final int res = this.checkCallingOrSelfPermission(permission);
String permission2 = "android.permission.ACCESS_FINE_LOCATION";
final int res2 = this.checkCallingOrSelfPermission(permission2);
mButtonCliente = (Button) findViewById(R.id.buttonIrARegistroCliente);
mButtonTrabajador = (Button) findViewById(R.id.buttonIrARegistroTrabajador);
mButtonCliente.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(res == PackageManager.PERMISSION_GRANTED && res2 == PackageManager.PERMISSION_GRANTED){
Intent intent = new Intent(InicioActivity.this, RegisterActivity.class);
//intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}else{
final AlertDialog alertDialog = new AlertDialog.Builder(getApplicationContext(), R.style.Theme_AppCompat_Light_Dialog).create();
alertDialog.setTitle("Los permisos tienen que ser activados o no podra continuar, desea actualizarlos?");
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "Ir a configuracion", new DialogInterface.OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, int which) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", InicioActivity.this.getPackageName(), null);
intent.setData(uri);
startActivity(intent);
}
});
alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Cancelar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
alertDialog.dismiss();
}
});
}
}
});
mButtonTrabajador.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(res == PackageManager.PERMISSION_GRANTED && res2 == PackageManager.PERMISSION_GRANTED) {
Intent intent = new Intent(InicioActivity.this, RegisterActivityWorkers.class);
//intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}else{
final AlertDialog alertDialog = new AlertDialog.Builder(getApplicationContext(), R.style.Theme_AppCompat_Light_Dialog).create();
alertDialog.setTitle("Los permisos tienen que ser activados o no podra continuar, desea actualizarlos?");
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "Ir a configuracion", new DialogInterface.OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, int which) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", InicioActivity.this.getPackageName(), null);
intent.setData(uri);
startActivity(intent);
}
});
alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Cancelar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
alertDialog.dismiss();
}
});
}
}
});
RequestPermissions();
}
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
private void RequestPermissions(){
if (ContextCompat.checkSelfPermission(getApplicationContext(),
Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(InicioActivity.this,
Manifest.permission.ACCESS_COARSE_LOCATION)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(InicioActivity.this,
new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
RC_LOCATION_CONTACTS_PERM);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
}
if (ContextCompat.checkSelfPermission(getApplicationContext(),
Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(InicioActivity.this,
Manifest.permission.ACCESS_FINE_LOCATION)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(InicioActivity.this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
RC_LOCATION_CONTACTS_PERME);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case RC_LOCATION_CONTACTS_PERM: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
} else {
}
return;
}
}
}
}
当我关闭应用程序时,问题仍然存在,当我在onCreate中调用对话框时,我也有同样的问题。当用户首先拒绝权限,然后第二次必须使用rational时,下面是一个示例代码
public void checkPermission() {
Log.e(TAG, " inside checkSelfPermission()");
resultCode = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS);
System.out.println(TAG + " resultCode at start :" + String.valueOf(resultCode));
if (resultCode != PackageManager.PERMISSION_GRANTED) {
//This block only will get executed after you denied first
//Here you can show why You need , then try again
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.READ_CONTACTS)) {
Log.w(TAG, "---You disabled previously, I have to show it again ----");
new AlertDialog.Builder(context).setCancelable(false).setTitle("Hi Dumb User")
.setMessage("You denied Permission ! before !! Which is required\n" +
"If you still deny ,then go to Setting ").
setPositiveButton("TRY AGAIN ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
//request Again
requestPermission();
}
}).setNeutralButton("DISMISS", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
}).show();
} else {
Log.w(TAG, " --else --");
requestPermission();//ask
}
}
}
如果您说对话框中的“否定”按钮或“取消”按钮不起作用,则可以尝试此操作
alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Cancelar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
});
我也很惊讶你把对话节目叫到哪里去了
alertDialog.show();
首先,您没有显示alertDialog。请使用alertdialog.show()
显示alertdialog。
然后使用下面的AlertDialog代码
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(Main3Activity.this);
// set title
//alertDialogBuilder.setTitle("Are you sure to Cancel the Subscription ?");
alertDialogBuilder.setTitle("Los permisos tienen que ser activados o no podra continuar, desea actualizarlos?");
// set dialog message
alertDialogBuilder
//.setMessage("After cancelling you will automatically got logout and then you have to buy subscription again")
.setCancelable(true)
.setPositiveButton("Ir a configuracion", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
}
})
.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
也许你应该在onClick?@cricket\u 007中再次检查权限。我单击时会检查权限,如果我拒绝,则会显示一个对话框,但不工作,不显示对话框。你的onCreate
只调用一次,因此checkCallingOrSelfPermission
只有在单击denyAlso之后才会加载,如果您试图查看它们是否被授予权限,则需要从onRequestPermissionsResult
中存储res
和res2