1
大家好我推出通知接收时,我试图从服务启动CountDownTimer对话框。我想唤醒屏幕并使用系统警报对话框; 我使用权限:错误从服务启动AlertDialog.Builder
"android.permission.SYSTEM_ALERT_WINDOW", "android.permission.WAKE_LOCK"
但是当获取通知,得到如下错误和服务carash:
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:200)
at android.support.v7.app.AppCompatDialog.<init>(AppCompatDialog.java:46)
at android.support.v7.app.AlertDialog.<init>(AlertDialog.java:97)
at android.support.v7.app.AlertDialog$Builder.create(AlertDialog.java:929)
at com.iransnaptaxi.taxi.Server.PusheServic.ShowDialog(PusheServic.java:91)
at com.iransnaptaxi.taxi.Server.PusheServic.onMessageReceived(PusheServic.java:48)
at android.os.AsyncTask$2.call(AsyncTask.java:297)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
,我试图与以luanch它下面的鳕鱼:
private void ShowDialog(){
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK| PowerManager.ACQUIRE_CAUSES_WAKEUP
| PowerManager.ON_AFTER_RELEASE, "taxiWakeLock");
wakeLock.acquire();
final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getApplicationContext(), R.style.AppTheme_MaterialDialogTheme);
dialogBuilder.setTitle("درخواست سفر")
.setMessage("درخواست سفر دارید").setNegativeButton("لغو", null)
.setPositiveButton("مشاهد سفر", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
final AlertDialog dialog = dialogBuilder.create();
final Window dialogWindow = dialog.getWindow();
final WindowManager.LayoutParams dialogWindowAttributes = dialogWindow.getAttributes();
dialogWindow.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
dialogWindow.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
dialogWindowAttributes.windowAnimations = R.anim.dialogue_scale_anim_open;
dialog.show();
new CountDownTimer(15000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
dialog.setMessage("زمان مانده تا لغو درخواست"+"00:"+ (millisUntilFinished/1000));
}
@Override
public void onFinish() {
dialog.dismiss();
//info.setVisibility(View.GONE);
}
}.start();
}
我把这个方法叫做扩展pushe库所创建的服务的类,你可以看到class [here](https://imgur.com/kiqoRQW)的方法 –
你的stacktrace表明方法正在从的AsyncTask。尝试调用在showDialog()之前添加'Looper.prepare();'。和'Looper.loop();'之后。 –
非常感谢你,'Looper'为我工作请求编辑你的主要答案,以帮助其他人有同样的问题, –