para - manual de programacion android pdf
Registrar nuevo tipo de archivo en Android (3)
Estoy usando este Manifiesto para registrar (por ejemplo) el tipo de archivo .stl con mi aplicación:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.test.core" android:versionCode="1" android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Testy" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="ThorActivity" android:label="@string/app_name">
</activity>
<activity android:name="LokiActivity" android:label="@string/app_name">
</activity>
<activity android:name="OdinActivity" android:label="@string/app_name">
<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="http" android:host="*"
android:pathPattern=".*//.stl" />
<data android:scheme="https" android:host="*"
android:pathPattern=".*//.stl" />
<data android:scheme="content" android:host="*"
android:pathPattern=".*//.stl" />
<data android:scheme="file" android:host="*"
android:pathPattern=".*//.stl" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>
Como puede ver, estoy vinculando la extensión de archivo .stl a la actividad OdinActivity
. Dentro de OdinActivity
, uso la siguiente línea para obtener la ruta del archivo para poder abrirla:
filePath = getIntent().getData().getEncodedPath();
Luego lo abro para leerlo:
FileOutputStream out = new FileOutputStream(new File(filePath));
Quiero escribir una aplicación de visor STL (archivo de datos geométricos) simple en Android, pero no puedo hacer reconocer un formato al sistema. Lo que escribí en mi archivo de manifiesto de aplicación es:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.EDIT" />
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:pathPattern=".*//.stl" />
<data android:mimeType="application/sla" />
<data android:host="*" />
</intent-filter>
Pero en este momento, abro el navegador y voy a descargar un archivo STL de muestra, se interrumpe la descarga y se informa que el tipo de archivo de datos es desconocido para el sistema. No tengo un dispositivo Android real, así que solo uso el emulador, y para el desarrollo, uso C # en MonoDroid (pero no creo que ese sea el problema honestamente)
¿Alguna idea sobre el tema?
Gracias de antemano.
Me sorprende que la solución gnclmorais funcione. Porque tener varias entradas de data
en un intent-filter
no funcionó para mí. Lo que funcionó al final fue el intent-filter
múltiples intent-filter
en una activity
:
<activity
android:description=''@string/Activity_Description''
android:icon=''@drawable/ic_launcher''
android:label=''@string/Activity_Name''
android:name=''net.sourceforge.uiq3.fx603p.Calculator_Activity''
>
<intent-filter>
<action
android:name=''android.intent.action.MAIN''
></action>
<category
android:name=''android.intent.category.LAUNCHER''
></category>
</intent-filter>
<intent-filter
android:icon=''@drawable/ic_fx_603p_pf''
android:label=''FX-603P Simulator Program''
android:priority=''1''
>
<category
android:name=''android.intent.category.DEFAULT''
></category>
<action
android:name=''android.intent.action.VIEW''
></action>
<data
android:host=''*''
android:pathPattern=''.*//.pf''
android:scheme=''file''
></data>
</intent-filter>
<intent-filter
android:icon=''@drawable/ic_fx_603p_df''
android:label=''FX-603P Simulator Datafile''
android:priority=''1''
>
<category
android:name=''android.intent.category.DEFAULT''
></category>
<action
android:name=''android.intent.action.VIEW''
></action>
<data
android:host=''*''
android:pathPattern=''.*//.df''
android:scheme=''file''
></data>
</intent-filter>
<intent-filter
android:icon=''@drawable/ic_fx_603p_af''
android:label=''FX-603P Simulator Allfile (Data and Program)''
android:priority=''1''
>
<category
android:name=''android.intent.category.DEFAULT''
></category>
<action
android:name=''android.intent.action.VIEW''
></action>
<data
android:host=''*''
android:pathPattern=''.*//.af''
android:scheme=''file''
></data>
</intent-filter>
<intent-filter
android:icon=''@drawable/ic_fx_603p_pf''
android:label=''FX-603P Simulator Program''
android:priority=''1''
>
<category
android:name=''android.intent.category.DEFAULT''
></category>
<action
android:name=''android.intent.action.VIEW''
></action>
<data
android:host=''*''
android:mimeType=''application/x-fx-602p.program''
></data>
</intent-filter>
<intent-filter
android:icon=''@drawable/ic_fx_603p_df''
android:label=''FX-603P Simulator Datafile''
android:priority=''1''
>
<category
android:name=''android.intent.category.DEFAULT''
></category>
<action
android:name=''android.intent.action.VIEW''
></action>
<data
android:host=''*''
android:mimeType=''application/x-fx-602p.data''
></data>
</intent-filter>
<intent-filter
android:icon=''@drawable/ic_fx_603p_af''
android:label=''FX-603P Simulator Allfile (Data and Program)''
android:priority=''1''
>
<category
android:name=''android.intent.category.DEFAULT''
></category>
<action
android:name=''android.intent.action.VIEW''
></action>
<data
android:host=''*''
android:mimeType=''application/x-fx-602p.all''
></data>
</intent-filter>
</activity>
Tenga en cuenta que tener pathPattern
y pathPattern
en una entrada de data
no funcionó tan bien. Por último, no menos importante, sugiero algunas comprobaciones nulas al obtener el nombre del archivo:
/**
* <p>Open calculator and load file (if one was passed).</p>
* @see android.app.Activity#onStart()
*/
@Override
public void onStart ()
{
android.util.Log.d (Calculator_Activity.TAG, "+ onStart");
super.onStart ();
final android.content.Intent intent = getIntent ();
if (intent != null)
{
android.util.Log.d (Calculator_Activity.TAG, "> Got intent : " + intent);
final android.net.Uri data = intent.getData ();
if (data != null)
{
android.util.Log.d (Calculator_Activity.TAG, "> Got data : " + data);
final String filePath = data.getEncodedPath ();
android.util.Log.d (Calculator_Activity.TAG, "> Open file : " + filePath);
// file loading comes here.
} // if
} // if
android.util.Log.d (Calculator_Activity.TAG, "- onStart");
return;
} // onStart
Falta la carga real del archivo en la muestra. Debe insertarse después del comando de registro "Abrir archivo".
Probé las otras soluciones y esta es la única que funciona para mí:
<intent-filter
android:icon="@drawable/icon"
android:label="Armro File"
android:priority="1" >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:scheme="ftp" />
<data android:scheme="file" />
<data android:host="*" />
<data android:mimeType="*/*" />
<data android:pathPattern=".*//.myowntype" />
</intent-filter>
¿Alguien tiene una idea de por qué los otros no funcionan?