android 微信浮窗实现_Android实现类似qq微信消息悬浮窗通知功能
實現方法:(需要開啟懸浮窗通知權限、允許應用在其他應用上顯示)
一.利用headsup
懸掛式Notification,他是5.0中新增的,也就是API中的Headsup的Notification,可以在不打斷用戶操作的時候,給用戶通知
二.使用Window創建懸浮窗
當window屬性設置為FLAGE_NOT_FOCUSABLE表示不需要獲取焦點,也不需要接受各種輸入事件,此標記會同時啟用FLAGE_NOT_TOUCH_MODEL,最終事件會直接傳遞給下層具有焦點的Widow
FLAGE_NOT_TOUCH_MODE在此模式下,系統會將當前Window區域以外的單擊事件傳遞給底層的Window,當前Window區域以內的單擊事件則自己處理,如果不開啟此標記,其他Window將無法接收到單擊事件
FLAGE_SHOW_WHEN_LOCKED 開啟此模式可以讓Window顯示在鎖屏的桌面上(不是所有的rom都支持)
widow類型設置,每個window都有對應的z-ordered,層級大的會覆蓋層級小的,Window有三種類型:應用Window(1-99),子Window(1000-1999),系統Window(2000-2999),因此,桌面懸浮窗需要系統Window,設置系統級的type有很多值,經常用的是TYPE_SYSTEM_ALERT,此設置需要添加權限
但是經測試當類型設置為TYPE_TOAST的時候是不需要添加權限的( 部分rom仍舊需要權限(比如小米!!!!)小米真的是開發人員的噩夢! )
提示:6.0之后需要動態權限
注意:在某些rom下使用headsup并不會顯示桌面懸浮窗,而是直接跳轉到相應的界面,親測華為,小米都是這種情況,這種情況下需要自己實現懸浮窗
具體實現:
利用headsup
manager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE); notification = new NotificationCompat.Builder(this) .setVisibility(Notification.VISIBILITY_PRIVATE) .setSmallIcon(R.mipmap.ic_launcher) .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher)) .setFullScreenIntent(pendingIntent, false) .setContentTitle("標題") .setContentText("內容") .build(); manager.notify(1, notification);
使用Window
``private void initWindowManager(){
wm = (WindowManager) getApplicationContext().getSystemService(
Context.WINDOW_SERVICE);
params = new WindowManager.LayoutParams();
// 設置window type
params.type = WindowManager.LayoutParams.TYPE_PHONE;
/*
* 如果設置為params.type = WindowManager.LayoutParams.TYPE_PHONE; 那么優先級會降低一些,
* 即拉下通知欄不可見
*/
params.format = PixelFormat.RGBA_8888; // 設置圖片格式,效果為背景透明
// 設置Window flag
params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
/*
* 下面的flags屬性的效果形同“鎖定”。 懸浮窗不可觸摸,不接受任何事件,同時不影響后面的事件響應。
* wmParams.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL |
* LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_NOT_TOUCHABLE;
*/
// 設置懸浮窗的長得寬
params.width = wm.getDefaultDisplay().getWidth();
params.height = 200;
params.gravity = Gravity.LEFT | Gravity.TOP;}
private void createFloatView(String str) {
if (btn_floatView == null){
btn_floatView = new Button(getApplicationContext());
wmTag = true;
}
btn_floatView.setText(str);
Log.i(TAG, "createFloatView: "+str);
// 設置懸浮窗的Touch監聽
btn_floatView.setOnTouchListener(new View.OnTouchListener() {
int lastX, lastY;
int paramX, paramY;
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
if (MainActivity.lifeTag == 1) {
Intent intent = new Intent(DataService.this, MainActivity.class);
startActivity(intent);
}
wm.removeViewImmediate(btn_floatView);
btn_floatView = null;
break;
case MotionEvent.ACTION_MOVE:
break;
}
return true;
}
});
if (wmTag){
wm.addView(btn_floatView, params);
wmTag = false;
}else {
wm.updateViewLayout(btn_floatView,params);
} }```
效果圖
總結
以上所述是小編給大家介紹的Android實現類似qq微信消息懸浮窗通知功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
總結
以上是生活随笔為你收集整理的android 微信浮窗实现_Android实现类似qq微信消息悬浮窗通知功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python urlretrieve 管
- 下一篇: compareto方法_Java com