我目前正在开发一个测试应用程序,该应用程序将显示一个对话框,要求用户在他/她开车时停止使用该应用程序。假设用户打开了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()方法应该启动一个不断检查后台速度的服务?任何帮助都会非常感激。