2017-08-29 75 views
12

Próbuję dodać moją aplikację Android na liście Chooser jako klienta poczty e-mail. Jednak nie wyświetla się obok aplikacji Gmail i K-9. Aby to przetestować, próbuję udostępnić dane czatu z funkcji czatu "czat e-mail" aplikacji WhatsApp (ponieważ wyświetlają tylko aplikacje e-mail).Jak wyświetlić listę aplikacji w liście wyboru Androida jako klienta poczty e-mail?

Mam tylko jedno działanie. Moja aplikacja znajduje się na liście wyboru, gdy udostępniam dane tekstowe z przeglądarki, ale nie w przypadku udostępniania danych e-maili z Whatsapp. Próbowałem dodać następujące działanie intencyjne do mojego pliku AndroidManifest.xml, ale nie działa.

 <intent-filter> 
      <action android:name="android.intent.action.SEND_MULTIPLE" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:mimeType="text/*" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.SEND" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:mimeType="image/*" /> 
      <data android:mimeType="text/*" /> 
     </intent-filter> 

Od debugowania, stwierdziliśmy, że K-9 jest uruchomienie w następujący

08-30 00:27:28.064 489-2302/? E/ANDR-PERF-MPCTL: Invalid profile no. 0, total profiles 0 only 
08-30 00:27:28.064 1685-2620/? I/ActivityManager: START u0 {act=android.intent.action.CHOOSER cmp=android/com.android.internal.app.ChooserActivity (has extras)} from uid 10158 on display 0 
08-30 00:27:28.064 489-24642/? I/Thermal-Lib: Thermal-Lib-Client: Client request sent 
08-30 00:27:28.064 753-1089/? I/ThermalEngine: Thermal-Server: Thermal received msg from override 
08-30 00:27:28.077 1685-1997/? W/InputMethodManagerService: Window already focused, ignoring focus gain of: [email protected] attribute=null, token = [email protected] 
08-30 00:27:28.177 1685-1749/? I/LaunchCheckinHandler: Displayed android/com.android.internal.app.ChooserActivity,wp,ca,96 
08-30 00:27:28.177 1685-1749/? I/ActivityManager: Displayed android/com.android.internal.app.ChooserActivity: +96ms 
08-30 00:27:28.244 1685-1845/? D/MotoSensors: ALS 41 
08-30 00:27:28.253 1685-1694/? I/art: Background partial concurrent mark sweep GC freed 57795(3MB) AllocSpace objects, 27(1060KB) LOS objects, 30% free, 36MB/52MB, paused 2.148ms total 160.734ms 
08-30 00:27:28.306 9905-9979/? D/OpenGLRenderer: endAllActiveAnimators on 0x8ea64500 (aq$a) with handle 0x8ee25d30 
08-30 00:27:28.307 1685-2108/? I/WindowManager: Destroying surface Surface(name=PopupWindow:dcadc74) called by com.android.server.wm.WindowStateAnimator.destroySurface:2067 com.android.server.wm.WindowStateAnimator.destroySurfaceLocked:896 com.android.server.wm.WindowState.removeLocked:1457 com.android.server.wm.WindowManagerService.removeWindowInnerLocked:2546 com.android.server.wm.WindowManagerService.removeWindowLocked:2504 com.android.server.wm.WindowManagerService.removeWindowLocked:2373 com.android.server.wm.WindowManagerService.removeWindow:2364 com.android.server.wm.Session.remove:193 
08-30 00:27:28.553 585-645/? I/SFPerfTracer:  triggers: (rate: 14:1327) (1008781 sw vsyncs) (0 skipped) (42:3589810 vsyncs) (44:4764825) 
08-30 00:27:28.707 585-585/? I/SFPerfTracer:  triggers: (rate: 2783:527680) (compose: 1:238) (post: 3:2376) (render: 6:1240) (3:1974551 frames) (4:2171862) 
08-30 00:27:28.707 585-585/? D/SFPerfTracer:  layers: (5:12) (DimLayerController/Stack=0 (0xae241400): 1:9571) (StatusBar (0xae243c00): 4:397491) (com.android.systemui.ImageWallpaper (0xacfb7400): 4:264193)* (Sprite (0xae23ec00): 0:863)* (animation background stackId=1 (0xacfb9c00): 0:1482)* (animation background stackId=0 (0xacfd9c00): 0:12)* (NavigationBar (0xacfb6000): 4:252) (com.whatsapp/com.whatsapp.Conversation (0xacfd6000): 4:230) (PopupWindow:e9ad06f (0xacfb8800): 0:44)- (PopupWindow:dcadc74 (0xacfd7400): 0:44)- (Initializing... (0xacfb8800): 0:2)- (android/com.android.internal.app.ChooserActivity (0xacfb8800): 4:28) 
08-30 00:27:29.343 1685-2562/? I/ActivityManager: START u0 {act=android.intent.action.SEND_MULTIPLE typ=text/* flg=0xb080001 pkg=com.fsck.k9 cmp=com.fsck.k9/.activity.MessageCompose clip={text/* U:content://com.whatsapp.fileprovider/external/WhatsApp/.Shared/WhatsApp%20Chat%20with%20%E2%80%AA%2B91%2096019%2049744%E2%80%AC.txt} (has extras)} from uid 10158 on display 0 

ja również umieścić type = text/* w moim zamiarem filtrem, jednak moja aplikacja nie jest na liście. Każdy pomysł, dlaczego? Co mogę zrobić, aby go wymienić?

+0

Link do mojego kodu w celach informacyjnych. https://github.com/sunilshahu/DataReceiver –

+2

Czy próbowałeś tego: https: // stackoverflow.com/a/6796128/1048340? –

Odpowiedz

1

Spróbuj tego: - Mam nadzieję, że to działa

<intent-filter> 
    <action android:name="android.intent.action.SEND"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <data android:mimeType="image/*"/> 
    <data android:mimeType="text/plain"/> 
</intent-filter> 

+0

Jak widać mój drugi filtr intencji jest taki sam jak Ty. Jednak zamieniłem twoje na moje tylko po to, żeby je zweryfikować i to nie działa. Każda inna sugestia byłaby wielką pomocą. –

1

spróbować tej reference

<intent-filter> 
    <action android:name="android.intent.action.VIEW"/> 
    <action android:name="android.intent.action.SENDTO"/> 
    <data android:scheme="mailto"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <category android:name="android.intent.category.BROWSABLE"/> 
</intent-filter> 
<intent-filter android:label="@string/app_name"> 
    <action android:name="android.intent.action.SEND"/> 
    <data android:mimeType="*/*"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
</intent-filter> 
<intent-filter android:label="@string/app_name"> 
    <action android:name="android.intent.action.SEND_MULTIPLE"/> 
    <data android:mimeType="*/*"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
</intent-filter> 
2

Wyciągnąłem te zamiarom filtry prosto z Gmaila APK .

Ten filtr intencyjny obsługuje łącza mailto.

<intent-filter> 

    <action 
     android:name="android.intent.action.SENDTO" /> 

    <action 
     android:name="android.intent.action.VIEW" /> 

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

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

    <data 
     android:scheme="mailto" /> 
</intent-filter> 

Ten pozwala przetwarzać intencje odkryte za pośrednictwem NFC.

<intent-filter> 

    <action 
     android:name="android.nfc.action.NDEF_DISCOVERED" /> 

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

    <data 
     android:scheme="mailto" /> 
</intent-filter> 

Ten pozwala otworzyć aplikację w odpowiedzi na WYŚLIJ zamiary i "Ok Google, note to self" voice command.

<intent-filter> 

    <action 
     android:name="android.intent.action.SEND" /> 

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

    <category 
     android:name="com.google.android.voicesearch.SELF_NOTE" /> 

    <data 
     android:mimeType="*/*" /> 
</intent-filter> 

Ten pozwala send multiple items (represented by Uris) naraz.

<intent-filter> 

    <action 
     android:name="android.intent.action.SEND_MULTIPLE" /> 

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

    <data 
     android:mimeType="*/*" /> 
</intent-filter> 

Istnieją dwa specyficzne dla domeny Gmail, które nie są istotne i zostały pominięte.

Aby sprawdzić siebie:

  1. Uzyskanie Gmail APK.
  2. W Android Studio wybierz kolejno Menu główne> Kompiluj> Analizuj APK ...
  3. Znajdź i otwórz plik APK Gmaila za pomocą selektora plików.
  4. Wybierz AndroidManifest.xml w APK Analyzer.

Przetwarzanie intencji po ich dostarczeniu do aplikacji jest poza zakresem.