2017-05-16 27 views
0

私は放送をしたい、受信機は放送を受信するはずですが、動作していません。
私は次のコードを持っている:放送受信機は受信していません

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="utilities.dip.com.checkbattlevelstackof"> 

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <service 
     android:name=".YourService" 
     android:enabled="true" 
     android:exported="false" 
     android:label="@string/app_name" > 
    </service> 

    <!-- Receivers --> 
    <receiver 
     android:name=".AlarmReceiver" 
     android:enabled="true" /> 
    <receiver 
     android:name=".BootReceiver" 
     android:enabled="true" 
     android:exported="true" > 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

受信機は次のとおりです。

package utilities.dip.com.checkbattlevelstackof; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 



public class BootReceiver extends BroadcastReceiver { 

    public static final String TAG = "BootReceiver"; 
    public static final String ACTION_BOOT = "android.intent.action.BOOT_COMPLETED"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equalsIgnoreCase(ACTION_BOOT)) { 
      // This intent action can only be set by the Android system after a boot 
      Log.d(TAG,"Received boot event"); 
      Intent monitorIntent = new Intent(context, YourService.class); 
      monitorIntent.putExtra(YourService.HANDLE_REBOOT, true); 
      context.startService(monitorIntent); 
     } 
     else{ 
      Log.d(TAG," Action received : " + intent.getAction()); 
     } 
    } 
} 

私はすべてのログを取得していない午前放送を作っています:

platform-tools $ ./adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.DEFAULT -n utilities.dip.com.checkbattlevelstackof/utilities.dip.com.checkbattlevelstackof.BootReceiver 
Broadcasting: Intent { act=android.intent.action.BOOT_COMPLETED cat=[android.intent.category.DEFAULT] cmp=utilities.dip.com.checkbattlevelstackof/.BootReceiver } 
Broadcast completed: result=0 

間違いである何を?

+0

if文を削除してください。マニフェストで特定のインテントフィルタを設定すると、クラス内で再度チェックする必要はありません。受信機のカテゴリを追加する必要もありません。 –

+0

完了、何も起こらなかった。チェックするだけで他にもあることを見てください。ログは生成されません。 – Dip

+0

許可のリクエストはどうですか? (あなたがapi> 22の場合) –

答えて

1

マニフェストの外側に宣言したからです。それは基本的に次のようになります。特に、デフォルトのAndroidアクションのためのアクション文字列を確認しながら

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

また、独自の定数を使用しないでください。 ACTION_BOOT定数を使用する代わりに、 "Intent.ACTION_BOOT_COMPLETED"を使用してください。

+1

ありがとう、働いている – Dip

1

アプリケーションタグ内に受信者&サービスを追加します。

関連する問題