Ce que je veux : Pouvoir envoyer mon fichier personnalisé par mail et l'importer avec mon application depuis le bouton de prévisualisation dans GMail ou lors de son ouverture dans un navigateur de fichiers.
Ce que je sais: J'ai lu beaucoup de gestionnaires de type mime personnalisés, que Android ne se soucie pas de l'extension de fichier, etc., mais comment créer le mime taper pour mon fichier personnalisé?
La question: Dois-je être un fournisseur de contenu? Je veux juste importer des fichiers (à partir de la sauvegarde) sans rien fournir. J'ai vu des gens avoir des gestionnaires pour "application/abc" disant que cela fonctionnait bien, mais comment ajouter cette connexion pour mon fichier "myFile.abc" et le type mime?
Une certaine direction comment enregistrer/mapper les types de mime personnalisés serait appréciée! :)
Autant que je sache, les types mime sont assez flexibles (j'ai créé le mien comme application/whatever
) Et ils sont immédiatement acceptés par Android, dès la version 2.1 de Dalvik. Pour les gérer correctement, j'ai ajouté ce filtre d'intention:
<intent-filter>
<action Android:name="Android.intent.action.VIEW"/>
<category Android:name="Android.intent.category.DEFAULT"/>
<data Android:mimeType="application/whatever" />
</intent-filter>
Il y a cependant une mise en garde. Même si j'ai toujours défini le type de l'intention d'envoi avec intent.setType("application/whatever");
, sur certains téléphones, j'ai vu les données réelles à l'arrivée comme application/octet
(Pour voir la valeur, j'ai assigné l'intention entrante et inspecté sa valeur directement Intent currentIntent = getIntent();
). Le récepteur Android ne savait pas quoi faire avec les données entrantes et me l'a dit. J'ai donc ajouté
<intent-filter>
<action Android:name="Android.intent.action.VIEW"/>
<category Android:name="Android.intent.category.DEFAULT"/>
<data Android:mimeType="application/octet-stream" />
</intent-filter>
Cette approche pourrait bien sûr être gênante, mais le problème avec Gmail est au moins qu'il n'écrit pas nécessairement le fichier avec le nom tel qu'il entre, ce qui rend inutile tout chemin que je choisis de définir. Et au moins avec un octet-stream
Entrant, vous savez que ce ne sont pas les données spécifiques d'une application que vous volez ... Néanmoins, vous devez valider les données par la suite et ne pas simplement supposer qu'elles sont valides pour votre application.
<activity
Android:name="MainActivity"
Android:label="@string/app_name"
Android:theme="@Android:style/Theme.NoTitleBar.Fullscreen" >
<intent-filter>
<action Android:name="Android.intent.action.VIEW" />
<category Android:name="Android.intent.category.DEFAULT" />
<category Android:name="Android.intent.category.BROWSABLE" />
<data Android:Host="{your mime}.com"
Android:scheme="http" >
</data>
</intent-filter>
</activity>
<!--
Android:scheme="http" will make Android "think" thats this is a link
-->
Maintenant, lorsque vous recevez un sms avec le texte "http://{your mime}.com"
ou en cliquant sur le lien sur le Web avec ce texte, votre activité (MainActivity) s'exécutera.
Vous pouvez également ajouter des paramètres:
text = "http://{your mime}.com/?number=111";
Ensuite, dans les méthodes onCreate () ou onResume (), vous ajouterez:
Intent intentURI = getIntent();
Uri uri = null;
String receivedNum = "";
Log.d("TAG", "intent= "+intentURI);
if (Intent.ACTION_VIEW.equals(intentURI.getAction())) {
if (intentURI!=null){
uri = intentURI.getData();
Log.d("TAG", "uri= "+uri);
}
if (uri!=null)
receivedNum = uri.getQueryParameter("number");
}
Non testé, mais quelque chose comme ça devrait fonctionner. Mettez-le dans votre AndroidManifest.xml avec l'activité que vous souhaitez ouvrir le fichier:
<activity name=".ActivityHere">
<intent-filter>
<action Android:name="Android.intent.action.VIEW" />
<category Android:name="Android.intent.category.DEFAULT" />
<category Android:name="Android.intent.category.BROWSABLE" />
<data Android:scheme="file" />
<data Android:mimeType="mimeTypeHere" />
</intent-filter>
</activity>
J'ai ajouté un type mime personnalisé dans Android. Après une longue recherche, j'ai décidé de partager ceci avec vous, j'ai testé ceci sur tous les Android cell téléphone comprenant Android 9.0.