quitar - permisos android studio
Forzar la aplicaciĆ³n para reiniciarse desde la primera actividad(cuando se deniega un permiso) (2)
¿Quiso decir esto?
Actividad principal:
public class MainActivity extends AppCompatActivity {
TextView txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txt = (TextView)findViewById(R.id.txt);
txt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, ActivityB.class);
intent.putExtra("from","MainActivity");
startActivity(intent);
finish();
}
});
}
}
ActividadB:
public class ActivityB extends AppCompatActivity {
String intentTxt="";
final int MY_PERMISSIONS_REQUEST_PHONE_CALL = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
intentTxt = getIntent().getStringExtra("from");
}
@Override
protected void onResume() {
super.onResume();
if(intentTxt.equals("MainActivity")) {
if (ContextCompat.checkSelfPermission(ActivityB.this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(ActivityB.this, new String[]{android.Manifest.permission.CALL_PHONE},
MY_PERMISSIONS_REQUEST_PHONE_CALL);
}
}
intentTxt = "";
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_PHONE_CALL: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "32434"));
startActivity(intent);
} else {
Intent intent = new Intent(ActivityB.this,MainActivity.class);
startActivity(intent);
finish();
}
return;
}
}
}
}
Puede iniciar splashActivity / HomeActivity desde onRequestPermissionsResult of ActivityB. Busque el permiso en onResume of ActivityB para que aparezca el cuadro de diálogo de permisos cuando se llame a ActivityB por primera vez y también cuando se reanude.
Se sabe que cuando negamos los permisos en tiempo de ejecución en Android 6.0 y reanudamos la aplicación desde el menú reciente, el proceso de la aplicación se cancela y la aplicación se reinicia por la fuerza . Esto es supuestamente para prevenir cualquier problema de seguridad:
Es notable que, cuando se reanude, la aplicación se reinicie desde la última Activity
que la dejamos activada. El sistema operativo aparentemente realiza un seguimiento de la última Activity
el usuario visitó.
Desafortunadamente, esto es un problema, ya que rompe el flujo de la lógica empresarial. No se puede permitir al usuario acceder a la aplicación a mitad de camino de esta manera.
Mi pregunta es, ¿hay una manera de forzar que la aplicación se reinicie desde la primera Activity
de la aplicación, en lugar de la que el usuario dejó?
¿Hay alguna devolución de llamada asociada con el reinicio de una aplicación, el proceso de eliminación o la activación de permisos?
¿Es este un enfoque equivocado? ¿Si es así, cómo? ¿Y cuál sería el enfoque correcto?
Este comportamiento, por supuesto, se ha observado antes:
1. Vista previa de Android M: la actividad se recrea después de la concesión del permiso
2. La aplicación se está eliminando después de habilitar / deshabilitar permisos de configuración en Android M nexus 6
3. Android Marshmallow: cambio de permisos para la aplicación en ejecución
4. Todos los permisos de mi aplicación se revocan después de presionar "Restablecer las preferencias de la aplicación"
5. Permiso de Android 6: se bloquea al cambiar el permiso en Configuración y volver a la aplicación
Debe manejar la creación (re) creación de la actividad utilizando el Bundle
proporcionado por onCreate
, guardado por onSaveInstanceState
, más información here .
Pase el Bundle
todo lo que necesita para recuperarse de un estado anterior y restaurar su interfaz de usuario a la perfección. Su Activity
puede ser recreada por muchas razones, la cancelación de permisos es solo una de ellas, la rotación de pantalla es otra, por lo que siempre que pueda sobrevivir a una, puede sobrevivir a todas ellas.