2017-05-16 12 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> 

수신기는 다음과 같습니다 실수가

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 

무엇 :

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()); 
     } 
    } 
} 

는 내가 모든 로그를 받고 있지 않다 방송을하고 때 ?

+0

if 문을 제거하십시오. 매니 페스트에서 특정 인 텐트 필터를 설정할 때 클래스 내부에서 다시 검사 할 필요가 없습니다. 또한 수신기에 카테고리를 추가 할 필요가 없습니다. –

+0

완료, 아무 일도 없었습니다. 확인을 위해 다른 사람도 있습니다. 로그가 생성되지 않았습니다. – Dip

+0

허가 요청은 어떻게하나요? (api> 22 인 경우) –

답변

1

외부인이 매니페스트에서 신고했기 때문입니다. 그것은 기본적으로 다음과 같이한다 : 특히 기본 안드로이드 행동에 대한 조치 문자열을 확인하면서

<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

응용 프로그램 태그 안에 수신기 & 서비스를 추가하십시오.