我正在尝试打开一个对话框窗口,但每次我尝试打开它都会抛出此异常:
Uncaught handler: thread main exiting due to uncaught exception
android.view.WindowManager$BadTokenException:
Unable to add window -- token null is not for an application
at android.view.ViewRoot.setView(ViewRoot.java:460)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
at android.app.Dialog.show(Dialog.java:238)
at android.app.Activity.showDialog(Activity.java:2413)
Run Code Online (Sandbox Code Playgroud)
我是通过showDialog显示器的id 调用来创建的.该onCreateDialog处理器记录良好,我可以通过它没有问题的一步,但因为它看起来像我想的东西我已经把它贴吧:
@Override
public Dialog onCreateDialog(int id)
{
Dialog dialog;
Context appContext = this.getApplicationContext();
switch(id)
{
case RENAME_DIALOG_ID:
Log.i("Edit", "Creating rename dialog...");
dialog = new Dialog(appContext);
dialog.setContentView(R.layout.rename);
dialog.setTitle("Rename " + noteName);
break;
default:
dialog = null;
break;
}
return dialog;
}
Run Code Online (Sandbox Code Playgroud)
这有什么不足之处吗?有些问题在创建对话框时已经讨论过这个问题onCreate …
android runtimeexception android-dialog android-windowmanager
Facebook如何在Android上创建聊天头?在所有其他视图之上创建浮动视图的API是什么?
当我尝试打开对话框时,我收到以下Android异常.有人可以帮我理解发生了什么,我该如何解决这个问题?
android.view.WindowManager$BadTokenException:
Unable to add window -- token null is not for an application
at android.view.ViewRoot.setView(ViewRoot.java:509)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
at android.app.Dialog.show(Dialog.java:241)
Run Code Online (Sandbox Code Playgroud) android runtimeexception android-dialog android-windowmanager
我工作的一个应用程序,我需要显示一些信息的窗口ON未解锁手机的锁屏(键盘保护).我想我可以用WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG做到这一点
但每次我的应用程序崩溃时出现以下错误:
android.view.WindowManager $ BadTokenException:无法添加窗口android.view.ViewRootImpl$W@40ec8528 - 此窗口类型的权限被拒绝
这些帖子(这里,这里和这里)都给出了相同的答案.在清单文件中添加以下权限.
android.permission.SYSTEM_ALERT_WINDOW
我已经实现的解决方案,但我仍然得到相同的错误.我知道我做错了什么?
以下是我的清单文件中的权限:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.droidpilot.keyguardwindow" >
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
Run Code Online (Sandbox Code Playgroud)
这是我用来将Window添加到锁定屏幕的代码
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
LayoutInflater mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = mInflater.inflate(R.layout.lock_screen_notif, null);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG,
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED …Run Code Online (Sandbox Code Playgroud) 如何在锁定屏幕上显示Activity或Dialog显示?
通过在Activity.onCreate()方法中设置各种窗口类型,我已经尝试在屏幕打开时显示我的锁定活动:
TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD
和其他人一起SYSTEM_ALERT_WINDOW和INTERNAL_SYSTEM_WINDOW权限.
解锁设备后,我的活动可见.
更新:
我实际上已经设法显示我自己的Activity而不是默认锁定屏幕.除非您使用HOME按钮,否则它可以完美运行
android dialog lockscreen android-windowmanager android-activity
我试着谷歌搜索,没有直接和/或明确的答案.
该开发者网站的定义不明确之一:
应用程序用于与窗口管理器通信的界面.使用
Context.getSystemService(Context.WINDOW_SERVICE)获得的其中之一.
有普通六年级英语的人可以解释它是什么吗?
我如何使用它来创建一个浮动对象,即使我从一个移动到另一个仍然通过几个活动?
我正在尝试登录应用程序,但登录成功后即将进入下一个屏幕,它会重新启动.以下是我认为会引起这种情况的例外,因为没有其他例外.
11-14 15:09:54.841: W/WindowManager(643): Failed looking up window
11-14 15:09:54.841: W/WindowManager(643): java.lang.IllegalArgumentException: Requested window android.os.BinderProxy@4205eb18 does not exist
11-14 15:09:54.841: W/WindowManager(643): at com.android.server.wm.WindowManagerService.windowForClientLocked(WindowManagerService.java:7622)
11-14 15:09:54.841: W/WindowManager(643): at com.android.server.wm.WindowManagerService.windowForClientLocked(WindowManagerService.java:7613)
11-14 15:09:54.841: W/WindowManager(643): at com.android.server.wm.WindowState$DeathRecipient.binderDied(WindowState.java:1591)
11-14 15:09:54.841: W/WindowManager(643): at android.os.BinderProxy.sendDeathNotice(Binder.java:417)
11-14 15:09:54.841: W/WindowManager(643): at dalvik.system.NativeStart.run(Native Method)
11-14 15:09:54.841: I/WindowManager(643): WIN DEATH: null
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉,它是什么意思,如果可能的话,如何纠正它.
我试过的建议在这里,建议在此情况下,建议在这里,我已经在我的基本活动注释掉onAttachedToWindow().我有两个活动继承自这个类BaseActivity.一个运行,一个不运行.有什么区别?我的目标SDK是19; 将它改为12没有区别.这是我的onCreate for BaseActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onAttachedToWindow();
super.onCreate(savedInstanceState);
....
}
Run Code Online (Sandbox Code Playgroud)
当导航到第二个活动时,单步执行代码,它会通过onCreate(),onResume(),然后崩溃.
可能是什么问题呢?
堆栈跟踪:
06-26 13:41:57.963 28667-28667/com.assistek.ediary E/AndroidRuntime? FATAL EXCEPTION: main
Process: com.assistek.ediary, PID: 28667
java.lang.IllegalArgumentException: Window type can not be changed after the window is added.
at android.os.Parcel.readException(Parcel.java:1550)
at android.os.Parcel.readException(Parcel.java:1499)
at android.view.IWindowSession$Stub$Proxy.relayout(IWindowSession.java:903)
at android.view.ViewRootImpl.relayoutWindow(ViewRootImpl.java:5301)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1507)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254) …Run Code Online (Sandbox Code Playgroud) 我可以看到,当我使用API演示中显示的相同标志来模糊背景时,我得到一个警告,它已被弃用:
"不推荐使用WindowManager.LayoutParams.FLAG_BLUR_BEHIND字段".
我已经读过它了,我发现"不再支持模糊"了.
这是否意味着它不适用于未来的版本?他们为什么弃用它?还有其他选择吗?我真的很喜欢这个功能.
public class MainActivity extends AppCompatActivity {
ArrayList<String> list = new ArrayList<>();
ArrayAdapter<String> adapter;
ArrayList<String> data1 = new ArrayList<>();
ArrayList<String> data2 = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
for (int i = 0 ; i< 10 ;i++){
data1.add(String.valueOf(i));
}
for (int i = 20; i < 30; i++){
data2.add(String.valueOf(i));
}
Spinner spinner = (Spinner) findViewById(R.id.demo);
adapter = new ArrayAdapter<>(this,android.R.layout.simple_dropdown_item_1line,list);
spinner.setAdapter(adapter);
}
private void change(boolean which){
if (which){
list.clear();
list.addAll(data1);
}else{
list.clear();
list.addAll(data2);
}
adapter.notifyDataSetChanged();
}
@Override
public …Run Code Online (Sandbox Code Playgroud) java android spinner android-arrayadapter android-windowmanager