Estoy usando un AlarmManager
para activar una intención que transmite una señal. El siguiente es mi código:
AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(this, Wakeup.class);
try
{
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
Long elapsed += // sleep time;
mgr.set(AlarmManager.RTC_WAKEUP, elapsed, pi);
}
catch(Exception r)
{
Log.v(TAG, "RunTimeException: " + r);
}
Llamo a este código desde un Activity
, así que no sé cómo podría obtener el siguiente error ...
ERROR/AndroidRuntime(7557): java.lang.RuntimeException: Unable to start receiver com.wcc.Wakeup: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
Para la instancia múltiple de la misma actividad, use el siguiente fragmento,
Nota : este fragmento, lo estoy usando fuera de mi
Activity
. Asegúrese de que suAndroidManifest
archivo no contengaandroid:launchMode="singleTop|singleInstance"
. si es necesario, puede cambiarlo aandroid:launchMode="standard"
.Esto funciona bien para mi. Espero que esto ahorre tiempo para alguien. Si alguien encuentra una mejor manera, comparta con nosotros.
fuente
Android Doc dice:
Eso significa
(Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
que es obligatorio agregarIntent.FLAG_ACTIVITY_NEW_TASK
mientras se llamastartActivity()
desde fuera de unActivity
contexto.Por lo tanto, es mejor agregar un indicador para todas las versiones:
fuente
No pegaste la parte donde llamas
startActivity
, esa es la parte interesante.Puede estar llamando
startActivity
en unService
contexto o en unApplication
contexto.Imprima "this" para registrar el gato antes de hacer la
startActivity
llamada, y vea a qué se refiere, a veces es un caso de usar accidentalmente un "this" interno.fuente
A veces, este error puede ocurrir sin una llamada explícita a
startActivity(...)
. Por ejemplo, algunos de ustedes pueden haber visto un rastro de pila como este en Crashlytics:Y es posible que se pregunte qué hizo mal, ya que la traza solo incluye código de marco. Bueno, aquí hay un ejemplo de cómo puede suceder esto. Digamos que estamos en un fragmento.
Ahora, cuando un usuario hace clic en esa vista de texto, su aplicación se bloqueará con el seguimiento de la pila anterior. Esto se debe a que el inflador de diseño tiene una referencia al contexto de la aplicación y, por lo tanto, su vista de texto tiene un contexto de aplicación. Al hacer clic en esa vista de texto, las llamadas están implícitamente
appContext.startActivity(...)
.Nota final: probé esto en dispositivos Android 4, 5, 6 y 7. Solo afecta a 4, 5 y 6. Aparentemente, los dispositivos Android 7 no tienen problemas para llamar
appContext.startActivity(...)
.¡Espero que esto ayude a alguien más!
fuente
Este mismo error me he enfrentado en caso de recibir notificaciones en los últimos dispositivos Android 9 y 10.
Depende del modo de inicio cómo lo esté manejando. Utilice el siguiente código: - android: launchMode = "singleTask"
Agregue este indicador con Intent: - intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
fuente
Intenta cambiar a esta línea:
fuente
Solo quiero notar que
startActivity
desde afuera una actividad es válida en algunas versiones de Android (entre N y O-MR1) y lo interesante es que es un error en el código fuente de Android!Este es el comentario de la
startActivity
implementación anterior . Ver aquí .fuente
Cuando desee abrir una actividad dentro de su aplicación, puede llamar al método startActivity () con un Intent como parámetro. Esa intención sería la actividad que desea abrir. Primero debe crear un objeto de esa intención con el primer parámetro como contexto y el segundo parámetro como la clase de actividad objetivo.
Espero que esto ayude.
fuente