安卓14前端服務(wù)foregroundService權(quán)限問題解決辦法
發(fā)現(xiàn)問題
在安卓應(yīng)用開發(fā)過程中,我們會(huì)使用到service,普通的service我們只需要在AndroidMainfest.xml文件中添加service類就好
<application
<service android:name=".service.MyService" />
</application>前端服務(wù)foregroundService還需要添加
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
但如果只是這樣,啟動(dòng)前端服務(wù)還是會(huì)報(bào)錯(cuò)

經(jīng)查資料發(fā)現(xiàn):
Android 14(API 34)對前臺服務(wù)的權(quán)限體系進(jìn)行了深度重構(gòu):
1.細(xì)分權(quán)限體系
除基礎(chǔ)權(quán)限 FOREGROUND_SERVICE 外,必須根據(jù)服務(wù)類型聲明對應(yīng)的細(xì)分權(quán)限:
除基礎(chǔ)權(quán)限
FOREGROUND_SERVICE外,必須根據(jù)服務(wù)類型聲明對應(yīng)的細(xì)分權(quán)限:
- 數(shù)據(jù)同步服務(wù):
FOREGROUND_SERVICE_DATA_SYNC- 位置服務(wù):
FOREGROUND_SERVICE_LOCATION- 媒體播放服務(wù):
FOREGROUND_SERVICE_MEDIA_PLAYBACK- 電話服務(wù):
FOREGROUND_SERVICE_PHONE_CALL
2.服務(wù)類型強(qiáng)校驗(yàn)
系統(tǒng)會(huì)嚴(yán)格驗(yàn)證 android:foregroundServiceType 屬性與權(quán)限的匹配性,不匹配將拋出 SecurityException:
java.lang.SecurityException: ForegroundServiceType dataSync requires android.permission.FOREGROUND_SERVICE_DATA_SYNC
3.通知權(quán)限前置要求
從 Android 13(API 33)開始,顯示通知的前臺服務(wù)必須動(dòng)態(tài)請求 POST_NOTIFICATIONS 權(quán)限
解決方案
在AndroidMainfest.xml清單文件中這樣添加:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<application
<service
android:name=".service.MyForegroundService"
android:enabled="true"
android:exported="false"
android:foregroundServiceType="dataSync">
</service>
</application>Java代碼中前端服務(wù)實(shí)現(xiàn)
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate:");
Toast.makeText(this, "服務(wù)已經(jīng)啟動(dòng)", Toast.LENGTH_LONG).show();
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(
"channel_id",
"通知",
NotificationManager.IMPORTANCE_DEFAULT
);
notificationManager.createNotificationChannel(channel);
}
//創(chuàng)建通知
Notification notification = new NotificationCompat.Builder(this, "channel_id")
.setSmallIcon(R.drawable.baseline_music_note_24)
.setContentTitle("這是標(biāo)題")
.setContentText("這是內(nèi)容")
.build();
startForeground(1, notification);
}
運(yùn)行如果發(fā)現(xiàn)通知欄中不存在,還需要進(jìn)入設(shè)置->應(yīng)用中打開app的通知權(quán)限
最后大家可以通過adb檢查服務(wù)狀態(tài)
adb shell dumpsys activity services | grep "ForegroundService"
總結(jié)
到此這篇關(guān)于安卓14前端服務(wù)foregroundService權(quán)限問題解決辦法的文章就介紹到這了,更多相關(guān)安卓14前端服務(wù)foregroundService權(quán)限內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談Android硬件加速原理與實(shí)現(xiàn)簡介
這篇文章主要介紹了淺談Android硬件加速原理與實(shí)現(xiàn)簡介,本文嘗試從底層硬件原理,一直到上層代碼實(shí)現(xiàn),對硬件加速技術(shù)進(jìn)行簡單介紹,感興趣的小伙伴們可以參考一下2018-07-07
Android實(shí)現(xiàn)音樂播放器歌詞顯示效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)音樂播放器歌詞顯示效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
Android自定義SeekBar實(shí)現(xiàn)視頻播放進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了Android自定義SeekBar實(shí)現(xiàn)視頻播放進(jìn)度條的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
Android Jetpack系列之App Startup使用詳解
這篇文章主要為大家介紹了Android Jetpack系列之App Startup使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Android筆記之:App應(yīng)用之啟動(dòng)界面SplashActivity的使用
當(dāng)前比較成熟一點(diǎn)的應(yīng)用基本上都會(huì)在進(jìn)入應(yīng)用之顯示一個(gè)啟動(dòng)界面.這個(gè)啟動(dòng)界面或簡單,或復(fù)雜,或簡陋,或華麗,用意不同,風(fēng)格也不同2013-04-04
Android動(dòng)態(tài)添加設(shè)置布局與控件的方法
這篇文章主要介紹了Android動(dòng)態(tài)添加設(shè)置布局與控件的方法,涉及Android中布局與控件的相關(guān)操作技巧,需要的朋友可以參考下2016-01-01
Android 實(shí)現(xiàn)左滑出現(xiàn)刪除選項(xiàng)
滑動(dòng)刪除的部分主要包含兩個(gè)部分, 一個(gè)是內(nèi)容區(qū)域(用于放置正常顯示的view),另一個(gè)是操作區(qū)域(用于放置刪除按鈕)。下面通過本文給大家介紹Android 實(shí)現(xiàn)左滑出現(xiàn)刪除選項(xiàng),需要的朋友可以參考下2017-06-06
kotlin 注解 @Parcelize 使用示例和步驟詳解
Parcelable 接口是 Android 中用于在組件之間傳遞對象的一種方式,在 Kotlin 中,@Parcelize 注解用于簡化實(shí)現(xiàn) Android Parcelable 接口的過程,本文給大家分享kotlin 注解 @Parcelize 使用示例,感興趣的朋友一起看看吧2024-06-06

