国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android實(shí)現(xiàn)類似qq微信消息懸浮窗通知功能

2019-12-12 01:09:51
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

實(shí)現(xiàn)方法:(需要開啟懸浮窗通知權(quán)限、允許應(yīng)用在其他應(yīng)用上顯示)

一.利用headsup

懸掛式Notification,他是5.0中新增的,也就是API中的Headsup的Notification,可以在不打斷用戶操作的時(shí)候,給用戶通知

二.使用Window創(chuàng)建懸浮窗

當(dāng)window屬性設(shè)置為FLAGE_NOT_FOCUSABLE表示不需要獲取焦點(diǎn),也不需要接受各種輸入事件,此標(biāo)記會(huì)同時(shí)啟用FLAGE_NOT_TOUCH_MODEL,最終事件會(huì)直接傳遞給下層具有焦點(diǎn)的Widow

FLAGE_NOT_TOUCH_MODE 在此模式下,系統(tǒng)會(huì)將當(dāng)前Window區(qū)域以外的單擊事件傳遞給底層的Window,當(dāng)前Window區(qū)域以內(nèi)的單擊事件則自己處理,如果不開啟此標(biāo)記,其他Window將無(wú)法接收到單擊事件

FLAGE_SHOW_WHEN_LOCKED 開啟此模式可以讓W(xué)indow顯示在鎖屏的桌面上(不是所有的rom都支持)

widow類型設(shè)置,每個(gè)window都有對(duì)應(yīng)的z-ordered,層級(jí)大的會(huì)覆蓋層級(jí)小的,Window有三種類型:應(yīng)用Window(1-99),子Window(1000-1999),系統(tǒng)Window(2000-2999),因此,桌面懸浮窗需要系統(tǒng)Window,設(shè)置系統(tǒng)級(jí)的type有很多值,經(jīng)常用的是TYPE_SYSTEM_ALERT,此設(shè)置需要添加權(quán)限<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

但是經(jīng)測(cè)試當(dāng)類型設(shè)置為TYPE_TOAST的時(shí)候是不需要添加權(quán)限的( 部分rom仍舊需要權(quán)限(比如小米!?。?!)小米真的是開發(fā)人員的噩夢(mèng)! )

提示:6.0之后需要?jiǎng)討B(tài)權(quán)限

注意:在某些rom下使用headsup并不會(huì)顯示桌面懸浮窗,而是直接跳轉(zhuǎn)到相應(yīng)的界面,親測(cè)華為,小米都是這種情況,這種情況下需要自己實(shí)現(xiàn)懸浮窗

具體實(shí)現(xiàn):

利用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("標(biāo)題") .setContentText("內(nèi)容") .build(); manager.notify(1, notification);

使用Window

``private void initWindowManager(){ wm = (WindowManager) getApplicationContext().getSystemService(     Context.WINDOW_SERVICE); params = new WindowManager.LayoutParams(); // 設(shè)置window type params.type = WindowManager.LayoutParams.TYPE_PHONE; /*  * 如果設(shè)置為params.type = WindowManager.LayoutParams.TYPE_PHONE; 那么優(yōu)先級(jí)會(huì)降低一些,  * 即拉下通知欄不可見  */ params.format = PixelFormat.RGBA_8888; // 設(shè)置圖片格式,效果為背景透明 // 設(shè)置Window flag params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL     | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE     | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; /*  * 下面的flags屬性的效果形同“鎖定”。 懸浮窗不可觸摸,不接受任何事件,同時(shí)不影響后面的事件響應(yīng)。  * wmParams.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL |  * LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_NOT_TOUCHABLE;  */ // 設(shè)置懸浮窗的長(zhǎng)得寬 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); // 設(shè)置懸浮窗的Touch監(jiān)聽 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); } }```

效果圖

總結(jié)

以上所述是小編給大家介紹的Android實(shí)現(xiàn)類似qq微信消息懸浮窗通知功能,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)武林網(wǎng)網(wǎng)站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 上犹县| 龙里县| 河北区| 禹州市| 静海县| 开化县| 都江堰市| 莱芜市| 佛学| 芜湖县| 博白县| 泊头市| 上杭县| 兴安县| 来宾市| 洪湖市| 丰顺县| 湖口县| 玉龙| 咸阳市| 东阿县| 通山县| 临西县| 棋牌| 乐亭县| 准格尔旗| 新和县| 东辽县| 兖州市| 哈密市| 枣强县| 方正县| 沭阳县| 丹阳市| 通州市| 陇西县| 五原县| 赤城县| 黄平县| 阿拉尔市| 临夏市|