我希望每次我的广播接收器启动时,我的活动都会被调用

时间:2013-09-15 17:13:57

标签: android android-intent android-activity broadcastreceiver android-lifecycle

我有一个广播接收器,它在onReceive上使用以下标志开始活动:Intent.FLAG_ACTIVITY_NEW_TASK

现在,我的活动的onCreate方法被调用。当我单击HOME按钮时,我的活动将移回后台,但现在再次调用onReceive函数时,将调用onRestart方法而不是onCreate

我希望每个onCreate都会调用onReceive(我的广播接收器收到的每个事件都需要相同的行为)。

另一件事,我的活动(由广播接收者发起的活动在AndroidManifest.xml文件中有这个标记:android:launchMode="singleInstance"

我这样做是为了防止点击我的应用图标会启动我的活动(不是主要活动)。

任何想法都非常受欢迎。

1 个答案:

答案 0 :(得分:0)

尝试这样的事情。您可以在onResume()中启动计时器。每次调用Activity再次启动时,如果它已经运行,您可以从处理程序队列中删除Runnable并再次启动它。您不需要在清单中指定Activity的launchMode。

   public class MainActivity extends Activity{

    private Handler mHandler;
    private boolean isBroadcastHandled = false;
    private int mCounter = 10;

    private final Runnable runnableThatRunsEvery1Sec = new Runnable() {
        public void run() {
            // Update Your TimerTextView
            if(mCounter == 0){
                // Send SMS accordingly.
            }
            mHandler.postDelayed(this, 1000);
            mCounter-- ;
        }
    };

    // Set Up Click listener for Buttons too

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onResume() {
        super.onResume();
        if(!isBroadcastHandled){
            // Set Your Time Text View to 10 here.
            mHandler.post(runnableThatRunsEvery1Sec);
            isBroadcastHandled = true;
        }
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        isBroadcastHandled = false;
        mHandler.removeCallbacks(runnableThatRunsEvery1Sec);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mHandler.removeCallbacks(runnableThatRunsEvery1Sec);
    }
}