2013-03-12 7 views
4

Mon application peut générer des fichiers CSV que je veux partager. J'utilise le type MIME text/comma_separated_values/csv, mais quand j'envoie le Intent le sélecteur n'est pas montré, je devine que mon appareil ne sait pas manipuler le dossier. Quel type dois-je utiliser?Android: partager le fichier CSV

Ceci est mon code:

Uri csv = lh.createDailyCSV(); 

    if(csv == null){ 
     Toast.makeText(this, getString(R.string.error_creating_csv), Toast.LENGTH_LONG).show(); 
    } 
    else{ 
     Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); 
     sharingIntent.setType("text/comma_separated_values/csv"); 
     sharingIntent.setData(csv); 
     startActivity(Intent.createChooser(sharingIntent, getResources().getText(R.string.send_to))); 
    } 

Je déclarais dans mon manifeste:

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

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

     <data android:mimeType="text/comma_separated_values/csv" /> 
    </intent-filter> 

Et je reçois l'exception

03-12 12:19:23.430: E/ActivityThread(24011): Activity com.android.internal.app.ChooserActivity has leaked IntentReceiver [email protected] that was originally registered here. Are you missing a call to unregisterReceiver()? 

J'ai lu cette exception se produit quand il est aucune ou seulement 1 option dans le sélecteur.

[EDIT]

J'ai changé la façon dont je joins les données à l'intention. Au lieu de sharingIntent.setData (csv) je:

sharingIntent.putExtra(Intent.EXTRA_STREAM, csv); 

Et maintenant, le chooser fonctionne très bien, mais si je tente d'envoyer le fichier par e-mail que je reçois une erreur: Le fichier ne peut être affichée.

[/ EDIT]

+0

L ' « exception » est pas une exception (au moins pas dans votre application) et sans rapport avec le problème que vous avez. –

+0

Après votre modification: Veuillez préciser si vous souhaitez envoyer le fichier par courrier électronique ou le partager avec d'autres applications, parmi lesquelles des applications potentiellement e-mail. –

Répondre

10

Le type MIME correct serait text/csv. Si cela ne fonctionne pas, vous pouvez utiliser text/plain qui permettra à l'utilisateur de choisir parmi une potentiellement beaucoup d'applications, y compris Evernote etc.

Mise à jour Après la mise à jour, il semble que vous ne voulez pas pour "partager" le fichier avec d'autres applications arbitraires, mais seulement l'envoyer par e-mail? Précisez s'il vous plaît.

+0

Je veux être en mesure de partager le fichier de toutes les manières possibles, j'ai juste utilisé l'e-mail pour vérifier si cela fonctionnait avec l'un des choix. L'erreur que j'ai placée dans l'édition était parce que j'ai créé le fichier en utilisant MODE_PRIVATE, si j'utilise WORLD_READABLE et text/csv cela fonctionne très bien. Merci! –

+0

@ClassStacker: Aucune de vos suggestions ne fonctionne pour moi. Essayé avec 'text/plain' et' text/csv'. Avec '*/*' cela fonctionne, bien que ... –

+4

@ClassStacker: En fait, ce qui a fonctionné pour moi est 'text/comma-separated-values' –

0

Dans mon cas, les travaux suivants Goo:

intent.setType("text/*"); 
+0

L'utilisation de 'text/*' dans ce cas est souvent indésirable. Je suppose que vous n'avez pas beaucoup d'applications installées sur votre système de test.Sinon, vous auriez remarqué que le choix des applications traitant de cela (quand elles ne le font pas) devient un peu long. –

Questions connexes