2

action_battery_lowマニフェストから解雇されると思ったので、解雇することはできますか?

これが私のマニフェストです:

<reciever android:name=".BatteryReciever">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.BATTERY_LOW"/>
    </intent-filter>
</reciever>

しかし、システムからバッテリー低下の警告が表示されても、起動することはありません。これは明示的にのみ発生させることができますか?

4

5 に答える 5

16

元の質問では、受信者がインテントを受信しないと述べています。これは、レシーバーが<reciever>ではなくとして宣言されているため<receiver>です。レシーバー要素が正しく宣言されていれば、機能していたはずです。

もう 1 つの主な混乱の原因は、Android のドキュメントでと が誤って参照"android.intent.action.ACTION_BATTERY_LOW"されていること"android.intent.action.ACTION_BATTERY_OKAY"です。このドキュメント エラーには既存のAndroid の問題がありますが、その問題に関するコメントの一部は誤解を招くものであることに注意してください。

代わりに、レシーバーのアクションは と でなければなりませ"android.intent.action.BATTERY_LOW""android.intent.action.BATTERY_OKAY"。これらのアクションを Java ソースから参照する場合、正しく定義されている定数android.content.Intent.ACTION_BATTERY_LOWおよびandroid.content.Intent.ACTION_BATTERY_OKAYを使用できます。

残念ながら、Reto Meier はA Deep Dive Into Locationのアクションも誤って定義しています。これについても問題が提起されています。

于 2013-09-22T16:50:26.473 に答える
2

私自身のテストから、GeoBio Boo と同じ問題と解決策に出くわしました。

しかし、コードを詳しく見てみると、ドキュメントで説明されているように、アクション android.intent.action.ACTION_BATTERY_LOW でフィルタリングしていることに気付きました: https://developer.android.com/training/monitoring-device-state/ battery-monitoring.html

実際には、アクションは android.intent.action.BATTERY_LOW (ACTION_ なし) です。この変更を行うと、受信機をマニフェストに登録し、イベントを正常に受信できました (エミュレーターの電力容量コマンドでテスト済み)。

于 2013-05-14T19:17:30.613 に答える
1

プログラムで に登録する必要がありますACTION_BATTERY_LOWAndroidManifest.xmlこれを理解するのに非常に長い時間を費やしましたが、に登録してもうまくいかないことに気付きました。

つまり、 onResume() または onCreate() 呼び出しで: registerReceiver(receiver, new IntentFilter(Intent.ACTION_BATTERY_LOW));

BATTERY_STATS許可は必要ありません。

于 2012-09-10T09:25:07.577 に答える
1

この回答の許可の提案を無視してください。それは正しくありません。

BATTERY_LOWアクションをキャッチするために、リクエスト許可が必要な場合があります。<uses-permission android:name="android.permission.BATTERY_STATS"/>マニフェストに追加してみてください。

また、次のように、同じインテント フィルター内に複数のアクションを配置できます。

<reciever android:name=".BatteryReciever">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <action android:name="android.intent.action.BATTERY_LOW"/>
    </intent-filter>
</reciever>
于 2011-03-22T15:38:10.763 に答える