2017-08-29 3 views
12

J'essaie d'ajouter mon application Android dans la liste Chooser en tant que client de messagerie. Cependant, il n'apparaît pas le long de l'application Gmail et K-9. Pour le tester, j'essaie de partager des données de chat de la fonctionnalité "Email chat" de la messagerie instantanée de Whatsapp (car elle ne montre que les applications de messagerie).Comment lister une application dans la liste de sélecteurs Android en tant que client de messagerie?

Je n'ai qu'une seule activité. Mon application est dans la liste des sélecteurs lorsque je partage des données de texte à partir du navigateur, mais pas lorsque je partage des données de messagerie de WhatsApp. J'ai essayé d'ajouter l'action d'intention suivante mon AndroidManifest.xml mais cela ne fonctionne pas.

 <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> 

De debug, je trouve que K-9 est en cours de lancement comme suit,

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 

J'ai aussi mis type = text/* dans mon intention filtre, mais mon application ne figure pas. Une idée pourquoi? Que puis-je faire pour le lister?

+0

Lien vers mon code pour référence. https://github.com/sunilshahu/DataReceiver –

+2

Avez-vous essayé ceci: https: // stackoverflow.com/A/6796128/1048340? –

Répondre

1

Essayez ceci: - J'espère que cela fonctionne

<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

Comme vous pouvez le voir, mon deuxième filtre d'intention est exactement le même que vous. Cependant remplacé le vôtre avec le mien juste pour vérifier et cela ne fonctionne pas. Toute autre suggestion serait une aide précieuse. –

1

essayer cette 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

J'ai tiré ces filtres d'intention tout droit sorti de Gmail APK .

Ce filtre d'intention gère les liens 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> 

Celui-ci permet de traiter mailto intentions découverts via NFC.

<intent-filter> 

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

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

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

Celui-ci permet d'ouvrir votre application en réponse à envoyer des intentions et "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> 

Celui-ci permet de send multiple items (represented by Uris) à la fois.

<intent-filter> 

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

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

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

Il y en avait deux autres spécifiques au domaine Gmail qui ne sont pas pertinents et que j'ai omis.

Pour vous vérifier:

  1. Obtenir un APK Gmail.
  2. Dans Android Studio allez dans Menu principal> Construire> Analyser APK ...
  3. Trouvez et ouvrez l'APK Gmail en utilisant le sélecteur de fichiers.
  4. Sélectionnez AndroidManifest.xml dans l'analyseur APK.

Le traitement des intentions une fois qu'elles ont été livrées à votre application est hors de la portée.