如何从BroadcastReceiver设置Alertbox

PSK*_*PSK 0 android broadcastreceiver android-alarms android-alertdialog

我在Android应用程序中实现了警报.报警工作正常.Toast消息是可见的. 现在我想向用户发出警报框通知.

这是来自ReceiverActivityClass的代码.我试过了

public class ReceiverActivity extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub

// Code....


    new AlertDialog.Builder(context)
    .setTitle("Alert Box")
    .setMessage("Msg for User")
    .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface arg0, int arg1) {
        // TODO Auto-generated method stub
            // some coding...
        }
    })
    .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface arg0, int arg1) {
            arg0.dismiss();
    }
}).create().show();
}
Run Code Online (Sandbox Code Playgroud)

}

Pan*_*mar 8


虽然您无法显示Receiver中的AlertDialog,因为它需要ActivityContext.

您有一个替代解决方案来显示来自Receiver的AlertDialog等活动.这个有可能.

要启动Activity作为对话框,您应该将manifest中的活动主题设置为 <activity android:theme="@android:style/Theme.Dialog" />

将任何活动设置为Android中的警报对话框


要从Receiver启动Activity,请使用代码

    //Intent mIntent = new Intent();
    //mIntent.setClassName("com.test", "com.test.YourActivity"); 
    Intent mIntent = new Intent(context,YourActivity.class) //Same as above two lines
    mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(mIntent);
Run Code Online (Sandbox Code Playgroud)

还有一个原因是没有使用来自接收器的AlertDialog(即使你设法显示AlertDialog)

BroadcastReceiver对象仅在对onReceive(Context,Intent)的调用期间有效.一旦您的代码从此函数返回,系统将认为该对象已完成且不再处于活动状态.

这对你在onReceive(Context,Intent)实现中可以做的事情有重要的影响:任何需要异步操作的东西都不可用,因为你需要从函数返回来处理异步操作,但那时BroadcastReceiver是不再处于活动状态,因此系统可以在异步操作完成之前自由终止其进程.

特别是,您可能无法在BroadcastReceiver中显示对话框或绑定到服务.对于前者,您应该使用NotificationManager API.对于后者,您可以使用Context.startService()向服务发送命令.更多...

因此,更好的方法是"显示通知",另一种方法是"将活动用作警报".

快乐编码:)