2012-03-06 31 views
7

Tôi gặp sự cố. Iam sử dụng mã dưới đây để ngắt liên kết đến các ứng dụng của tôi nhưliên kết can thiệp vào ứng dụng của tôi

<intent-filter> 
    <action android:name="android.intent.action.VIEW"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <category android:name="android.intent.category.BROWSABLE"/> 
    <data android:scheme="http" android:host="twitter.com"/> 
    <data android:scheme="http" android:host="facebook.com"/> 
</intent-filter> 

Nhưng vấn đề là tôi cần phải thiết lập chương trình dữ liệu và máy chủ trong thời gian chạy ví dụ: tôi có thể thêm hoặc xóa các máy chủ khi chạy. SO xin vui lòng ai đó giúp tôi trong việc thiết lập giá trị của chương trình dữ liệu và máy chủ tại runtime.I đang sử dụng bên dưới mã nhưng nó không làm việc

IntentFilter filter = new IntentFilter(); 
filter.addAction("android.intent.action.VIEW"); 
filter.addCategory("android.intent.category.DEFAULT"); 
filter.addCategory("android.intent.category.BROWSABLE"); 
filter.addDataScheme("http"); 
filter.addDataAuthority("www.facebook.com", null); 
RecieveBroadcaster receiver = new RecieveBroadcaster(); 
registerReceiver(receiver, filter); 
+0

có thể anobody xin vui lòng giúp tôi – saba

+0

Tôi đã có câu trả lời này, vì vậy nếu ai cần giúp đỡ. ACTION.VIEW là một hành động hoạt động. Do đó chúng tôi không thể đăng ký nó với một máy thu phát sóng. Vì bộ lọc ý định không thể được đặt ở thời gian chạy (trừ trường hợp bộ thu phát sóng). Và bộ thu phát sóng có thể chỉ phát hành lại hành động phát sóng như android.intent.action.PHONE_STATE. Vì vậy, việc đăng ký ACTION> VIEW không được phép và người phát sóng sẽ không bao giờ phản hồi. – saba

Trả lời

4

Nói đúng ra, chuỗi tương ứng với ACTION_VIEW là một hành động hoạt động theo quy ước ; thực tế là bạn đặt nó vào phần tử intent-filter của một số activity trong tệp kê khai của bạn, làm cho là một hành động hoạt động! Hệ thống lắng nghe những điều này thay mặt cho ứng dụng của bạn, đó là lý do tại sao bạn không (không thể) lắng nghe chính họ. Phương pháp Context.startActivity() tạo các số này Intent s.

Quy tắc về độ phân giải mục đích thực sự xác định xem một số Intent cụ thể có khớp với bất kỳ IntentFilter giây nào không. Đối với mục đích hoạt động, có thể có nhiều kết quả phù hợp và thường hiển thị giao diện "Trình chọn", vì vậy người dùng có thể chọn mục tiêu.

Có ba Intent "luồng" không bao giờ vượt qua: startActivity(), sendBroadcast()startService(). Tất cả đều được khởi tạo thông qua các phương thức trong Context và mỗi mục tiêu có một mục tiêu cụ thể là Activity, BroadcastReceiverService.

Đó là một vấn đề đơn giản để thiết lập một BroadcastReceiver (không ReceiveBroadcaster đã thậm chí bạn thử mã mà?) Để có được những sự kiện mà bạn quan tâm, và sau đó sử dụng Context.startActivity() với Intent bạn muốn. Bạn thậm chí có thể sử dụng một hành động tùy chỉnh, vì vậy bạn biết nó đã được kích hoạt bởi người nhận, chứ không phải người dùng.

Câu hỏi duy nhất là: có sự kiện phát sóng mà bạn có thể sắp xếp để nhận không? Có thể có sự kiện hệ thống mà bạn có thể đăng ký hoặc bạn có thể tự tạo sự kiện tùy chỉnh qua Context.sendBroadcast().

Hãy nhớ rằng bạn có thể kiểm tra các hoạt động của bạn đã bắt đầu và "chuyển tiếp" hoặc sửa đổi Intent nếu nó không khớp chính xác với những gì bạn đang tìm kiếm. Khi bạn xác định chính xác, bạn không thể tự động thay đổi tập hợp hoạt động của IntentFilter s, vì vậy bạn sẽ phải kiểm tra máy chủ của mọi yêu cầu.

Hãy nhớ rằng bạn cũng có thể đăng ký người nhận trong tệp kê khai của mình và thực hiện tự động bởi hệ thống.

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