有很多方法可以做到這一點,所以我只想概述兩種方法,我會做到這一點。
選項1.使用一個監聽
創建在廣播接收機的接口
public interface Listener {
public abstract void onEvent();
}
創建靜態參考和setter
private static MessageListener mListener = null;
@Override
public void onReceive(Context context, Intent intent) {
//stuff
if(mListener != null)
mListener.onEvent();
}
public static void setListener(Listener l) {
mListener = l;
}
然後執行在活動收聽
class MyActivity implements Listener{
@Override
public void onResume(){
//register the listener, should probably unregister in onDestroy
BroadCastReceiver.setListener(this);
}
@Override
public void onEvent(){
//do something
}
}
選項2.使用意圖
在廣播接收機
Intent intent = new Intent();
Bundle bundleToSend = new Bundle();
//BUNDLE_EXTRA,DO_SOME_ACTION and ACTION_KEY are just constants so just define them somewhere
bundleToSend.putInt(ACTION_KEY, DO_SOME_ACTION);
intent.putExtra(BUNDLE_EXTRA, bundleToSend);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
標誌FLAG_ACTIVITY_SINGLE_TOP
將啓動活動如果沒有啓動,或者如果它正在運行,則在onNewIntent()
被抓住,所以你需要在onCreate()
和onNewIntent()
中都放入一些代碼來提取包並檢查操作。
final Bundle bundleReceived = intent.getBundleExtra(BUNDLE_EXTRA);
if (bundleReceived.getInt(ACTION_KEY) == DO_SOME_ACTION) {
//do something
}
選項1是真的只爲當廣播接收器只會當活動是走在了前列被接收有用。選項2功能更多,即使在應用程序未運行時也可以使用(例如,廣播接收器在啓動時啓動的服務中運行),以便無論活動的狀態如何,都會啓動活動並執行操作。
選項1完美。廣播接收器在收到通知時運行。如SMS。但是,我明白了,工作正常 – user1190019 2012-02-05 01:02:09