2013-05-07 22 views
5

tôi đã xác định một máy thu trong AndroidManifest.xml để nhận một hành động PlAY_FINISHED, và trong tập tin khác tôi gửi một ý định mà thu phát sóng như sau:Cách đăng ký intentfilter tùy chỉnh cho bộ thu phát sóng trong tệp kê khai?

public String PlAY_FINISHED = "play finished"; 
... 
Intent in = new Intent(PlAY_FINISHED); 
this.service.sendBroadcast(in); 

như vậy trong file manifest của tôi, tôi đặt nó như thế này , nơi MyStaticString là một lớp có chứa tất cả các chuỗi tĩnh trong ứng dụng. Đây có phải là cách chính xác không?

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

Trả lời

4

Đăng ký trong tệp kê khai Android.

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

Đăng ký theo chương trình.

... 
@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: Nhiều giá trị Nếu có nhiều hơn một giá trị có thể được chỉ định, nguyên tố này là hầu như luôn luôn lặp đi lặp lại, chứ không phải là danh sách nhiều giá trị trong vòng một yếu tố duy nhất. Ví dụ, một bộ lọc ý định có thể liệt kê một vài hành động:

<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: Đó là một ví dụ về 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

Tôi vẫn chưa hiểu rõ, marakana.intent.action.ReceiverDemo đại diện cho điều gì? – Jolin

+0

Cập nhật câu trả lời của tôi ở trên. – NMALKO

+0

vâng .. nhưng trong trường hợp của tôi làm thế nào tôi nên nhận ý định này 'Intent in = new Intent (PLAY_FINISHED);'? đây là tất cả tôi muốn biết ... – Jolin

6

Các android:name của một bộ lọc ý định trong biểu hiện chỉ là một tùy ý chuỗi, không phải là "đường dẫn" đến một hằng số Java. Vấn đề là hằng số chuỗi của bạn trong mã được định nghĩa là "play finished", không khớp với tên "com.mysite.appname.MyStaticString.PLAY_FINISHED" mà bạn đã chỉ định trong tệp kê khai.

Nó phải là

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

Nó không có vấn đề gì biến được gọi, hoặc thậm chí nếu bạn lưu trữ các chuỗi trong một biến ở tất cả. Hoặc tên của nó có chứa lỗi đánh máy :)

Thay vào đó, bạn có thể thay đổi android:name trong tệp kê khai thành "play finished", nhưng hành động phát sóng tùy chỉnh trên toàn hệ thống để chúng đủ điều kiện với tên gói ứng dụng của bạn để tránh xung đột với ứng dụng.