java - 在任何 Activity 中显示来自后台进程的警报对话框

标签 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();
    }
}

最佳答案

正如@W4R10CK 所说,我也这么认为。 BroadcastReceiver 可能不是一个好主意。但后来,我考虑了一下,如果你在 Service 中调用 checkIsUpdated 函数并从中发送 Broadcast,它可能是一个可行的解决方案。

所以基本上您需要一个 BaseActivity 类,并且在其中您需要一个 BroadcastReceiver。您需要在 onResume 上注册它并再次在 onPause 上注销它。

而且您还需要在每个 Activity 中覆盖一个 abstract 方法。

所以你的 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);
        }
    }
}

关于java - 在任何 Activity 中显示来自后台进程的警报对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41523291/

相关文章:

java - 在 Controller 中获取 Spring boot/security 的 session token

java - 在 UIMA Ruta Workbench 中添加 HeidelTime 作为分析引擎

android - Branch.io 延迟深度链接在 Facebook 广告中不起作用

android - 更改 Android 自定义 SurfaceView 的大小

android - 如何在键盘出现时将整个 View 推上去,需要进行哪些布局更改?

android - 在 Google Drive App 文件夹中存储房间数据库?

java - 如何使用 Spring MVC 中的替代 JSON 库

java - 根据2d距离从java hashmap获取

java - Gradle:如何将 servlet JARS 复制到 WAR 文件中的文件夹?

Android SSL - 无对等证书 (GeneXus)