studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android file-type

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?