¿Cómo detectar cuándo el usuario inicia otra aplicación? (Androide)

Estoy tratando de construir una aplicación donde mi aplicación se ejecuta en segundo plano y detecta cuando el usuario inicia otra aplicación para que pueda controlar el flujo desde allí. Para ilustrar mi consulta, me gustaría especificar un ejemplo. Mi aplicación se ejecuta en segundo plano (como un servicio), y el usuario acaba de hacer clic en la aplicación 'XYZ'. ¿Es posible que mi aplicación detecte que se ha lanzado la aplicación 'XYZ'? Más que simplemente detectar si la Actividad de XYZ ha llegado al primer plano, quiero detectar si XYZ ha sido lanzado o no. Digamos que alguien inicie 'Whatsapp Messenger', quiero saber si mi aplicación puede saber que 'Whatsapp Messenger' ha sido lanzado.

EDIT: Mucha gente piensa que estoy tratando de crear malware, pero no lo estoy. Estoy tratando de construir una aplicación para un proyecto de escuela secundaria. Quiero una estadística para ver la frecuencia con la que uso mi cámara como parte de un proyecto de psicología. : /

Gracias de antemano, Sumit.

No estoy seguro de si esta es la mejor manera de hacerlo, pero funciona, puede utilizar el logcat y mirar su salida, puede utilizar este permiso

 android.permission.READ_LOGS 

Y utilice el siguiente código:

 try { Process mLogcatProc = null; BufferedReader reader = null; mLogcatProc = Runtime.getRuntime().exec(new String[]{"logcat", "-d"}); reader = new BufferedReader(new InputStreamReader(mLogcatProc.getInputStream())); String line; final StringBuilder log = new StringBuilder(); String separator = System.getProperty("line.separator"); while ((line = reader.readLine()) != null) { log.append(line); log.append(separator); } String w = log.toString(); Toast.makeText(getApplicationContext(),w, Toast.LENGTH_LONG).show(); } catch (Exception e) { Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); } 

Y no se olvide de su permiso en android manifiesto, puede agregar este código a un hilo para que funcione

Sí, puede encontrar la aplicación que se inicia, mediante el seguimiento de la Logcat . Solo rastrea la etiqueta de ActivityManager con información -I registro.

De adb shell El comando es,

 adb logcat ActivityManager:I *:S 

Desde su código de aplicación,

 logcat ActivityManager:I *:S 

Y en Logcat usted puede encontrar una línea algo así como,

 I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...} 

Cuando se lance cualquier aplicación.

Es salida logcat que muestra que el mensaje se relaciona con el nivel de prioridad "I" y la etiqueta "ActivityManager":

Actualizar:

Simplemente agregue permiso en el archivo de manifiesto de su aplicación,

 android.permission.READ_LOGS 

Supongo que deberías echar un vistazo a las aplicaciones "protector de aplicaciones" en Google Play. Detectan que el usuario ha iniciado otra aplicación. Esto se logra leyendo los registros del sistema. Intente abrir LogCat y leer los registros después de haber iniciado cualquier aplicación en el dispositivo. Usted se sorprenderá.

¿Y adónde ir desde allí? Supongo que deberías probar la aplicación aLogCat . Es libre y de código abierto. Eso le ayudará a leer los registros.

Sin embargo, todo esto se considera una violación de seguridad en Android por algunos desarrolladores.

He hecho un servicio que puede detectar si se inicia otra aplicación. Lo he hecho para el dialer. Similarmente que puede ser reemplazado por cualquier nombre de paquete.

 @Override public int onStartCommand(Intent intent, int flags, int startId){ Toast.makeText(this,"Service Started", Toast.LENGTH_LONG).show(); final String str = ""; Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { int phonelaunched = 0,phoneclosed =0; int phonelaunches = 1; @Override public void run() { ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo = am.getRunningAppProcesses(); for ( ActivityManager.RunningAppProcessInfo appProcess: runningAppProcessInfo ) { Log.d(appProcess.processName.toString(),"is running"); if (appProcess.processName.equals("com.android.dialer")) { if ( appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND /*isForeground(getApplicationContext(),runningAppProcessInfo.get(i).processName)*/){ if (phonelaunched == 0 ){ phonelaunched = 1; Log.d(str,"dude phone has been launched"); } else if (phoneclosed == 1){ phonelaunches++; phoneclosed = 0; Log.d(String.valueOf(phonelaunches),"dude that was counter"); } } else { phoneclosed = 1; Log.d(str,"dude phone has been closed"); } } } } },2000,3000); return START_STICKY; } 

Aquí voy a través de todas las tareas en ejecución y comprobar si es nuestra aplicación prevista. Si es así, compruebo si la aplicación es de primer plano y la aplicación nunca se inicia con la variable 'phonelaunched'. Phoneclosed se utiliza cuando la aplicación prevista está en segundo plano y la variable se establece en consecuencia.

Todo esto se implementa en la clase de servicio

En mi libro, por la forma en que planteó la pregunta, que suena como hi-jacking una aplicación de cierta manera para que su servicio de control, bordeando el malware jinx. Pero no funcionará en Android – simple y simple debido a los permisos de cada aplicación es diferente. De esta manera, cada aplicación está aislada entre sí. Así que para responder a su pregunta sin rodeos, su No.

Como la otra respuesta sugirió – usted puede supervisar el logcat pero .. entonces otra vez … porqué?

  • Inicio del servicio en el arranque sin actividad
  • El servicio no se detendrá cuando el método stopService se llame
  • ¿Cómo se restablece el servicio de WhatsApp incluso si debo detener la aplicación?
  • Ayúdame a usar correctamente los Servicios y los Hilos
  • No se puede comprobar si AlarmManager ha configurado la alarma
  • ¿Por qué no funciona mi servicio en Android? (Sólo quiero registrar algo nunca 5 segundos)
  • Samsung inhabilita paquetes
  • Servicio Android + cuenta atrás = no funciona
  • Servicio enlazado de Android, ¿qué sucede cuando la actividad no lo enlaza?
  • Cómo evitar el servicio de asesinato del sistema cuando se cancela la aplicación / actividad
  • Uso de facebook android sdk desde el servicio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.