sendStickyBroadcast()并没有真正坚持下去

时间:2014-05-03 18:45:30

标签: android android-intent gps broadcastreceiver

我目前正在开发一个测试应用程序,该应用程序将显示一个对话框,要求用户在他/她开车时停止使用该应用程序。假设用户打开了GPS,我创建了一个自定义意图进行广播,然后在子类BroadcastReceiver类的onReceive()方法上,计算车辆的速度,如果发现它在通常的车速范围,向用户显示一个对话框。

第二部分(onReceive()代码)效果很好:计算速度并显示对话框。但是,我对如何在特定活动的生命周期的任何一点显示对话框感到茫然。如果在用户驾驶时启动应用程序,或者用户导航到另一个活动,然后返回执行速度检查的活动(实质上,如果调用onCreate()或onResume()),则会显示对话框。如果对话框被取消并且用户保持相同的活动,则即使用户继续驾驶,也不会重新显示对话框(要清楚,只要用户继续驾驶,所需的行为就是让对话框继续显示并且在活动中)。以下是发送广播的活动代码(相关代码,其他所有内容都省略):

public class MainActivity extends Activity {

    IntentFilter intentFilter;
    SpeedReceiver speedceiver = new SpeedReceiver();


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



        broadcastSender();

        intentFilter = new IntentFilter();
        intentFilter.addAction("com.example.animationshitz.ACTION_GET_SPEED");

            }
    public void onResume() {

        super.onResume();


        registerReceiver(speedceiver, intentFilter);
        Log.d("Loggger", "BROADCAST RECEIVER REGISTERED");

    }

    public void onPause() {
        super.onPause();
        unregisterReceiver(speedceiver);
    }

    public void broadcastSender() {
        Intent intent = new Intent();
        intent.setAction("com.example.animationshitz.ACTION_GET_SPEED");

        sendStickyBroadcast(intent);

        Log.d("Loggger", "BROADCAST SENT");
    }
}

我对此完全错了吗?我认为粘性广播将继续调用接收器的onReceive()方法,以便它继续检查后台的速度。还有其他方法可以实现我想要的吗?也许onReceive()方法应该启动一个不断检查后台速度的服务?任何帮助都会非常感激。

0 个答案:

没有答案