在任何活动中显示后台进程的警报对话框

时间:2017-01-07 15:55:05

标签: java android

如何在任何Activity中获取后台处理结果?

我正在使用OTA更新。应用程序处理后台处理程序。更新完成后,我必须向用户显示警告对话框。我可以在SettingsActivity中以OTA开头显示,但用户可以在任何其他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();
    }
}

2 个答案:

答案 0 :(得分:2)

正如@rogerwar在评论中所说,正确的方法是广播接收器。

Vogella有一个很好的tutorial

由于您希望在所有活动中拥有它,您可以为所有活动创建基类,在此基类中,您可以在onStart中注册接收器并在onStop中注销它。

答案 1 :(得分:2)

正如@ W4R10CK所述,我也是这么想的。 BroadcastReceiver可能不是一个好主意。但是后来,我考虑过它,如果你在checkIsUpdated内调用Service函数并从中发送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);
        }
    }
}
相关问题