2017-09-14 14 views
8

デベロッパーコンソールでAndroidアプリを起動すると、アプリが「目を覚ましました」という警告が表示されます。 documentationでは、あなたのアプリがバックグラウンドで実行されている間、それは(あなたのアプリケーションのどの部分がユーザーに表示されていない)長時間保持されている場合、部分ウェイクロックがスタックになりAndroid vitals - 目覚ましロックとフォアグラウンドサービスを停止しました

として説明しています。

アプリがバックグラウンドで再生されている(オーディオ再生中)のは本当ですが、私はフォアグラウンドサービスを使用しており、ロック通知が表示されています。その後documentation

あなたのアプリの一部がフォアグラウンドに残っていることを確認します

を読むことができます。たとえば、サービスを実行する必要がある場合は、代わりにフォアグラウンドサービスを開始します。これにより、アプリがまだ実行中であることがユーザーに視覚的に示されます。

しかし、それは真実ではないようです。 Androidバイタルはそのアプリを無視してフォアグラウンドサービスを提供していますか?誰も同じような経験をしていますか?

EDIT:あなたがロックを解除すると、システムは、数えることができるので、ここでコードが私のAudioService

PowerManager.WakeLock mWakeLock = null; 
boolean mHasWakeLock; 

void acquireLocks(){ 

    if (!mHasWakeLock) { 
     final PowerManager pm = (PowerManager) 
     context.getSystemService(Context.POWER_SERVICE); 
     mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,TAG); 
     mWakeLock.setReferenceCounted(false); 
     mWakeLock.acquire(); 
     mHasWakeLock = true; 
    } 
} 

void releaseLocks() { 
    if (mWakeLock != null) { 
     mWakeLock.release(); 
     mWakeLock = null; 
    } 
    mHasWakeLock = false; 
} 

void play(){ 
    startForeground(NOTIFICATION_ID, notification); 
    acquireLocks(); 
} 

void stop(){ 
    releaseLocks(); 
    stopForeground(true); 
} 
+0

ウォークロックとフォアグラウンドサービスに関連するコードを追加してください。 –

+0

同じ問題が発生しました。アプリは部分的な起床ロックを必要とし、ユーザーはそれも必要とします。しかし、Googleはそう考えていません...あなたが解決策を見つけたら、plsはそれを共有します(私はsetReferenceCountedを使用しません)ありがとう! – Trancer

答えて

2

私が考えるからである、問題は、trueであるべき

mWakeLock.setReferenceCounted(false); 

です。 あなたのケースでは、あなたはそれを解放しているかもしれませんが、システムはそれを「見」ません。 これはバイタルを混乱させる可能性があります。

このフラグをtrueに設定して試してみてください。 これが役立つことを願っています。

+0

私はsetReferenceCounted falseが安全だと思います。これは、リリースを一度呼び出すだけで十分であることを意味し、取得を何回呼び出したかは関係ありません。しかし、この場合、私はロックを持っているかどうかをチェックするフラグを使用します。 https://developer.android.com/reference/android/os/PowerManager.WakeLock.html#setReferenceCounted(boolean) – vandzi

関連する問題