2012-07-17 70 views
0

我想从我的广播接收器中查找当前正在运行的其他活动。这是我从活动中使用它来查找其他运行activites但是当我尝试在我的广播接收器使用此代码我得到以下行错误代码:在Android中查找广播接收器的运行活动

ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE); 

显示在eclipse ACTIVITY_SERVICE误差不能解析为一个可变

PackageManager pm = this.getPackageManager(); 

,这表明在蚀该错误的方法getPackageManager()是未定义的类型ScreenReceiver(我的广播接收机)

这里是全码:

public void getRunning(){ 
     ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE); 
     List l = am.getRunningAppProcesses(); 
     Iterator i = l.iterator(); 
     PackageManager pm = this.getPackageManager(); 
     while(i.hasNext()) { 
      ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next()); 
      try { 
      CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA)); 
      Log.w("LABEL", c.toString()); 
      runningApplications.add(c.toString()); 
      }catch(Exception e) { 
      //Name Not Found Exception 
      } 
     } 

    } 

回答

4

由于广播接收器没有从上下文血统,你不能使用这个,你可以在活动做。您应该使用传递给onReceive()方法的Context实例。

public void getRunning(Context context){ 
     ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE); 
     List l = am.getRunningAppProcesses(); 
     Iterator i = l.iterator(); 
     PackageManager pm = context.getPackageManager(); 
     while(i.hasNext()) { 
      ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next()); 
      try { 
      CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA)); 
      Log.w("LABEL", c.toString()); 
      runningApplications.add(c.toString()); 
      }catch(Exception e) { 
      //Name Not Found Exception 
      } 
     } 

    } 
+0

要更加清楚这个问题:'this'指您正在操作的类实例。在这种情况下,是“BroadcastReceiver”的后代。所以'这个'与预期完全不同。 – yoshi 2012-07-17 20:00:35

+0

runningApplications.add(c.toString()); <---什么类型的runningApplications? – bofredo 2013-08-29 13:38:06

1

尝试为:

public class ScreenReceiver extends BroadcastReceiver { 
private Context ctext; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     ctext=context; 
     //OR you can also pass context as param to getRunning() 
     //your code here.... 
    } 
public void getRunning(){ 
     ActivityManager am = (ActivityManager)ctext.getSystemService(Context.ACTIVITY_SERVICE); 
     List l = am.getRunningAppProcesses(); 
     Iterator i = l.iterator(); 
     PackageManager pm = ctext.getPackageManager(); 
     while(i.hasNext()) { 
      ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next()); 
      try { 
      CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA)); 
      Log.w("LABEL", c.toString()); 
      runningApplications.add(c.toString()); 
      }catch(Exception e) { 
      //Name Not Found Exception 
      } 
     } 

    } 

} 
+0

谢谢你,解决的问题之一,但我仍然得到就行'ActivityManager AM =(ActivityManager)ctext.getSystemService(ACTIVITY_SERVICE)错误;'明确的话'ACTIVITY_SERVICE'我得到'ACTIVITY_SERVICE不能被解析为变量# – Peter 2012-07-17 19:56:06

+2

使用Context.ACTIVITY_SERVICE – uaraven 2012-07-17 19:57:27

+0

@Peter:使用'Context.ACTIVITY_SERVICE'而不是''ACTIVITY_SERVICE' – 2012-07-17 19:59:43