我试图通过传递上下文来调用一个方法(postMessage),但是不能正常工作。
错误是什么?我尝试过很多东西,但仍然没有用。
public class AlarmReceiver extends BroadcastReceiver implements
OnActivityResultListener {
public void onReceive(Context context, Intent intent) {
try {
controler(context);
} catch (Exception e) {
Toast.makeText(
context,
"There was an error somewhere",
Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
public void controler(Context context) {
String radioButtonName = MAinActivity.actionAlarmName(radioButtonName);
if (radioButtonName.equals("1")) {
// TODO
} else if (radioButtonName.equals("2")) {
postMessage(context);
}
}
public void postMessage(Context context) {
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
// Yes button clicked
break;
case DialogInterface.BUTTON_NEGATIVE:
// No button clicked
break;
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage("Are you sure?")
.setPositiveButton("Yes", dialogClickListener)
.setNegativeButton("No", dialogClickListener).show();
}
答案 0 :(得分:2)
您在Context
的{{1}}中收到的onReceive()
不是活动上下文,也就是其应用程序上下文。您无法显示具有应用程序上下文的对话框。对话框应始终与BroadcastReceiver
。
答案 1 :(得分:1)
在AndroidManifest中添加接收器
<receiver android:name=".AlarmReceiver" android:process=":remote" />
答案 2 :(得分:1)
如果你想在没有活动背景的接收器中显示一个对话框,你可以这样做:
dialog.getWindow.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)
不要忘记在AndroidManifest.xml中添加权限。
答案 3 :(得分:1)
正如Android官方文档中所述,您无法在接收方法中显示对话框。
即使你想显示一个对话框,你也可以使用另一种方法来启动一个带有对话框样式的活动 您可以启动透明活动,在其创建方法中显示警告对话框。
希望这会有所帮助: