2013-05-07 1 views
5

은 내가 PlAY_FINISHED 조치를받을 수의 AndroidManifest.xml에서 수신기를 정의하고, 다른 파일에 그 방송 수신기에 의도를 보내 여기서 MyStaticString은 응용 프로그램의 모든 정적 문자열을 포함하는 클래스입니다. 이것이 올바른 방법입니까? 안드로이드 매니페스트 파일에 등록매니페스트 파일에 수신기를 브로드 캐스트하기 위해 사용자 지정 intentfilter를 등록하는 방법은 무엇입니까? <pre><code>public String PlAY_FINISHED = "play finished"; ... Intent in = new Intent(PlAY_FINISHED); this.service.sendBroadcast(in); </code></pre> <p></p> 그래서 내 매니페스트 파일에서, 내가 이런 식으로 설정 : 다음과 같은

<intent-filter> 
     <action android:name="com.mysite.appname.MyStaticString.PLAY_FINISHED" /> 
    </intent-filter> 

답변

4

.

<receiver android:name=".ReceiverDemo"> 
    <intent-filter> 
    <action android:name="marakana.intent.action.ReceiverDemo" /> 
    </intent-filter> 
</receiver> 

프로그램 등록.

... 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ... 
    // Create the receiver 
    receiver = new TimelineReceiver(); 
    filter = new IntentFilter(UpdaterService.NEW_STATUS_INTENT); 
} 

protected void onResume() { 
    super.onResume(); 
    super.registerReceiver(receiver, filter, 
     "com.marakana.yamba.SEND_TIMELINE_NOTIFICATIONS", null); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    unregisterReceiver(receiver); 
} 
... 

UPDATE : 여러 값 하나 개 이상의 값이 지정 될 수 있다면, 요소가 거의 항상 오히려 하나의 요소 내에서 여러 값을 나열하는 것보다, 반복한다.

<intent-filter . . . > 
    <action android:name="android.intent.action.EDIT" /> 
    <action android:name="android.intent.action.INSERT" /> 
    <action android:name="android.intent.action.DELETE" /> 
    . . . 
</intent-filter> 

UPDATE2 : 매니페스트에 인 텐트 필터의 android:name 그냥 임의의 AndroidManifest.xml

<manifest 
    package="com.marakana.android.lifecycle" 
    android:versionCode="1" 
    android:versionName="1.0" xmlns:android="http://schemas.android.com/apk/res/android"> 
    <uses-sdk 
    android:minSdkVersion="10" 
    android:targetSdkVersion="11" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> 

    <application 
    android:name=".ApplicationDemo" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name"> 
    <activity 
     android:name=".ActivityDemo" 
     android:label="@string/app_name"> 
     <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity android:name=".AnotherActivity"></activity> 

    <activity android:name=".SystemServicesDemo"></activity> 

    <service android:name=".ServiceDemo"></service> 

    <service android:name=".IntentServiceDemo"> 
     <intent-filter> 
     <action android:name="marakana.intent.action.IntentServiceDemo" /> 
     </intent-filter> 
    </service> 

    <receiver android:name=".ReceiverDemo"> 
     <intent-filter> 
     <action android:name="marakana.intent.action.ReceiverDemo" /> 
     </intent-filter> 
    </receiver> 

    <provider 
     android:name=".ProviderDemo" 
     android:authorities="com.marakana.android.lifecycle.providerdemo" /> 

    </application> 
</manifest> 
+0

나는 아직도 그것을 얻지 못한다, marakana.intent.action.ReceiverDemo는 무엇을 나타내는가? – Jolin

+0

위 내 대답을 업데이트했습니다. – NMALKO

+0

예.하지만 제 경우에는이 의도를 어떻게 받아야합니까? Intent in = New Intent (PlAY_FINISHED); 이것은 내가 알고 싶은 모든 것입니다 ... – Jolin

6

의 예 예를 들어, 인 텐트 필터는 여러 가지 작업을 나열 할 수 있습니다 문자열이며 Java 상수의 "경로"가 아닙니다. 문제는 코드의 문자열 상수가 "play finished"으로 정의되어 있으며 매니페스트에 지정한 이름이 "com.mysite.appname.MyStaticString.PLAY_FINISHED"과 일치하지 않습니다.

변수가 소위 중요하지 않습니다

public String PlAY_FINISHED = "com.mysite.appname.MyStaticString.PLAY_FINISHED"; 

, 또는 당신이 모든 변수에 문자열을 저장하는 경우에도해야한다. 또는 그 이름에 오타가 포함되어있을 수 있습니다.

"play finished"으로 변경할 수 있지만 사용자 지정 브로드 캐스트 작업은 시스템 전체에 적용되므로 다른 사람과의 충돌을 피하기 위해 앱의 패키지 이름으로 정규화되어야합니다. 앱.