[英]How to check if an Android application is running in the background or in foreground?
[英]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.