0

放送受信機内から、現在実行されている他のアクティビティを確認したいと思います。これは、他の実行中のアクティビティを見つけるためにアクティビティから使用するコードですが、ブロードキャストレシーバーでこのコードを使用しようとすると、次の行でエラーが発生します。

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

Eclipseのエラーを示していますACTIVITY_SERVICEは変数に解決できません

 PackageManager pm = this.getPackageManager();

これはEclipseのエラーを示しています。メソッド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

2 に答える 2

4

BroadcastReceiverはコンテキストから派生しないため、Activityで使用できるように、これを使用することはできません。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
          }
        }

    }
于 2012-07-17T19:56:53.907 に答える
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
          }
        }

    }

}
于 2012-07-17T19:52:58.813 に答える