2014-11-08 51 views
0

我试图在用户单击应用程序时向用户显示消息,并显示包含应用程序名称的用户的服务。我没有找到解决方案的任何代码。如果您提出解决方案,我会很高兴。谢谢。创建后台服务,当用户启动任何已安装的应用程序时显示消息

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

@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(); 
+0

你是什么意思*当用户点击应用程序时,消息显示给包含应用程序名称的用户*?你能详细说明一下吗?当用户启动任何应用程序时,您的标题与您的拒绝 – 2014-11-08 13:52:53

+0

不匹配,则应显示包含应用程序名称的消息。对不起,标题不匹配。 – Rohit 2014-11-08 14:38:52

+0

你可以得到[APP NAME](http://www.androidsnippets.com/get-installed-applications-with-name-package-name-version-and-icon),但不知道如何处理点击。 – 2014-11-08 14:47:50

回答

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用户发现任何其他的解决方案

+0

我已将我的工作添加到问题中。 – Rohit 2014-11-08 16:57:47

+0

你试图实现什么,请具体。我们都在努力解决您的问题。 你想知道哪个应用程序用户当前正在工作吗?或者 所有在后台运行的应用程序? – Chitrang 2014-11-08 17:11:20

+0

我只是想在用户启动应用程序时显示一条消息。消息可以包含软件包名称或应用程序名称。为此,我已经创建了后台服务,并且服务启动时的代码已经由我添加。我添加的代码仅显示一个应用程序的消息,即创建服务的应用程序。 – Rohit 2014-11-08 17:19:39

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(); 

} 
相关问题