PSK*_*PSK 0 android broadcastreceiver android-alarms android-alertdialog
我在Android应用程序中实现了警报.报警工作正常.Toast
消息是可见的.
现在我想向用户发出警报框通知.
这是来自ReceiverActivity
Class的代码.我试过了
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)
}
虽然您无法显示Receiver中的AlertDialog,因为它需要ActivityContext.
您有一个替代解决方案来显示来自Receiver的AlertDialog等活动.这个有可能.
要启动Activity作为对话框,您应该将manifest中的活动主题设置为 <activity android:theme="@android:style/Theme.Dialog" />
要从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()向服务发送命令.更多...
因此,更好的方法是"显示通知",另一种方法是"将活动用作警报".
快乐编码:)
归档时间: |
|
查看次数: |
9636 次 |
最近记录: |