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

經(jīng)查資料發(fā)現(xiàn):
Android 14(API 34)對前臺服務的權限體系進行了深度重構:
1.細分權限體系
除基礎權限 FOREGROUND_SERVICE 外,必須根據(jù)服務類型聲明對應的細分權限:
除基礎權限
FOREGROUND_SERVICE外,必須根據(jù)服務類型聲明對應的細分權限:
- 數(shù)據(jù)同步服務:
FOREGROUND_SERVICE_DATA_SYNC- 位置服務:
FOREGROUND_SERVICE_LOCATION- 媒體播放服務:
FOREGROUND_SERVICE_MEDIA_PLAYBACK- 電話服務:
FOREGROUND_SERVICE_PHONE_CALL
2.服務類型強校驗
系統(tǒng)會嚴格驗證 android:foregroundServiceType 屬性與權限的匹配性,不匹配將拋出 SecurityException:
java.lang.SecurityException: ForegroundServiceType dataSync requires android.permission.FOREGROUND_SERVICE_DATA_SYNC
3.通知權限前置要求
從 Android 13(API 33)開始,顯示通知的前臺服務必須動態(tài)請求 POST_NOTIFICATIONS 權限
解決方案
在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代碼中前端服務實現(xiàn)
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate:");
Toast.makeText(this, "服務已經(jī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("這是標題")
.setContentText("這是內(nèi)容")
.build();
startForeground(1, notification);
}
運行如果發(fā)現(xiàn)通知欄中不存在,還需要進入設置->應用中打開app的通知權限
最后大家可以通過adb檢查服務狀態(tài)
adb shell dumpsys activity services | grep "ForegroundService"
總結
到此這篇關于安卓14前端服務foregroundService權限問題解決辦法的文章就介紹到這了,更多相關安卓14前端服務foregroundService權限內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Android開發(fā)跳轉(zhuǎn)應用市場進行版本更新功能實現(xiàn)
這篇文章主要為大家介紹了Android實現(xiàn)跳轉(zhuǎn)到應用市場進行版本更新功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04
Android自定義RadioGroupX實現(xiàn)多行多列布局
這篇文章主要為大家詳細介紹了Android自定義RadioGroupX實現(xiàn)多行多列布局,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
Android圖像切換器imageSwitcher的實例應用
這篇文章主要為大家詳細介紹了Android圖像切換器imageSwitcher的實例應用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-10-10
Android CrashHandler編寫自己的異常捕獲的方法
這篇文章主要介紹了Android CrashHandler編寫自己的異常捕獲的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12
Android DatePicker和DatePickerDialog基本用法示例
這篇文章主要介紹了Android DatePicker和DatePickerDialog基本用法,實例分析了DatePicker和DatePickerDialog控件針對手機時間設置的相關技巧,需要的朋友可以參考下2016-06-06

