2012-08-13 18 views
7

Internet i stackoverflow zawierają kilka przykładów, jak pobrać plik z innej aplikacji na Androida (np. Użyć go jako załącznika do wiadomości e-mail), używając intencji ACTION_GET_CONTENT. Ale jaki rodzaj zajęć muszę wprowadzić, aby utworzyć aplikację dostarczającą treści dla zdarzenia ACTION_GET_CONTENT, tak jak mogę wybrać tę aplikację (np. Do wyboru załącznika wiadomości e-mail).Jak dostarczać treści do Intent.ACTION_GET_CONTENT

Czy ContentProvider jest właściwym rozwiązaniem? I co muszę dodać do mojego AndroidManifest.xml?

Odpowiedz

15

Po kilku godzinach wyszukiwania w Internecie znalazłem następujące rozwiązanie.

  1. Wykonaj intencje obsługi operacji. Zasięgu, należy użyć następującego lub bardziej konkretny kod:

    Uri resultUri = // the thing to return 
    Intent result = new Intent(); 
    result.setData(resultUri); 
    setResult(Activity.RESULT_OK, result); 
    finish(); 
    
  2. Dodaj poniższe linie do manifest:

    <activity 
        android:name="ActivityName" 
        android:label="Some label" > 
        <intent-filter> 
         <action android:name="android.intent.action.GET_CONTENT" /> 
         <category android:name="android.intent.category.OPENABLE" /> 
         <category android:name="android.intent.category.DEFAULT" /> 
         <data android:mimeType="*/*" /> 
        </intent-filter> 
        <intent-filter> 
         <action android:name="android.intent.action.PICK" /> 
         <category android:name="android.intent.category.DEFAULT" /> 
         <data android:mimeType="*/*" /> 
        </intent-filter> 
    </activity> 
    
+0

Proszę zobaczyć, że dawka nie działa w tym przypadku http://stackoverflow.com/questions/14151970/extra-slash-appends-with-file-uri -to-file-name-is-set-empty-in-file-input-contr –

+0

Wydaje się pracować dla mnie bez filtra intencji ACTION_PICK. Masz pomysł, w jakim przypadku ten filtr intencyjny wymaga reakcji? Wygląda na to, że działa tylko z intencją GET_CONTENT na obu wersjach przed/po KK. – cargo8

0

począwszy od poziomu api 18 przychodzące intencyjny może również EXTRA_ALLOW_MULTIPLE ustawiony na true i w takim przypadku możesz odesłać wynik więcej niż jednego pliku. Aby to zrobić musisz ustawić go jako ClipData:

resultIntent.setClipData(clipData) 
Powiązane problemy