显示对话框警告从Android中的非活性类 [英] Show dialog alert from a non-activity class in android
问题描述
我想通过 AlertDialogManager
来显示一个警告对话框类到非活动
类 DeviceAdminReceiverSample
的方法 onDisabled
,但每当我打电话 alertDialog
通过该方法,它产生用下面的文本错误
错误
12月6日至12号:01:19.923:E / AndroidRuntime(468):致命异常:主要
十二月6号至12号:01:19.923:E / AndroidRuntime(468):java.lang.RuntimeException的:无法启动
接收器com.android.remotewipedata.DeviceAdminReceiverSample:
android.view.WindowManager $ BadTokenException:无法添加窗口 - 标记空不
为应用程序
我知道这个问题是与上下文
的事情,但我不知道该怎么放在那里,这样它的工作,我想这个
, getApplicationContext()
但都徒劳无功。我的code两个类低于
AlertDialogManager
公共类AlertDialogManager {
公共无效showAlertDialog(上下文的背景下,标题字符串,字符串的消息,
布尔状态){
最后AlertDialog alertDialog =新AlertDialog.Builder(上下文).create();
alertDialog.setTitle(职称);
alertDialog.setMessage(消息);
如果(状态!= NULL)
alertDialog.setButton(OK,新DialogInterface.OnClickListener(){
公共无效的onClick(DialogInterface对话,诠释它){
alertDialog.dismiss();
}
});
alertDialog.show();
}
}
DeviceAdminReceiverSample
公共类DeviceAdminReceiverSample扩展DeviceAdminReceiver {
static final的字符串变量=DeviceAdminReceiver;
AlertDialogManager警报=新AlertDialogManager();
/ **当这个应用程序不再是设备管理员调用。 * /
@覆盖
公共无效onDisabled(上下文的背景下,意图意图){
super.onDisabled(背景下,意图);
Toast.makeText(背景下,R.string.device_admin_disabled,
Toast.LENGTH_LONG).show();
// intent.putExtra(dialogMessage,设备管理已被禁用);
// intent.setClass(背景下,DialogActivity.class);
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// context.startActivity(意向);
alert.showAlertDialog(背景下,警报,
设备管理员已禁用,真正的);
}
现在的问题是您可以显示从活动AlertDialogs仅
。这不是上下文的问题。
虽然这不是一个好主意,显示从接收器的(最好是使用通知),但是如果你想这样做,你可以创建一个<对话href="http://stackoverflow.com/questions/8766739/show-an-alert-dialog-in-broadcast-receiver-after-a-system-reboot">Activity为对话框并显示
I want to show an Alert Dialog via AlertDialogManager
class to a non-activity
class DeviceAdminReceiverSample
's method onDisabled
, but whenever I call alertDialog
via that method it generates error with following text
Error
06-12 12:01:19.923: E/AndroidRuntime(468): FATAL EXCEPTION: main
06-12 12:01:19.923: E/AndroidRuntime(468): java.lang.RuntimeException: Unable to start
receiver com.android.remotewipedata.DeviceAdminReceiverSample:
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not
for an application
I know the issue is with context
thing but I don't know what to put there so that it work, I tried this
, getApplicationContext()
but all vain. My code for both classes is below
AlertDialogManager
public class AlertDialogManager {
public void showAlertDialog(Context context, String title, String message,
Boolean status) {
final AlertDialog alertDialog = new AlertDialog.Builder(context).create();
alertDialog.setTitle(title);
alertDialog.setMessage(message);
if (status != null)
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
alertDialog.dismiss();
}
});
alertDialog.show();
}
}
DeviceAdminReceiverSample
public class DeviceAdminReceiverSample extends DeviceAdminReceiver {
static final String TAG = "DeviceAdminReceiver";
AlertDialogManager alert = new AlertDialogManager();
/** Called when this application is no longer the device administrator. */
@Override
public void onDisabled(Context context, Intent intent) {
super.onDisabled(context, intent);
Toast.makeText(context, R.string.device_admin_disabled,
Toast.LENGTH_LONG).show();
// intent.putExtra("dialogMessage", "Device admin has been disabled");
// intent.setClass(context, DialogActivity.class);
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// context.startActivity(intent);
alert.showAlertDialog(context, "Alert",
"Device admin has been disabled", true);
}
The problem is 'You can show AlertDialogs from Activity only
'. This is not an issue of context.
Although this is not a good idea to show dialog from receiver (better is to use Notification), But if you want to do so you can create an Activity as dialog and show
这篇关于显示对话框警告从Android中的非活性类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!