0

私はAndroidアプリで作業しています。通知バーにバッテリーに関する情報を投稿するだけです。アドバイスされたすべてのチュートリアルのように、このプロジェクトを開始しました。

  • BroadcastReceiverを作成しました。それはUIのものを処理します。
  • 次に、ACTION_BATTERY_CHANGED インテントのみをフィルタリングする IntentFilter を作成しました
  • 次に、IntentFilter と BroadcastReceiver インスタンスをメイン アクティビティの registerReceiver() メソッドに登録するだけです。

アクティビティ(2つを登録したもの)が停止するまで、それは本当にうまく機能します。つまり、電話の戻るボタンを押すと、onStop() または onDestroy() メソッドが呼び出されると仮定します。

私の質問は、アクティビティが終了した後に BroadcastReceiver を実行し、アプリを「強制的に閉じる」ときにのみ受信を停止するにはどうすればよいですか?

アップデート:

さて、以前の回答から、私がする必要があるのは、Activity からではなく、マニフェスト ファイルから BroadcastReciever を開始することだと思います。これは私がやろうとしたことですが、単に受信を開始しません:

<receiver android:name="com.battery.indicator.BatteryReciever" android:enabled="true" >
    <intent-filter>
        <action android:name="android.intent.action.BATTERY_CHANGED" ></action>
    </intent-filter> 
</receiver>

name 属性は、Reciever クラスへの全体のパッケージ パスです。アクション名は、Ec​​lipse のインテリセンスが見つけたものです。これらはすべて<application></application>xml の一部です。

私は何を間違っていますか?

4

3 に答える 3

2

サービスを作成し、受信者をマニフェストに登録します。その後、アプリが現在閉じていても、Android が起動してレシーバーを呼び出します。

于 2012-07-25T16:39:40.330 に答える
0

(コードではなく) マニフェストで BroadcastReceiver を宣言し、Boot の受信が完了すると、常に有効になります。

マニフェスト ファイルで次のようにします。

        <receiver android:name=".BootReceiver">  
         <intent-filter>  
             <action android:name="android.intent.action.BOOT_COMPLETED" />  
         </intent-filter>  
    </receiver>

注: これを行うには、次の権限が必要です。

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>  
于 2012-07-25T16:51:58.920 に答える
0

これが役立つかどうかはわかりませんが、マニフェストをセットアップする方法は次のとおりです。

<manifest xmlns:android="http://schemas.android.com./apk/res/android"
          package="com.namespace"
          versionCode, etc>

   //List permissions you use, looks like there is one for battery stats
   <uses-permission android:name="android.permission.BATTERY_STATS" />

   <application>
     <receiver android:name=".broadcast_recievers.BatteryReciever">
       <action android:name="android.intent.action.BATTERY_CHANGED" />
     </receiver>
   </application>
</manifest>

説明したい主な違いは、マニフェスト タグでプロジェクトの名前空間/パッケージを宣言し、レシーバー名でクラスへのパスを宣言することです。私の例では、com.namespace.broadcast_recievers にある BatteryReciever という名前のクラスがあります。

許可を含める必要があるかどうかを判断するには、調査を行う必要があります。This SO post は、そうしないことを示唆しています。

于 2012-07-25T19:34:59.030 に答える