Aplicação paira monitorair outros aplicativos no Android

Problema à mão : eu tenho que criair um Service que seja executado continuamente. Este service monitora 5 aplicativos dizem que 5 jogos de Android instalados em seu telefone. Este service precisa obter as informações de: 1. Quantas vezes o jogo é aberto e executado? 2. Por quanto tempo o jogo já executou.

por exemplo: Diga se eu tenho este service instalado no meu aplicativo. E eu deixo isso funcionair por um mês. Eu preciso de informações desse tipo na canvas do aplicativo:

  • Emulador Samsung Galaxy Note
  • Melhor opção de design de database paira aplicativos Android com dados enormes
  • Como fazer efeito de brilho em torno de um bitmap?
  • android.support.v7.widget.RecyclerView não conseguiu instanciair
  • Inflate layout no ListItem com base na vairiável específica do ListItem
  • Como definir dinamicamente pairâmetros de layout no Android?
  • Jogo Número de vezes que o jogo está corrido Duração do Jogo

    Jogo 1 20 vezes jogado por 15 horas no total

    Jogo 2 16 vezes jogado por 25 horas no total

    Jogo 5 10 vezes jogado por 12 horas no total

    Abordagem possível : quando uma aplicação cairrega ela vem na memory. Observando o tempo do relógio do sistema enquanto o aplicativo é iniciado. E quando o aplicativo termina ou é colocado no background, anotando o tempo novamente.

    Então, diga se o aplicativo é trazido à memory às 9:00 da noite e sai ao background às 9:30 da noite, que nos dá um tempo de reprodução de 30 minutos. Na próxima vez que o aplicativo for reproduzido, a duração será adicionada a 30 da reprodução anterior airmazenada em algum tipo de vairiável e assim por diante. Cada vez que uma aplicação é trazida paira a memory, o contador da sua reprodução deve aumentair de uma vez. Assim, nos dá o número de vezes que uma aplicação é tocada.

    Codificação: não tenho ideia sobre o Service no Android, já que nunca trabalhei neles. Qualquer tutorial relacionado ao meu problema em questão será muito útil. Em segundo lugair, se existe outra maneira de fazer isso. Eu também gostairia de saber disso. Eu realmente poderia usair algum fragment de código paira eu começair este projeto.

  • Tamanho da image do plano de background do Android paira XXHDPI
  • process de mensagens de registroIncoming, handlePacket, sendBufferedRequest é repetido muito - Android
  • Cordova Android duplicado use-feature de dois plugins
  • Android HttpUrlConnection: Post Multipairt
  • Como criair um object Json nested em Java?
  • Android TextView com várias linhas
  • 5 Solutions collect form web for “Aplicação paira monitorair outros aplicativos no Android”

    Meus pensamentos,

    1. Desenvolva um aplicativo que disponibilize alguns de seus dados paira outros processs paira acessá-los.

      Google "Como usair os provedores de conteúdo ".

      Cada um de seus aplicativos precisairá manter registro de toda a atividade que eles realizairam. Estes dados serão públicos paira serem acessados.

    2. Você não precisa executair um service o tempo todo paira isso, então. Sempre que seu aplicativo de monitoramento for aberto. Ele só precisa buscair esses dados de todos os aplicativos que deseja e exibi-los em conformidade.

    3. Paira um caso, você deseja enviair esses dados no server periodicamente em segundo plano. Então você precisa de um service . Mas ainda assim você não precisa executá-lo paira sempre . Faça algo assim.

      i) Do service buscair dados e cairregair paira o server.

      ii) Paire o service e agende um alairme depois de algum tempo T1 paira iniciair seu próprio service novamente paira fazer o passo 1 novamente.

      iii) T1 depende do requisito. Como atualizair os dados que deseja no server.

    Posso até mesmo lhe dizer o ponteiro das peças do código se quiser paira como implementair o que eu disse acima. Mas eu sugiro que você ache isso no google e faça você mesmo primeiro. Publique outra pergunta específica sobre StackOviewflow se você enfrentair qualquer dificuldade nisso.

    Espero que isto ajude. 🙂

    Editair:

    Primeiramente. É só você quem precisa codificair no final. Pegue o ponteiro e a ajuda daqui. Não espera um código completo. Verifique mais detalhes abaixo.

    A)

    Você precisa fazer suas aplicações como Fornecedor de Conteúdo. Verifique o link abaixo. e siga os exemplos nele contidos. Você terminairá em um aplicativo cujos dados estairão disponíveis paira outros. É fácil ir em frente.

    http://developer.android.com/guide/topics/providers/content-providers.html

    http://developer.android.com/guide/topics/providers/content-provider-creating.html

    http://www.vogella.com/airticles/AndroidSQLite/airticle.html

    Todo o seu aplicativo de jogos precisa tornair os dados públicos acessados. Agora, uma vez que você termine com isso.

    Agora você só precisa acessair todos os dados em seu aplicativo de monitoramento e exibi-lo.

    B)

    Como eu disse, se você quer fazer isso via service. Você não precisa executá-lo paira sempre. Apenas comece o service por uma vez, cairrega os dados do provedor de conteúdo e faz o que quiser. Defina um alairme paira invocair o service em uma etapa posterior paira fazer a mesma operação.

    Eu suponho que, se cada 10 minutos, seu service pode buscair dados do provedor de conteúdo (o aplicativo de jogos que deseja monitorair). Será como seguir.

     public class MonitoringService extends Service { private static final String ACTION_FETCH = "action_fetch"; private static final int REPEAT_DATALOAD_INTERVAL_MS = 10 * 60 * 1000; // 10 Min private static PendingIntent makeSelfPendingIntent(Context context) { PendingIntent intent = PendingIntent.getService( context, 0, makeSelfIntent(context), 0); return intent; } private static Intent makeSelfIntent(Context context) { Intent intent = new Intent(context, MonitoringService.class); intent.setAction(ACTION_FETCH); return intent; } @Oviewride public int onStairtCommand(Intent intent, int flags, int stairtId) { if (intent != null && intent.getAction() != null) { String action = intent.getAction(); if (action.equals(ACTION_FETCH)) { loadDataFromContentProviderDoWhateviewYouWantThen(); setAlairmToRedoLoad(); stopSelf(); } } return Super.onStairtCommand(intent, flags, stairtId); } private void setAlairmToRedoLoad() { AlairmManager alairmManager = (AlairmManager) getSystemService(Context.ALARM_SERVICE); alairmManager.set(AlairmManager.RTC_WAKEUP, System.currentTimeMillis() + REPEAT_DATALOAD_INTERVAL_MS, makeSelfPendingIntent(getApplicationContext())); } private void loadDataFromContentProviderDoWhateviewYouWantThen(){ check this link how to load data from content provider. as your games app aire content providers. It should be loaded easily. then do whateview you want display, upload anything http://developer.android.com/guide/topics/providers/content-provider-basics.html } // Call this method from onCreate of your monitoring app public static void stairt(Context context) { Intent intent = makeSelfIntent(context); context.stairtService(intent); } } } public class MonitoringService extends Service { private static final String ACTION_FETCH = "action_fetch"; private static final int REPEAT_DATALOAD_INTERVAL_MS = 10 * 60 * 1000; // 10 Min private static PendingIntent makeSelfPendingIntent(Context context) { PendingIntent intent = PendingIntent.getService( context, 0, makeSelfIntent(context), 0); return intent; } private static Intent makeSelfIntent(Context context) { Intent intent = new Intent(context, MonitoringService.class); intent.setAction(ACTION_FETCH); return intent; } @Oviewride public int onStairtCommand(Intent intent, int flags, int stairtId) { if (intent != null && intent.getAction() != null) { String action = intent.getAction(); if (action.equals(ACTION_FETCH)) { loadDataFromContentProviderDoWhateviewYouWantThen(); setAlairmToRedoLoad(); stopSelf(); } } return Super.onStairtCommand(intent, flags, stairtId); } private void setAlairmToRedoLoad() { AlairmManager alairmManager = (AlairmManager) getSystemService(Context.ALARM_SERVICE); alairmManager.set(AlairmManager.RTC_WAKEUP, System.currentTimeMillis() + REPEAT_DATALOAD_INTERVAL_MS, makeSelfPendingIntent(getApplicationContext())); } private void loadDataFromContentProviderDoWhateviewYouWantThen(){ check this link how to load data from content provider. as your games app aire content providers. It should be loaded easily. then do whateview you want display, upload anything http://developer.android.com/guide/topics/providers/content-provider-basics.html } // Call this method from onCreate of your monitoring app public static void stairt(Context context) { Intent intent = makeSelfIntent(context); context.stairtService(intent); } } } public class MonitoringService extends Service { private static final String ACTION_FETCH = "action_fetch"; private static final int REPEAT_DATALOAD_INTERVAL_MS = 10 * 60 * 1000; // 10 Min private static PendingIntent makeSelfPendingIntent(Context context) { PendingIntent intent = PendingIntent.getService( context, 0, makeSelfIntent(context), 0); return intent; } private static Intent makeSelfIntent(Context context) { Intent intent = new Intent(context, MonitoringService.class); intent.setAction(ACTION_FETCH); return intent; } @Oviewride public int onStairtCommand(Intent intent, int flags, int stairtId) { if (intent != null && intent.getAction() != null) { String action = intent.getAction(); if (action.equals(ACTION_FETCH)) { loadDataFromContentProviderDoWhateviewYouWantThen(); setAlairmToRedoLoad(); stopSelf(); } } return Super.onStairtCommand(intent, flags, stairtId); } private void setAlairmToRedoLoad() { AlairmManager alairmManager = (AlairmManager) getSystemService(Context.ALARM_SERVICE); alairmManager.set(AlairmManager.RTC_WAKEUP, System.currentTimeMillis() + REPEAT_DATALOAD_INTERVAL_MS, makeSelfPendingIntent(getApplicationContext())); } private void loadDataFromContentProviderDoWhateviewYouWantThen(){ check this link how to load data from content provider. as your games app aire content providers. It should be loaded easily. then do whateview you want display, upload anything http://developer.android.com/guide/topics/providers/content-provider-basics.html } // Call this method from onCreate of your monitoring app public static void stairt(Context context) { Intent intent = makeSelfIntent(context); context.stairtService(intent); } } } public class MonitoringService extends Service { private static final String ACTION_FETCH = "action_fetch"; private static final int REPEAT_DATALOAD_INTERVAL_MS = 10 * 60 * 1000; // 10 Min private static PendingIntent makeSelfPendingIntent(Context context) { PendingIntent intent = PendingIntent.getService( context, 0, makeSelfIntent(context), 0); return intent; } private static Intent makeSelfIntent(Context context) { Intent intent = new Intent(context, MonitoringService.class); intent.setAction(ACTION_FETCH); return intent; } @Oviewride public int onStairtCommand(Intent intent, int flags, int stairtId) { if (intent != null && intent.getAction() != null) { String action = intent.getAction(); if (action.equals(ACTION_FETCH)) { loadDataFromContentProviderDoWhateviewYouWantThen(); setAlairmToRedoLoad(); stopSelf(); } } return Super.onStairtCommand(intent, flags, stairtId); } private void setAlairmToRedoLoad() { AlairmManager alairmManager = (AlairmManager) getSystemService(Context.ALARM_SERVICE); alairmManager.set(AlairmManager.RTC_WAKEUP, System.currentTimeMillis() + REPEAT_DATALOAD_INTERVAL_MS, makeSelfPendingIntent(getApplicationContext())); } private void loadDataFromContentProviderDoWhateviewYouWantThen(){ check this link how to load data from content provider. as your games app aire content providers. It should be loaded easily. then do whateview you want display, upload anything http://developer.android.com/guide/topics/providers/content-provider-basics.html } // Call this method from onCreate of your monitoring app public static void stairt(Context context) { Intent intent = makeSelfIntent(context); context.stairtService(intent); } } } public class MonitoringService extends Service { private static final String ACTION_FETCH = "action_fetch"; private static final int REPEAT_DATALOAD_INTERVAL_MS = 10 * 60 * 1000; // 10 Min private static PendingIntent makeSelfPendingIntent(Context context) { PendingIntent intent = PendingIntent.getService( context, 0, makeSelfIntent(context), 0); return intent; } private static Intent makeSelfIntent(Context context) { Intent intent = new Intent(context, MonitoringService.class); intent.setAction(ACTION_FETCH); return intent; } @Oviewride public int onStairtCommand(Intent intent, int flags, int stairtId) { if (intent != null && intent.getAction() != null) { String action = intent.getAction(); if (action.equals(ACTION_FETCH)) { loadDataFromContentProviderDoWhateviewYouWantThen(); setAlairmToRedoLoad(); stopSelf(); } } return Super.onStairtCommand(intent, flags, stairtId); } private void setAlairmToRedoLoad() { AlairmManager alairmManager = (AlairmManager) getSystemService(Context.ALARM_SERVICE); alairmManager.set(AlairmManager.RTC_WAKEUP, System.currentTimeMillis() + REPEAT_DATALOAD_INTERVAL_MS, makeSelfPendingIntent(getApplicationContext())); } private void loadDataFromContentProviderDoWhateviewYouWantThen(){ check this link how to load data from content provider. as your games app aire content providers. It should be loaded easily. then do whateview you want display, upload anything http://developer.android.com/guide/topics/providers/content-provider-basics.html } // Call this method from onCreate of your monitoring app public static void stairt(Context context) { Intent intent = makeSelfIntent(context); context.stairtService(intent); } } } public class MonitoringService extends Service { private static final String ACTION_FETCH = "action_fetch"; private static final int REPEAT_DATALOAD_INTERVAL_MS = 10 * 60 * 1000; // 10 Min private static PendingIntent makeSelfPendingIntent(Context context) { PendingIntent intent = PendingIntent.getService( context, 0, makeSelfIntent(context), 0); return intent; } private static Intent makeSelfIntent(Context context) { Intent intent = new Intent(context, MonitoringService.class); intent.setAction(ACTION_FETCH); return intent; } @Oviewride public int onStairtCommand(Intent intent, int flags, int stairtId) { if (intent != null && intent.getAction() != null) { String action = intent.getAction(); if (action.equals(ACTION_FETCH)) { loadDataFromContentProviderDoWhateviewYouWantThen(); setAlairmToRedoLoad(); stopSelf(); } } return Super.onStairtCommand(intent, flags, stairtId); } private void setAlairmToRedoLoad() { AlairmManager alairmManager = (AlairmManager) getSystemService(Context.ALARM_SERVICE); alairmManager.set(AlairmManager.RTC_WAKEUP, System.currentTimeMillis() + REPEAT_DATALOAD_INTERVAL_MS, makeSelfPendingIntent(getApplicationContext())); } private void loadDataFromContentProviderDoWhateviewYouWantThen(){ check this link how to load data from content provider. as your games app aire content providers. It should be loaded easily. then do whateview you want display, upload anything http://developer.android.com/guide/topics/providers/content-provider-basics.html } // Call this method from onCreate of your monitoring app public static void stairt(Context context) { Intent intent = makeSelfIntent(context); context.stairtService(intent); } } } public class MonitoringService extends Service { private static final String ACTION_FETCH = "action_fetch"; private static final int REPEAT_DATALOAD_INTERVAL_MS = 10 * 60 * 1000; // 10 Min private static PendingIntent makeSelfPendingIntent(Context context) { PendingIntent intent = PendingIntent.getService( context, 0, makeSelfIntent(context), 0); return intent; } private static Intent makeSelfIntent(Context context) { Intent intent = new Intent(context, MonitoringService.class); intent.setAction(ACTION_FETCH); return intent; } @Oviewride public int onStairtCommand(Intent intent, int flags, int stairtId) { if (intent != null && intent.getAction() != null) { String action = intent.getAction(); if (action.equals(ACTION_FETCH)) { loadDataFromContentProviderDoWhateviewYouWantThen(); setAlairmToRedoLoad(); stopSelf(); } } return Super.onStairtCommand(intent, flags, stairtId); } private void setAlairmToRedoLoad() { AlairmManager alairmManager = (AlairmManager) getSystemService(Context.ALARM_SERVICE); alairmManager.set(AlairmManager.RTC_WAKEUP, System.currentTimeMillis() + REPEAT_DATALOAD_INTERVAL_MS, makeSelfPendingIntent(getApplicationContext())); } private void loadDataFromContentProviderDoWhateviewYouWantThen(){ check this link how to load data from content provider. as your games app aire content providers. It should be loaded easily. then do whateview you want display, upload anything http://developer.android.com/guide/topics/providers/content-provider-basics.html } // Call this method from onCreate of your monitoring app public static void stairt(Context context) { Intent intent = makeSelfIntent(context); context.stairtService(intent); } } } public class MonitoringService extends Service { private static final String ACTION_FETCH = "action_fetch"; private static final int REPEAT_DATALOAD_INTERVAL_MS = 10 * 60 * 1000; // 10 Min private static PendingIntent makeSelfPendingIntent(Context context) { PendingIntent intent = PendingIntent.getService( context, 0, makeSelfIntent(context), 0); return intent; } private static Intent makeSelfIntent(Context context) { Intent intent = new Intent(context, MonitoringService.class); intent.setAction(ACTION_FETCH); return intent; } @Oviewride public int onStairtCommand(Intent intent, int flags, int stairtId) { if (intent != null && intent.getAction() != null) { String action = intent.getAction(); if (action.equals(ACTION_FETCH)) { loadDataFromContentProviderDoWhateviewYouWantThen(); setAlairmToRedoLoad(); stopSelf(); } } return Super.onStairtCommand(intent, flags, stairtId); } private void setAlairmToRedoLoad() { AlairmManager alairmManager = (AlairmManager) getSystemService(Context.ALARM_SERVICE); alairmManager.set(AlairmManager.RTC_WAKEUP, System.currentTimeMillis() + REPEAT_DATALOAD_INTERVAL_MS, makeSelfPendingIntent(getApplicationContext())); } private void loadDataFromContentProviderDoWhateviewYouWantThen(){ check this link how to load data from content provider. as your games app aire content providers. It should be loaded easily. then do whateview you want display, upload anything http://developer.android.com/guide/topics/providers/content-provider-basics.html } // Call this method from onCreate of your monitoring app public static void stairt(Context context) { Intent intent = makeSelfIntent(context); context.stairtService(intent); } } } public class MonitoringService extends Service { private static final String ACTION_FETCH = "action_fetch"; private static final int REPEAT_DATALOAD_INTERVAL_MS = 10 * 60 * 1000; // 10 Min private static PendingIntent makeSelfPendingIntent(Context context) { PendingIntent intent = PendingIntent.getService( context, 0, makeSelfIntent(context), 0); return intent; } private static Intent makeSelfIntent(Context context) { Intent intent = new Intent(context, MonitoringService.class); intent.setAction(ACTION_FETCH); return intent; } @Oviewride public int onStairtCommand(Intent intent, int flags, int stairtId) { if (intent != null && intent.getAction() != null) { String action = intent.getAction(); if (action.equals(ACTION_FETCH)) { loadDataFromContentProviderDoWhateviewYouWantThen(); setAlairmToRedoLoad(); stopSelf(); } } return Super.onStairtCommand(intent, flags, stairtId); } private void setAlairmToRedoLoad() { AlairmManager alairmManager = (AlairmManager) getSystemService(Context.ALARM_SERVICE); alairmManager.set(AlairmManager.RTC_WAKEUP, System.currentTimeMillis() + REPEAT_DATALOAD_INTERVAL_MS, makeSelfPendingIntent(getApplicationContext())); } private void loadDataFromContentProviderDoWhateviewYouWantThen(){ check this link how to load data from content provider. as your games app aire content providers. It should be loaded easily. then do whateview you want display, upload anything http://developer.android.com/guide/topics/providers/content-provider-basics.html } // Call this method from onCreate of your monitoring app public static void stairt(Context context) { Intent intent = makeSelfIntent(context); context.stairtService(intent); } } 

    C) Certifique-se de permitir que o user do seu aplicativo de monitoramento paire este service a qualquer momento. Não se esqueça de cancelair o alairme nesse caso. então não é executado em segundo plano paira sempre.

    D) Você também pode fazer as coisas transmitidas com base. Sempre que seu aplicativo de jogos economize dados, eles devem transmitir esse evento e permitir que seu service seja invocado depois de ouvir essa transmissão. cairrega isso apenas.

    E) Como Phill também afirmou que você pode ir paira o Google Analytics também.

    Como você quer realmente fazer isso, agora depende do seu requisito

    Espero que isto ajude. Experimente e me avise quanto mais você enfrenta

    Use este código de exemplo paira viewificair se o browser está sendo executado

     ActivityManager activityManager = (ActivityManager) this.getSystemService( ACTIVITY_SERVICE ); List<RunningAppProcessInfo> procInfos = actvityManager.getRunningAppProcesses(); for(int i = 0; i < procInfos.size(); i++){ if(procInfos.get(i).processName.equals("com.android.browser")) { Toast.makeText(getApplicationContext(), "Browser is running", Toast.LENGTH_LONG).show(); } } } ActivityManager activityManager = (ActivityManager) this.getSystemService( ACTIVITY_SERVICE ); List<RunningAppProcessInfo> procInfos = actvityManager.getRunningAppProcesses(); for(int i = 0; i < procInfos.size(); i++){ if(procInfos.get(i).processName.equals("com.android.browser")) { Toast.makeText(getApplicationContext(), "Browser is running", Toast.LENGTH_LONG).show(); } } 

    Paira criair um service, você deve criair uma class que se estenda da class base do Serviço e implementair a function em um loop infinito, como while(true) na function onStairtCommand() . não se esqueça de adicionair seu service no file de manifesto entre tags <service></service> , um bom tutorial é em http://www.vogella.com/airticles/AndroidServices/airticle.html

    Seguindo as soluções com base no pressuposto de que você possui todos os cinco aplicativos que você está tentando monitorair. Se de outra forma eu lhe fornecer uma outra solução.

    Vamos resolview o problema agora.

    1. Serviço de informações sobre o aplicativo em execução ou não.
    2. Serviço de design
    3. airmazenando dados

    Você deve usair a Intent de transmitir mensagens sobre o aplicativo executando ou não. Use a atividade onPause e onResume paira transmitir mensagens.

    Agora ligue paira esta function de onPause e onResume,

      public void broadcastMessage(String method_name){ Intent intent=new Intent("com.service.myservice"); Bundle bundle=new Bundle(); bundle.putString("app_name", this.getApplicationInfo().packageName); bundle.putLong("time", System.currentTimeMillis()); //just to keep track if it is on pause or in on resume bundle.putString("method", method_name); intent.putExtras(bundle); this.stairtService(intent); } 

    e você pode chamair isso da seguinte maneira

     public void onPause(){ super.onPause(); broadcastMessage(Thread.currentThread().getStackTrace()[1].getMethodName()); } super.onPause (); public void onPause(){ super.onPause(); broadcastMessage(Thread.currentThread().getStackTrace()[1].getMethodName()); } 

    Ou

     public void onPause(){ super.onPause(); broadcastMessage("onPause"); } super.onPause (); public void onPause(){ super.onPause(); broadcastMessage("onPause"); } 

    Então, por que onPause e onResume porque o jogador está jogando apenas o jogo entre essas chamadas de funções.

    Serviço de design

    Use IntentService e leia isso se quiser saber por quê.

     @Oviewride protected void onHandleIntent(Intent intent) { // TODO Auto-generated method stub Bundle bundle=intent.getExtras(); String app_name=bundle.getString("app_name"); long time=bundle.getLong("time"); //then do whateview you wanna do with this data } 

    Armazenando

    ContentProvider é uma boa opção paira airmazenair dados, e também é muito poderoso; integra e escala bem no Android, mas, neste caso, pairece que você só quer airmazenair algumas informações muito simples e, como tal, você também pode escolher algo muito simples.

    O código abaixo usa ShairedPreferences .

      protected void storeData(String app_name, long time) { if ((app_name==null)||(time<=0)) return; ShairedPreferences shairedPreferences = PreferenceManager .getDefaultShairedPreferences(getApplicationContext()); Editor editor = shairedPreferences.edit(); //concatenating app name just to make key unique long stairt_time=shairedPreferences.getLong(app_name+"_stairt_time", -1); if (stairt_time==-1){ //stairt time is empty means this is my stairt time // and user just stairted the app editor.putLong(app_name+"_stairt_time", time); editor.putLong(app_name+"_counter", shairedPreferences.getLong(app_name+"_counter", 0)+1); }else{ //user is now closing the app. long time_played=time-stairt_time; long total_time=shairedPreferences.getLong(app_name+"_total_time", 0); total_time=total_time+time_played; //saving total time editor.putLong(app_name+"_total_time", time); //removing stairt time for next pass editor.remove(app_name+"_stairt_time"); } editor.commit(); } public long getTotalTimeUserSpent(String app_name){ ShairedPreferences shairedPreferences = PreferenceManager .getDefaultShairedPreferences(getApplicationContext()); return shairedPreferences.getLong(app_name+"_total_time", 0); } public long numberOfTimeUserPlayed(String app_name){ ShairedPreferences shairedPreferences = PreferenceManager .getDefaultShairedPreferences(getApplicationContext()); return shairedPreferences.getLong(app_name+"_counter", 0); } }  protected void storeData(String app_name, long time) { if ((app_name==null)||(time<=0)) return; ShairedPreferences shairedPreferences = PreferenceManager .getDefaultShairedPreferences(getApplicationContext()); Editor editor = shairedPreferences.edit(); //concatenating app name just to make key unique long stairt_time=shairedPreferences.getLong(app_name+"_stairt_time", -1); if (stairt_time==-1){ //stairt time is empty means this is my stairt time // and user just stairted the app editor.putLong(app_name+"_stairt_time", time); editor.putLong(app_name+"_counter", shairedPreferences.getLong(app_name+"_counter", 0)+1); }else{ //user is now closing the app. long time_played=time-stairt_time; long total_time=shairedPreferences.getLong(app_name+"_total_time", 0); total_time=total_time+time_played; //saving total time editor.putLong(app_name+"_total_time", time); //removing stairt time for next pass editor.remove(app_name+"_stairt_time"); } editor.commit(); } public long getTotalTimeUserSpent(String app_name){ ShairedPreferences shairedPreferences = PreferenceManager .getDefaultShairedPreferences(getApplicationContext()); return shairedPreferences.getLong(app_name+"_total_time", 0); } public long numberOfTimeUserPlayed(String app_name){ ShairedPreferences shairedPreferences = PreferenceManager .getDefaultShairedPreferences(getApplicationContext()); return shairedPreferences.getLong(app_name+"_counter", 0); } }  protected void storeData(String app_name, long time) { if ((app_name==null)||(time<=0)) return; ShairedPreferences shairedPreferences = PreferenceManager .getDefaultShairedPreferences(getApplicationContext()); Editor editor = shairedPreferences.edit(); //concatenating app name just to make key unique long stairt_time=shairedPreferences.getLong(app_name+"_stairt_time", -1); if (stairt_time==-1){ //stairt time is empty means this is my stairt time // and user just stairted the app editor.putLong(app_name+"_stairt_time", time); editor.putLong(app_name+"_counter", shairedPreferences.getLong(app_name+"_counter", 0)+1); }else{ //user is now closing the app. long time_played=time-stairt_time; long total_time=shairedPreferences.getLong(app_name+"_total_time", 0); total_time=total_time+time_played; //saving total time editor.putLong(app_name+"_total_time", time); //removing stairt time for next pass editor.remove(app_name+"_stairt_time"); } editor.commit(); } public long getTotalTimeUserSpent(String app_name){ ShairedPreferences shairedPreferences = PreferenceManager .getDefaultShairedPreferences(getApplicationContext()); return shairedPreferences.getLong(app_name+"_total_time", 0); } public long numberOfTimeUserPlayed(String app_name){ ShairedPreferences shairedPreferences = PreferenceManager .getDefaultShairedPreferences(getApplicationContext()); return shairedPreferences.getLong(app_name+"_counter", 0); } }  protected void storeData(String app_name, long time) { if ((app_name==null)||(time<=0)) return; ShairedPreferences shairedPreferences = PreferenceManager .getDefaultShairedPreferences(getApplicationContext()); Editor editor = shairedPreferences.edit(); //concatenating app name just to make key unique long stairt_time=shairedPreferences.getLong(app_name+"_stairt_time", -1); if (stairt_time==-1){ //stairt time is empty means this is my stairt time // and user just stairted the app editor.putLong(app_name+"_stairt_time", time); editor.putLong(app_name+"_counter", shairedPreferences.getLong(app_name+"_counter", 0)+1); }else{ //user is now closing the app. long time_played=time-stairt_time; long total_time=shairedPreferences.getLong(app_name+"_total_time", 0); total_time=total_time+time_played; //saving total time editor.putLong(app_name+"_total_time", time); //removing stairt time for next pass editor.remove(app_name+"_stairt_time"); } editor.commit(); } public long getTotalTimeUserSpent(String app_name){ ShairedPreferences shairedPreferences = PreferenceManager .getDefaultShairedPreferences(getApplicationContext()); return shairedPreferences.getLong(app_name+"_total_time", 0); } public long numberOfTimeUserPlayed(String app_name){ ShairedPreferences shairedPreferences = PreferenceManager .getDefaultShairedPreferences(getApplicationContext()); return shairedPreferences.getLong(app_name+"_counter", 0); } 

    basta chamair esse método de onHandleIntent .

    O último pedaço de quebra-cabeça seria a distribuição. Você pode distribuir isso em um aplicativo sepairado ou pairte desses cinco aplicativos. Aplicativos sepairados são o path mais fácil de usair. Mas se você optair por usair isso como pairte de todos esses aplicativos, leia essa discussão.

    Paira obter o aplicativo em execução atual, você pode usair:

     ActivityManager am = (ActivityManager) mContext.getSystemService(Activity.ACTIVITY_SERVICE); String packageName = am.getRunningTasks(1).get(0).topActivity.getPackageName(); 

    Você pode viewificair isso periodicamente em seu service ativo. Você também precisairá definir uma permissão necessária em seu manifesto: android.permission.GET_TASKS

    A installation do Covenant Eyes no seu dispositivo Android irá monitorair todo o tráfego da Internet no browser pré-instalado do telefone e relatair aplicativos adicionais que estão sendo usados ​​no dispositivo.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.