簡體   English   中英

檢查應用程序是否正在運行(后台或前台)Android

[英]Check if application is running (either background or foreground) Android

我已經為SMS創建了BroadCastReceiver,我希望它僅在應用程序運行時(在Forgeground或后台)運行。 我正在使用的當前代碼是:

public class BroadCastReceiver extends BroadcastReceiver 
{

    public void onReceive(Context context, Intent intent)
    {

        ActivityManager am = (ActivityManager) context
                .getSystemService(Activity.ACTIVITY_SERVICE);
        String packageName = am.getRunningTasks(1).get(0).topActivity
                .getPackageName();

    if(packageName.contains("com.example.sms") )
     {
        abortBroadcast();

     }else
     {

      }

     }
    }

但是問題在於此代碼僅在前台運行,因此當用戶單擊后退按鈕或主頁按鈕時,該應用程序將在后台運行,但BroadCastReceiver將無法運行。 那么有什么方法可以解決這個問題? &提前致謝

如果您只想在應用程序運行時運行廣播,則只需在應用程序運行時注冊廣播。

public class BroadCastReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
        /** SMS received while app was running. Do whatever */
    }
}

public class MainActivity extends Activity {

  private BroadCastReceiver mBroadcastReceiver = new BroadCastReceiver();

  @Override
  public void onStart() {
    super.onStart();
    registerReceiver(myBroadcastReciever, new IntentFilter(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
  }

  @Override
  public void onStop() {
    super.onStop();
    unregisterReceiver(myBroadcastReceiver);
  }
}

廣播接收器僅在您的應用程序運行時才接收廣播。 無需檢查正在運行的進程。 如果只希望在用戶可見該應用程序時接收廣播,則可以將它們移至onResume()/ onPause()。 如果您想盡快開始接收廣播,則可以在onCreate()/ onDestroy()中進行(取消)注冊。 您可以在服務及其相應的回調中執行相同的操作。

您可以運行ps並檢查輸出的軟件包名稱

try {
    Process process = Runtime.getRuntime().exec("ps | grep \""+myPackageName+"\"");

    BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    int bytes;
    char[] buffer = new char[4096];
    StringBuffer output = new StringBuffer();
    while ((bytes = reader.read(buffer)) > 0) {
        output.append(buffer, 0, bytes);
    }
    reader.close();
    process.waitFor();

    return output.toString().length()>1;
} catch (Exception e) {
}

暫無
暫無

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

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