2009-10-20 26 views
5

Tôi đang cố gắng đăng ký Bộ thu phát sóng để nhận các sự kiện phát sóng cho các sự kiện trọn gói. Sau đây là mã và người nhận của tôi trong tệp kê khai. Các bản ghi nhật ký không bao giờ xảy ra, nhưng tôi rõ ràng có thể nhìn thấy cùng một phát sóng bắn cho "HomeLoaders" (Launcher) các báo cáo gỡ lỗi. Tôi đang thiếu gì?Không thể nhận chương trình phát sóng cho mục đích PACKAGE

public class IntentListener extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     Log.i("INTENT LISTNER:", intent.getAction()); 
    } 
} 

<receiver android:name="IntentListener" android:enabled="true" android:exported="true"> 
    <intent-filter> 
     <data android:scheme="package"></data> 
     <action android:name="android.intent.action.PACKAGE_ADDED"></action> 
     <action android:name="android.intent.action.PACKAGE_ADDED"></action> 
     <action android:name="android.intent.action.PACKAGE_CHANGED"></action> 
    </intent-filter> 
</receiver> 
+1

lỗi có thể nằm trong IntentListener thay vì com.android.samples.app.IntentListener? – Zorb

Trả lời

4

Có thể là những Intent s không thể được nhận bởi các thành phần đã đăng ký trong biểu hiện, nhưng chỉ bằng cách thu đăng ký trong Java qua registerReceiver().

+0

Yea im khá chắc chắn rằng trường hợp, ra khỏi sự tò mò tại sao đây là trường hợp? Tôi không thấy bất kỳ tác động an ninh nào về điều này? –

+3

Như tôi đã nhận xét về một câu hỏi SO khác một ngày hoặc lâu hơn trước đây, Android không nhất thiết muốn khởi động một thành phần mới tất cả thời gian. Một trường hợp tôi biết là dành cho các sự kiện pin (ví dụ: ACTION_BATTERY_LOW). Có vẻ như SCREEN_OFF (và có thể SCREEN_ON) là những người khác. Nếu bạn nghĩ về nó, và bạn nhận được nó làm việc với registerReceiver(), kêu vang trở lại về vấn đề này. Tôi nghĩ rằng tôi cần phải bao gồm chủ đề này trong một bài đăng blog và/hoặc phần cuốn sách, và tiếc là danh sách các mục đích không có tệp kê khai không có giấy tờ. – CommonsWare

+1

Tôi muốn xem nơi tài liệu này được ghi lại. Tôi đã kiểm tra nguồn và kiểm tra duy nhất chống lại các chương trình phát sóng được bảo vệ này là quá trình không phải hệ thống không thể bắt đầu phát sóng. Tôi cũng đã thấy các gói khác trong thanh ghi nguồn cho mục đích này thông qua tệp kê khai. – James

0

Đây là biểu hiện của tôi, mà không

<category android:name="android.intent.category.DEFAULT" /> 

Ứng dụng của tôi phát hiện chỉ ứng dụng Android Market cài đặt, nhưng không loại bỏ. Bây giờ nó cũng nhận được các chương trình phát sóng ứng dụng không phải của Android Market.

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:label="@string/app_name" 
     android:name=".SomeActivity" > 
     <intent-filter > 
      <action android:name="android.intent.action.MAIN" /> 

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

    <receiver android:name="com.som.pakage.PackageInstallReceiver" > 
     <intent-filter > 
      <action android:name="android.intent.action.PACKAGE_ADDED" /> 
      <action android:name="android.intent.action.PACKAGE_REMOVED" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:scheme="package" /> 
     </intent-filter> 
    </receiver> 
</application> 
0

Ba intents cụ thể là,

Intent.ACTION_PACKAGE_ADDED 
Intent.ACTION_PACKAGE_REMOVED 
Intent.ACTION_PACKAGE_CHANGED 

khi phát sóng bởi hệ thống, có

Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT 

cờ thêm để chỉ những người nhận đã đăng ký sẽ nhận được chương trình phát sóng và không có thành phần quảng bá thu sẽ được khởi chạy. Tham khảo Intent và PackageManagerService lớp nguồn để biết thêm chi tiết.

Các vấn đề liên quan