电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Android通知欄前臺服務的實現

瀏覽:4日期:2022-09-25 09:15:14

一、前臺服務的簡單介紹

前臺服務是那些被認為用戶知道且在系統內存不足的時候不允許系統殺死的服務。前臺服務必須給狀態欄提供一個通知,它被放到正在運行(Ongoing)標題之下——這就意味著通知只有在這個服務被終止或從前臺主動移除通知后才能被解除。

最常見的表現形式就是音樂播放服務,應用程序后臺運行時,用戶可以通過通知欄,知道當前播放內容,并進行暫停、繼續、切歌等相關操作。

二、為什么使用前臺服務

后臺運行的Service系統優先級相對較低,當系統內存不足時,在后臺運行的Service就有可能被回收,為了保持后臺服務的正常運行及相關操作,可以選擇將需要保持運行的Service設置為前臺服務,從而使APP長時間處于后臺或者關閉(進程未被清理)時,服務能夠保持工作。

三、前臺服務的詳細使用

創建服務內容,如下(四大組件不要忘記清單文件進行注冊,否則啟動會找不到服務);

public class ForegroundService extends Service { private static final String TAG = ForegroundService.class.getSimpleName(); @Override public void onCreate() { super.onCreate(); Log.e(TAG, 'onCreate'); } @Nullable @Override public IBinder onBind(Intent intent) { Log.e(TAG, 'onBind'); return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.e(TAG, 'onStartCommand'); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { Log.e(TAG, 'onDestroy'); super.onDestroy(); } }

創建服務通知內容,例如音樂播放,藍牙設備正在連接等:

/** * 創建服務通知 */private Notification createForegroundNotification() { NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // 唯一的通知通道的id. String notificationChannelId = 'notification_channel_id_01'; // Android8.0以上的系統,新建消息通道 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { //用戶可見的通道名稱 String channelName = 'Foreground Service Notification'; //通道的重要程度 int importance = NotificationManager.IMPORTANCE_HIGH; NotificationChannel notificationChannel = new NotificationChannel(notificationChannelId, channelName, importance); notificationChannel.setDescription('Channel description'); //LED燈 notificationChannel.enableLights(true); notificationChannel.setLightColor(Color.RED); //震動 notificationChannel.setVibrationPattern(new long[]{0, 1000, 500, 1000}); notificationChannel.enableVibration(true); if (notificationManager != null) { notificationManager.createNotificationChannel(notificationChannel); } } NotificationCompat.Builder builder = new NotificationCompat.Builder(this, notificationChannelId); //通知小圖標 builder.setSmallIcon(R.drawable.ic_launcher); //通知標題 builder.setContentTitle('ContentTitle'); //通知內容 builder.setContentText('ContentText'); //設定通知顯示的時間 builder.setWhen(System.currentTimeMillis()); //設定啟動的內容 Intent activityIntent = new Intent(this, NotificationActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 1, activityIntent, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(pendingIntent); //創建通知并返回 return builder.build();}

啟動服務時,創建通知:

@Overridepublic void onCreate() { super.onCreate(); Log.e(TAG, 'onCreate'); // 獲取服務通知 Notification notification = createForegroundNotification(); //將服務置于啟動狀態 ,NOTIFICATION_ID指的是創建的通知的ID startForeground(NOTIFICATION_ID, notification);}

停止服務時,移除通知:

@Overridepublic void onDestroy() { Log.e(TAG, 'onDestroy'); // 標記服務關閉 ForegroundService.serviceIsLive = false; // 移除通知 stopForeground(true); super.onDestroy();}

判斷服務是否啟動及獲取傳遞信息:

@Overridepublic int onStartCommand(Intent intent, int flags, int startId) { Log.e(TAG, 'onStartCommand'); // 標記服務啟動 ForegroundService.serviceIsLive = true; // 數據獲取 String data = intent.getStringExtra('Foreground'); Toast.makeText(this, data, Toast.LENGTH_SHORT).show(); return super.onStartCommand(intent, flags, startId);}

以上就是前臺服務的創建過程,相關注釋已經很明白了,具體使用可以查看文末的Demo。

服務創建完畢,接下來就可以進行服務的啟動了,啟動前不要忘記在清單文件中進行前臺服務權限的添加:

<uses-permission android:name='android.permission.FOREGROUND_SERVICE' />

服務的啟動和停止

//啟動服務if (!ForegroundService.serviceIsLive) { // Android 8.0使用startForegroundService在前臺啟動新服務 mForegroundService = new Intent(this, ForegroundService.class); mForegroundService.putExtra('Foreground', 'This is a foreground service.'); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { startForegroundService(mForegroundService); } else { startService(mForegroundService); }} else { Toast.makeText(this, '前臺服務正在運行中...', Toast.LENGTH_SHORT).show();}

//停止服務mForegroundService = new Intent(this, ForegroundService.class);stopService(mForegroundService);

關于前臺服務的介紹及使用就到這里了,相關使用已上傳至Github開發記錄,歡迎點擊查閱及Star,我也會繼續補充其它有用的知識及例子在項目上。

到此這篇關于Android通知欄前臺服務的實現的文章就介紹到這了,更多相關Android 通知欄前臺內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Android
相關文章:
主站蜘蛛池模板: 沈阳庭院景观设计_私家花园_别墅庭院设计_阳台楼顶花园设计施工公司-【沈阳现代时园艺景观工程有限公司】 | 玉米深加工机械,玉米加工设备,玉米加工机械等玉米深加工设备制造商-河南成立粮油机械有限公司 | 山东艾德实业有限公司| 花纹铝板,合金铝卷板,阴极铝板-济南恒诚铝业有限公司 | 冷藏车厂家|冷藏车价格|小型冷藏车|散装饲料车厂家|程力专用汽车股份有限公司销售十二分公司 | 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 | 冷却塔降噪隔音_冷却塔噪声治理_冷却塔噪音处理厂家-广东康明冷却塔降噪厂家 | 南京兰江泵业有限公司-水解酸化池潜水搅拌机-絮凝反应池搅拌机-好氧区潜水推进器 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | 自动检重秤-动态称重机-重量分选秤-苏州金钻称重设备系统开发有限公司 | 闭端端子|弹簧螺式接线头|防水接线头|插线式接线头|端子台|电源线扣+护线套|印刷电路板型端子台|金笔电子代理商-上海拓胜电气有限公司 | 宿松新闻网 宿松网|宿松在线|宿松门户|安徽宿松(直管县)|宿松新闻综合网站|宿松官方新闻发布 | 电子巡更系统-巡检管理系统-智能巡检【金万码】 | 浇钢砖,流钢砖_厂家价低-淄博恒森耐火材料有限公司 | 威海防火彩钢板,威海岩棉复合板,威海彩钢瓦-文登区九龙岩棉复合板厂 | 旋片真空泵_真空泵_水环真空泵_真空机组-深圳恒才机电设备有限公司 | 济南品牌包装设计公司_济南VI标志设计公司_山东锐尚文化传播 | 铝箔袋,铝箔袋厂家,东莞铝箔袋,防静电铝箔袋,防静电屏蔽袋,防静电真空袋,真空袋-东莞铭晋让您的产品与众不同 | 舞台木地板厂家_体育运动木地板_室内篮球馆木地板_实木运动地板厂家_欧氏篮球地板推荐 | 矿用履带式平板车|探水钻机|气动架柱式钻机|架柱式液压回转钻机|履带式钻机-启睿探水钻机厂家 | 膜片万向弹性联轴器-冲压铸造模具「沧州昌运模具」 | 云杂志网-学术期刊-首页| 河南不锈钢水箱_地埋水箱_镀锌板水箱_消防水箱厂家-河南联固供水设备有限公司 | 达利园物流科技集团- | SF6环境监测系统-接地环流在线监测装置-瑟恩实业 | 东莞画册设计_logo/vi设计_品牌包装设计 - 华略品牌设计公司 | 南京泽朗生物科技有限公司-液体饮料代加工_果汁饮料代加工_固体饮料代加工 | 分类168信息网 - 分类信息网 免费发布与查询 | SDG吸附剂,SDG酸气吸附剂,干式酸性气体吸收剂生产厂家,超过20年生产使用经验。 - 富莱尔环保设备公司(原名天津市武清县环保设备厂) | 搜活动房网—活动房_集装箱活动房_集成房屋_活动房屋 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 东莞喷砂机-喷砂机-喷砂机配件-喷砂器材-喷砂加工-东莞市协帆喷砂机械设备有限公司 | 瓶盖扭矩测试仪-瓶盖扭力仪-全自动扭矩仪-济南三泉中石单品站 | 色谱柱-淋洗液罐-巴罗克试剂槽-巴氏吸管-5ml样品瓶-SBS液氮冻存管-上海希言科学仪器有限公司 | 金属检测机_金属分离器_检针验针机_食品药品金属检探测仪器-广东善安科技 | 便携式高压氧舱-微压氧舱-核生化洗消系统-公众洗消站-洗消帐篷-北京利盟救援 | 重庆小面培训_重庆小面技术培训学习班哪家好【终身免费复学】 | 电磁流量计_智能防腐防爆管道式计量表-金湖凯铭仪表有限公司 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 雷冲击高压发生器-水内冷直流高压发生器-串联谐振分压器-武汉特高压电力科技有限公司 |