2011-03-29 5 views
9

브로드 캐스트 리시버를 작동 시키려고합니다. 가능한 한 단순해야, 나는이처럼 내 매니페스트이 있습니다Android 브로드 캐스트 리시버가 작동하지 않습니다.

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.mytest.intentRec" android:versionCode="1" 
    android:versionName="1.0"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name" 
     android:debuggable="true"> 
     <activity android:name=".mainAct" android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <receiver android:name="com.mytest.intentRec.MyIntentRec" 
        android:enabled="true" > 
     </receiver> 
    </application> 
    <uses-sdk android:minSdkVersion="7" /> 
</manifest> 

내가이 주요 활동을 mainAct이 볼 수 있듯이,이 한 번 시작 브로드 캐스트 전송을 제외한 아무것도하지 않는다 :

public class mainAct extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     this.sendBroadcast(new Intent()); 
    } 
} 

및 나는 그것이 수만큼 간단 클래스 MyIntentRec을 가지고 :

public class MyIntentRec extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.v("IntentRec", "got it"); 
    } 
} 

내가 기대하는 것은 그 나는 방송이 전송되고 포착되고 및 로그 항목이 writte 것을 내 응용 프로그램을 시작할 때 엔. 로그 항목이 표시되지 않으며 오류가 표시되지 않습니다. 매니 페스트에 오류가 있거나 브로드 캐스트를 보내는 중입니다. 방금 빈 의도를 만들었습니다. 특정 속성에 대한 의도가 필요합니까?

답변

7

하십시오 setClass,

EX :

무슨 뜻인지입니다
public class mainAct extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Intent i=new Intent("any string"); 
     i.setClass(this, MyIntentRec.class); 
     this.sendBroadcast(i); 
    } 
} 

"어떤 필터의 부재는 만 정확한 클래스 이름을 지정 의도 객체에 의해 호출 될 수 있다는 것을 의미한다 . "

[이전 답변]
매니페스트에 필요한 동작을 등록해야합니다.
예 :

<receiver android:name="com.mytest.intentRec.MyIntentRec" android:enabled="true" > 
     <intent-filter> 
      <action android:name="your.intent" /> 
     </intent-filter> 
    </receiver> 

이 보내,

this.sendBroadcast(new Intent("your.intent")); 
+0

이것은 잘 동작한다. 그러나 위의 의견에 게시 된대로. 의도 필터가 필요하지 않습니다. 의도 필터없이 어떻게해야합니까? – AndyAndroid

1

new Intent();을 만드는 것은 불충분합니다. 당신은 어떤 행동으로 그것을 지정해야합니다. 또한 매니페스트에서 특정 액션에 대한 인 텐트 필터를 지정해야합니다. 자세한 내용은 herehere을 참조하십시오.

+0

텐트 필터는 안드로이드를 참조하십시오. – AndyAndroid

1

BroadcastReceiver에 대한 매니페스트에서 의도 필터를 정의하지 않았습니다. 사용자 지정 작업 유형에 대해 하나를 지정하십시오. 또한 시작시 사용자가 의도 한 행동 유형을 사용자가 의도 한 행동 유형으로 정의해야합니다. 당신의 의도에 대한

+0

인 텐트 필터에 대한 위의 주석을 참조하십시오. – AndyAndroid

+0

필터를 사용하지 않으려는 경우 인 텐트를 보내려는 구성 요소를 인 텐트의 속성에 명시 적으로 지정해야합니다. 당신은 당신의 코드에서 그렇게하지 않습니다. –

+0

어쩌면 내가 몰랐기 때문에 ... 어떻게 된 건지 모르겠다. 나는 여전히 모른다. ... – AndyAndroid

1

는 행동이 리시버는 매니페스트에 잡을해야하는지 지정하십시오. 당신 같은이 작업을 수행 할 수 있습니다 수출 : http://developer.android.com/guide/topics/manifest/receiver-element.html 내가 할 필요가 없습니다에 따라

<receiver android:name="com.mytest.intentRec.MyIntentRec"> 
    <intent-filter> 
     <action android:name="android.intent.action.MEDIA_BUTTON" /> 
    </intent-filter> 
</receiver> 
관련 문제