2011-12-29 12 views
5

Używam:Dodanie działania widocznego tylko w określonych aplikacjach do ACTION_SEND?

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

podzielić obraz generowany w mojej aplikacji. Chciałbym dodać niestandardową akcję (zapisać obraz do galerii) do intencji stworzonej przez

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

Myślałam o dodanie działalność z zamiarem filtrem działania android.intent.action.SEND, ale uczyni moją aktywność widoczne i dostępne dla wszystkich aplikacji. Mógłbym zmienić setType ("image/jpeg") do setType ("image/*") i dodać

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

do intent-filter, ale uczyni moją aktywność widoczna dla wszystkich aplikacji, które prosi o obrazie/* .

Czy istnieje sposób na filtrowanie widoczności akcji według nazwy pakietu wywołującego (lub czegoś innego, co mogłoby odróżnić moją aplikację od innych)?

+0

Lepszym rozwiązaniem jest, aby rzucić swój własny oknem wyboru, zamieszkany przez własnego ręcznego rzeczy oraz wyniki wywołanie 'queryIntentActivities() 'from' PackageManager'. – CommonsWare

Odpowiedz

2

Android ma ładny rozwiązanie tego wymogu, sztuką jest 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

Dzięki! Spróbuję tego. –

Powiązane problemy