type studio mimetypemap android mime-types

studio - mimetypemap android



¿Cómo agregar un tipo de mimo personalizado? (4)

No probado, pero algo así debería funcionar. Ponlo en tu AndroidManifest.xml con la actividad en la que deseas 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>

Lo que quiero: 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.

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

La pregunta: ¿Necesito ser un 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 agradecerá alguna dirección sobre cómo registrar / mapear tipos de mime personalizados! :)


Por lo que puedo decir, los tipos de mime son bastante flexibles (he creado los míos como application/whatever ) y son aceptados inmediatamente por Android, ya en 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, Intent currentIntent = getIntent(); 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. Así que agregué

<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 problemático, por supuesto, pero el problema con Gmail al menos es que no necesariamente escribe el archivo con el nombre tal como aparece, lo que hace que cualquier ruta que decida definir sea inútil. Y al menos con una 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.


Registre un tipo de mime personalizado usando android.webkit.MimeTypeMap


<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, cuando reciba un sms con el texto "http://{your mime}.com" o haga clic en el enlace en la web con este texto, se ejecutará su actividad (MainActivity).

También puede agregar parámetros:

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

Luego, en los métodos onCreate () o onResume (), agregará:

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