2011-04-21 34 views
33

Lo que quiero: Para poder enviar mi archivo personalizado por correo e importarlo con mi aplicación desde el botón de vista previa en GMail o al abrirlo en un buscador de archivos.¿Cómo agregar un tipo de mime personalizado?

Lo que sé: He leído muchos manejadores de tipo mime personalizados, ese android no se preocupa por la extensión de archivos, etc., pero ¿cómo crear el tipo de mime para mi archivo personalizado?

La pregunta: ¿Debo ser proveedor de contenido? Solo quiero importar archivos (desde una copia de seguridad), no proporciono nada. He visto personas que tienen controladores para "application/abc" diciendo que está funcionando bien, pero ¿cómo agregar esa conexión para mi archivo "myFile.abc" y el tipo de mime?

¡Se aplicará alguna indicación sobre cómo registrar/asignar tipos de mime personalizados! :)

+0

Intent-Filter debería ser lo suficientemente bueno. Eche un vistazo a http://stackoverflow.com/questions/1733195/android-intent-filter-for-a-particular-file-extension – pinxue

+0

Realmente no necesita crear su propio mimeType. Puedes usar alguna extensión de archivo. Mire en esta respuesta https://stackoverflow.com/a/2062112/1298357. ¡Es muy útil! –

Respuesta

2

No probado, pero algo así debería funcionar. Ponerlo en su AndroidManifest.xml con la actividad que desea abrir el archivo:

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

¿podría echar un vistazo a esta pregunta? Es algo relacionado con la pregunta en este hilo http://stackoverflow.com/questions/16441330/declaring-mime-type-for-a-custom-file-that-is-to-be-sent-via-bluetooth http://stackoverflow.com/questions/16413498/blue-tooth-file-not- – neerajDorle

+1

-1 porque no responde la pregunta. Mackan preguntó cómo registrar un tipo de mimo personalizado con el sistema y está describiendo cómo abrir una actividad para un tipo de mimo ya registrado. – sven

-2

Registra un tipo MIME personalizado utilizando android.webkit.MimeTypeMap

+1

¿Puedes dar un ejemplo de cómo hacerlo? –

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

Ahora, al recibir una sms con el texto "http://{your mime}.com" o haciendo clic en el enlace en la web con este texto, se ejecutará su actividad (MainActivity).

También puede añadir parámetros:

text = "http://{your mime}.com/?number=111"; 

Luego, en onCreate() o onResume() métodos va a añadir:

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");  
} 
+0

¿podría echar un vistazo a esta pregunta? Es algo relacionado con la pregunta en este hilo http://stackoverflow.com/questions/16441330/declaring-mime-type-for-a-custom-file-that-is-to-be-sent-via-bluetooth http://stackoverflow.com/questions/16413498/blue-tooth-file-not- – neerajDorle

+0

Downvoted porque la pregunta se trata de registrar una extensión de archivo con un tipo MIME personalizado, no de cómo crear un filtro de intención personalizado (qué proporciona esta respuesta). – rsp1984

3

Por lo que yo puedo decir, tipos MIME son bastante flexible (creé el mío como application/whatever) y son aceptados inmediatamente por Android, desde la versión 2.1 de Dalvik. Para manejarlos correctamente, agregué este filtro de intención:

<intent-filter> 
    <action android:name="android.intent.action.VIEW"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <data android:mimeType="application/whatever" /> 
</intent-filter> 

Sin embargo, hay una advertencia. Aunque siempre configuré el tipo de Intento de envío con intent.setType("application/whatever");, en algunos teléfonos he visto los datos reales a la llegada como application/octet (para ver el valor, asigné el Intent entrante e inspeccioné su valor directamente Intent currentIntent = getIntent();). El dispositivo Android receptor no sabía qué hacer con los datos entrantes y me lo dijo. Por lo que añade

<intent-filter> 
    <action android:name="android.intent.action.VIEW"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <data android:mimeType="application/octet-stream" /> 
</intent-filter> 

Este enfoque podría ser un problema, por supuesto, pero el problema con Gmail, al menos, es que no tiene por qué escribir el archivo con el nombre que se trata, lo cual hace que cualquier camino decido definir inútil Y al menos con un octet-stream entrante, sabe que no se trata de datos específicos de ninguna aplicación que esté robando ... Sin embargo, debe validar los datos posteriormente y no solo asumir que son válidos para su aplicación.