![](/img/trans.png)
[英]how to programmatically enable floating notification in android device using code
[英]Android - How to allow/enable “Floating notifications” setting as default for App using code
恐怕是壞消息。
您可能知道,這需要權限SYSTEM_ALERT_WINDOW 。
由於 Android M google 已經開始鎖定此權限以減少混亂。 這個權限有點不尋常的是它需要用戶進入一個實際的設置屏幕。普通的 Android M 權限流程對此不起作用。 引用 API:
如果應用面向 API 級別 23 或更高級別,則應用用戶必須通過權限管理屏幕向應用明確授予此權限
您可以使用 Settings 類來檢查您是否已經擁有權限,如果沒有,您需要通過intent解釋並引導用戶進入相關設置屏幕:
Intent i = new Intent();
i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setData(Uri.parse("package:" + context.getPackageName()));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.startActivity(i);
這應該只影響運行 23+ 的設備,因為舊設備應該自動獲得許可,但不要依賴檢查 SDK_INT,而是依賴canDrawOverlays ,因為一些 pre-marshmallow 設備有例外
我也面臨同樣的問題,需要從設置中啟用它,但在清單文件中添加權限后,它運行良好。
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
在版本 9 上測試。
我為此苦苦掙扎並找到了方法。 (就我而言,我使用的是OneSignal React-Native SDK )
解決方案是創建一個具有“緊急”重要性的“類別”(在 OneSignal 控制台上):)
之后,在發送推送時,必須參考該類別的channel_id。 文檔: https : //documentation.onesignal.com/docs/android-notification-categories
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.