创建后台服务,在用户启动任何已安装的应用程序时显示消

时间:2014-11-08 13:32:17

标签: android

我尝试在用户点击应用程序时创建服务,向用户显示包含应用程序名称的消息。我没有找到解决方案的任何代码。如果你建议一个解决方案,我会很高兴的。谢谢。

我找到了一些代码,但它没有正常工作。它仅显示一个应用程序的消息,即运行服务的应用程序。我想为所有已安装的应用程序显示消息。

@Override
        public void onStart(Intent intent, int startId) {


                            ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
                            List<ActivityManager.RunningTaskInfo> RunningTask = mActivityManager.getRunningTasks(1);
                            ActivityManager.RunningTaskInfo ar = RunningTask.get(0);
                            String activityOnTop = ar.topActivity.getClassName();
                            Toast.makeText(this, activityOnTop, Toast.LENGTH_LONG).show();

2 个答案:

答案 0 :(得分:0)

我不知道,这个服务部分将如何运作?

但是这里有一段代码可以帮助您了解哪个应用程序位于前台。

    ActivityManager manager = (ActivityManager) context
            .getSystemService(ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> runningTaskInfo = manager
            .getRunningTasks(1);

    ComponentName componentInfo = runningTaskInfo.get(0).topActivity;
    final PackageManager pm = context.getApplicationContext()
            .getPackageManager();
    ApplicationInfo ai;
    try {
        ai = pm.getApplicationInfo(componentInfo.getPackageName(), 0);
    } catch (final NameNotFoundException e) {
        ai = null;
    }
    final String applicationName = (String) (ai != null ? pm
            .getApplicationLabel(ai) : "(unknown)");
    System.out.println("applicationName = " + applicationName);

不幸的是: getRunningTasks方法在API级别21中已弃用 :(

参考:http://developer.android.com/reference/android/app/ActivityManager.html#getRunningTasks(int)

所以要小心使用它,并等到SO用户找到任何其他解决方案。

答案 1 :(得分:0)

而不是While循环我使用了计时器,这对我有用

 @Override
 public int onStartCommand(Intent intent, int startId,int ff) {

     int delay = 100;  
     int period = 1000;  
     Timer timer = new Timer(); 
     timer.scheduleAtFixedRate(new TimerTask() 
         { 
             public void run() 
             { 
                  demoz();  

             } 
         }, delay, period); 

     return START_STICKY;

     }

 void demoz(){

    ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    final List<ActivityManager.RunningTaskInfo> RunningTask = mActivityManager.getRunningTasks(1);

                ActivityManager.RunningTaskInfo ar = RunningTask.get(0);
                String activityOnTop = ar.topActivity.getClassName();
                Toast.makeText(CreatedWith.this, activityOnTop, Toast.LENGTH_LONG).show();

 }