我正在Android Studio中編寫我的代碼,但我正在編寫的項目沒有GUI,並且從不更新用戶的視圖。它只是用廣播接收器監聽上次安裝的應用程序,並將信息發送到另一個java文件。將數據從BroadcastReceiver發送到活動,而應用程序在後臺
我在想如何從廣播接收器發送一個字符串到一個活動(也許這不應該是一個「活動」,而是一個「服務」?),並在應用程序在後臺時有這項工作。
現在我有一個廣播接收機正在監聽手機上的最後一個安裝的應用程序(這在後臺運行)。當廣播接收機獲得已安裝的應用程序時,我有一個自定義廣播接收機用於通知我的主要活動。但是這個自定義接收器不能在後臺工作。同樣,也許我不應該使用Activity來從BroadcastReceiver接收信息?
有沒有一種方法可以將我的廣播接收器的信息發送到我的主要活動,而應用程序在後臺?我還需要我的主要活動來在後臺恢復正常功能(在後臺進行GUI更新時)。
我廣播接收器它通過一個新的意圖
public class NewInstallReceiver extends BroadcastReceiver {
ApplicationInfo ai;
@Override
public void onReceive(Context context, Intent intent) {
final PackageManager pm = context.getPackageManager();
try {
// if app is added, get package info
ai = pm.getApplicationInfo(intent.getData().getSchemeSpecificPart(), 0);
Intent i = new Intent("broadcastName");
// Data pass to activity
i.putExtra("appInfo", ai);
context.sendBroadcast(i);
} catch (final PackageManager.NameNotFoundException e) {
ai = null;
}
}
}
中的onCreate將數據發送到我的主要活動在我MainActivity我註冊了接收器:
registerReceiver(broadcastReceiver, new IntentFilter("broadcastName"));
我接收數據from BroadcastReceiver
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// get applicationInfo
Bundle b = intent.getExtras();
Object applicationInfo = b.get("appInfo");
ApplicationInfo appInfo = (ApplicationInfo) applicationInfo;
getNewData(appInfo);
}
};
然後,我必須註銷在MainActivity的接收器,但顯然,這並不讓我從廣播接收器接收信息一旦應用進入後臺
@Override
public void onStop()
{
try{
unregisterReceiver(broadcastReceiver);
}
catch(Exception e){
System.out.println("Exception is " + e.toString());
}
super.onStop();
}
謝謝你的回答。我完全同意你的看法。但是爲了增加我的問題,我想我的「應用程序」永遠不需要用戶查看的GUI。從這個意義上說,它不是一個真正的應用程序,而只是一個正在運行的程序,我正好在Android Studio中編寫程序。如果是這種情況,那麼我的「MainActivity」應該轉換爲服務?這是最好的解決方案,還是有另一種方式,如果我只是需要我的應用程序在任何時候都在運行偵聽已安裝的應用程序,並且沒有任何更新在任何視圖中。 – Natalie
Hummm ..因爲你沒有GUI,你不需要一個活動......也許,你只需要廣播接收器。接收器收到該動作並完成您需要的所有任務....如果您可以在接收器中執行所有任務,那麼您不需要該服務...... – W0rmH0le
我會隨時隨地處理這個問題。謝謝 – Natalie