2011-12-29 14 views
5

Tôi đang sử dụng:Thêm hành động chỉ hiển thị trong các ứng dụng cụ thể cho ACTION_SEND?

Intent i = new Intent(Intent.ACTION_SEND); 
i.setType("image/jpeg"); 
(...) 

để chia sẻ hình ảnh được tạo trong ứng dụng của tôi. Tôi muốn thêm hành động tùy chỉnh (lưu ảnh vào thư viện) với ý định tạo ra bởi

Intent.createChooser(i, "..."); 

Tôi đã suy nghĩ về việc thêm hoạt động với mục đích lọc cho android.intent.action.SEND hành động, nhưng điều này sẽ làm cho hoạt động của tôi hiển thị và có sẵn cho tất cả các ứng dụng. Tôi có thể thay đổi setType ("image/jpeg") để setType ("image/*") và thêm

<data android:mimeType="image/foobar"> 

để ý bộ lọc, nhưng điều này sẽ làm cho hoạt động của tôi có thể nhìn thấy tất cả các ứng dụng mà yêu cầu image/* .

Có cách nào để lọc hiển thị hành động theo tên gói người gọi (hoặc cái gì khác, có thể phân biệt ứng dụng của tôi với người khác) không?

+0

Các giải pháp tốt hơn là để cuộn thoại của riêng bạn chooser, dân cư thông qua các công cụ thủ công của riêng bạn và kết quả của gọi 'queryIntentActivities() 'từ' PackageManager'. – CommonsWare

Trả lời

2

Android có một giải pháp tốt đẹp cho yêu cầu này, các trick là Intent.EXTRA_INITIAL_INTENTS:

Intent intent = new Intent(Intent.ACTION_SEND); 
intent.setType("image/jpeg"); 

List<Intent> myAddedIntents = new ArrayList<Intent>(); 
Intent myIntent = new Intent(...); 
myAddedIntents.add(myIntent); 

Intent chooserIntent = Intent.createChooser(intent, "Send via:"); 
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, 
     myAddedIntents.toArray(new Parcelable[] {})); 

startActivity(chooserIntent); 
+0

Cảm ơn! Tôi sẽ cố gắng làm điều đó. –

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