12

我正在嘗試整合Google Analytics for Android。根據documentation here,它要求添加android.permission.WAKE_LOCK(提供下面的註釋註釋)。我不明白這一點。如果我只在Google Play Store中發佈應用程序,我還需要這個嗎?如果我只在Google Play商店中發佈,是否需要Google Play服務的android.permission.WAKE_LOCK?

如果這不是絕對必要的,我真的不想問用戶額外的權限。

<!-- Optional permission for reliable local dispatching on non-Google Play devices --> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 

特別是,我不明白這是什麼音符實際上意味着here

一個可選許可WAKE_LOCK可以請求提高調度的非谷歌播放設備。

+1

它說「可選權限」。 – Carcigenicate

+0

@Carcigenicate是的我明白,只是不清楚爲什麼以及如何幫助? – user1406716

+0

我不確定它如何幫助非谷歌商店,但似乎除了問題。如果他們說它是可選的並用於你不需要的東西,我會說可以放心地說你可以忽略它。請注意,商店中的許多應用程序都沒有喚醒鎖權限。 – Carcigenicate

回答

7

WAKE_LOCK

允許使用PowerManager WakeLocks讓處理器進入休眠或屏幕變暗。

在Google Play設備上,後臺服務幾乎總是作爲「Google Play服務」運行,因此不需要WAKE_LOCK

在非Google Play設備上,WAKE_LOCK有助於保持Google Analytics的調度流程/服務處於活動狀態,因此有更多機會報告/上傳數據。

編輯

而且,目前還不清楚會發生什麼變化的權限組不屬於那些用戶可以通過設置控制,如SYSTEM_TOOLS危險的權限。

https://commonsware.com/blog/2015/06/02/random-musings-m-developer-preview-bad.html

36

更新:隨着Android 6(API級別23,WAKE_LOCK被歸類爲「normal」的權限,這意味着權限自動授予卸下WAKE_LOCK權限往往會導致應用程序崩潰。 (見下文),所以我會避免這樣做。


我在同樣的位置來的。我不想增加額外的許可,因爲它會使用最新的已經顯著減少的人數應用程序的rsion(因爲新的權限意味着用戶必須明確選擇接收應用程序更新)。

我相信我已經設法通過結合this SO question上的一些答案來找到解決方案。

首先,添加 「工具」 命名空間的應用程序的清單

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools"> 

其次,添加 「WAKE_LOCK」 權限,但使用remove選項

<uses-permission android:name="android.permission.WAKE_LOCK" tools:node="remove" /> 

現在,當我上傳新的APK我能看到的權限不再需要:

wake lock permission removed

重要

看來這種解決方案可能不再可行。我現在正在使用消息「無論用戶10182還是當前進程都有android.permission.WAKE_LOCK」都引發了大量的RuntimeExceptions。

Fatal Exception: java.lang.RuntimeException 
Unable to start receiver com.google.android.gms.measurement.AppMeasurementReceiver: java.lang.SecurityException: Neither user 10182 nor current process has android.permission.WAKE_LOCK. 
+0

這種技術適用於我。也適用於不在Manifest但在上載時顯示的新權限。 – Masum

+2

這是一個很棒的答案。如果Google能記錄如何避免使用喚醒鎖定權限,那將是一件好事。 – henry000

+0

真棒回答! tnx –

2

刪除WAKE_LOCK時,還要刪除AnalyticsReceiver和AnalyticsService。

這樣寫上這個網站。 http://coffeee.hatenablog.com/entry/2017/11/26/035828

  1. 開放的AndroidManifest.xml
  2. 單擊 「Marged清單」 Merged Manifest
  3. 的標籤右鍵點擊WAKE_LOCK和刪除 Remove WAKE_LOCK
  4. 刪除AnalyticsReceiver和AnalyticsService Remove Receiver and Service

好運氣

相關問題