簡體   English   中英

從Android的廣播接收器中查找跑步活動

[英]Find Running activities from a Broadcast Receiver in Android

我想從廣播接收器中查找當前正在運行的其他活動。 這是我從活動中使用的代碼,用於查找其他正在運行的活動,但是當我嘗試在廣播接收器中使用此代碼時,在以下幾行中會出錯:

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

顯示日食中的錯誤ACTIVITY_SERVICE無法解析為變量

 PackageManager pm = this.getPackageManager();

這顯示了eclipse中的錯誤。對於類型ScreenReceiver(我的廣播接收器),未定義方法getPackageManager()

這是完整的代碼:

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
          }
        }

    }

由於BroadcastReceiver不會從Context下降,因此您無法像在Activity中那樣使用this 您應該使用傳遞給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
          }
        }

    }

嘗試為:

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
          }
        }

    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM