如何在任何Activity
中获取后台进程的结果?
我正在使用 OTA 更新。应用程序使用处理程序在后台处理。更新完成后,我必须向用户显示警报对话框。我可以在我从 OTA 开始的SettingsActivity
中显示它,但用户可以在任何其他Activity
.
private void checkIsUpdated() {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
mDevice.getDevice().read(GattUUID.LS_DEVICE_INFORMATION, GattUUID.LC_FIRMWARE, new
BleDevice.ReadWriteListener() {
@Override
public void onEvent(ReadWriteEvent e) {
if (e.wasSuccess()) {
if (firmwareVersion.equals(e.data_string())) {
showAlertDialog("OTA update failed", "Device is not updated");
} else {
showAlertDialog("OTA update is successful.nDevice is updated to new " +
"firmware!", "Device is updated");
}
Log.i("OTA", "Read firmware is new success");
} else {
Log.e("OTA", "Read firmware is new success");
}
}
});
}
}, 30000);
}
AlertDialog
代码
private void showAlertDialog(String message, String title) {
AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.SwipeDialogLight);
builder.setTitle(title)
.setMessage(message)
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
if (!alert.isShowing()) {
alert.show();
}
}
正如@W4R10CK所说,我也这么认为。BroadcastReceiver
可能不是一个好主意。但后来,我想了一下,如果你在Service
中调用checkIsUpdated
函数并从中发送Broadcast
,这可能是一个可行的解决方案。
所以基本上你需要一个BaseActivity
类,你需要有一个BroadcastReceiver
。您需要onResume
注册它,然后再次取消注册onPause
。
而且,您还需要有一个abstract
方法才能在每个Activity
中被覆盖。
所以你的BaseActivity
可能看起来像这样。
public abstract class BaseActivity extends AppCompatActivity {
private final Context context;
public BaseActivity() {
this.context = setContext();
}
protected abstract Context setContext();
@Override
public void onResume() {
super.onResume();
registerBroadcastReceiver();
}
@Override
public void onPause() {
super.onPause();
unRegisterBroadcastReceiver();
}
// Declare your BroadcastReceiver here
private class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
showAlertDialog(context);
}
}
}
正如@rogerwar评论中所建议的,正确的方法是广播接收器。
Vogella有一个很好的教程
由于您希望在所有活动中都拥有它,因此您可以为所有活动创建一个基类,在此基类中,您可以在 onStart 中注册接收器并在 onStop 中取消注册它。