在写手机卫士的时候,用户拨打|接听电话需要显示号码归属地,然后出现了一些异常,在此留下记号,希望对麻友们有帮助:
BUG教程
在使用 view = View.inflate(this, R.layout.ui_toast, null);获得View对象后wm.addView出现错误:
10-12 14:29:06.166: E/AndroidRuntime(1268): Caused by: android.view.WindowManager$BadTokenException: Unable to add window android.view.[email protected] -- permission denied for this window type
解决办法:
使用另外的方法获取:
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); mDesktopLayout = inflater.inflate(R.layout.volume_panel, null);
完整代码:
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); mDesktopLayout = inflater.inflate(R.layout.volume_panel, null); // 取得系统窗体 mWindowManager = (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE); // 窗体的布局样式 mLayoutParams = new WindowManager.LayoutParams(); // 设置窗体显示类型――TYPE_SYSTEM_ALERT(系统提示) mLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; // 设置窗体焦点及触摸: // FLAG_NOT_FOCUSABLE(不能获得按键输入焦点) mLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; // 设置显示的模式 mLayoutParams.format = PixelFormat.RGBA_8888; // 设置对齐的方法 mLayoutParams.gravity = Gravity.TOP | Gravity.LEFT; // 设置窗体宽度和高度 mLayoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT; mLayoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; // 设置窗体显示的位置,否则在屏幕中心显示 mLayoutParams.x = 50; mLayoutParams.y = 50; mWindowManager.addView(mDesktopLayout, mLayoutParams);
问题总结
这两种方式显示出来的窗口都不会激发当前Activity的onPause()事件。据说还可以先一个窗口风格的Activity,不过显示时会激发当前窗口的onPause()事件,具体咋样没试过。
推荐风格
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="selectorDialog" parent="@Android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item><!--边框--> <item name="android:windowIsFloating">true</item><!--是否浮现在activity之上--> <item name="android:windowIsTranslucent">false</item><!--半透明--> <item name="android:windowNoTitle">true</item><!--无标题--> <!--<item name="android:windowBackground">@drawable/selector_dialog_bg</item>背景透明--> <item name="android:backgroundDimEnabled">false</item><!--模糊--> <item name="android:backgroundDimAmount">0.6</item> </style> </resources>
OK,谢谢关注破晓博客
时间: 2024-08-24 15:01:22