Intereting Posts
Как добавить разделители разделов / разделителей в ListView? Как реализовать привязку листового / промежуточного сертификата в Android? Android ICS Launcher 4.0.x не может поддерживать ориентацию экрана Android; Геокодер, почему я получаю «услуга недоступна»? Обновить Android ListActivity при изменении данных списка? Ошибка: сборник Android в eclipse Отдельный задний стек для каждой вкладки на Android с помощью фрагментов В чем разница между передачей этого класса и ClassName.this из обработчика события при передаче в конструктор Intent? Лучший способ переключения между двумя фрагментами Перезапуск AudioTrack даже после его остановки Gradle-android-scala-plugin дает ошибку «Не удалось найти соответствующий конструктор» Атрибут Alpha работает только на Android Lollipop, почему? Android, как установить часовой пояс через приложение Строка для charsequence Android. Как указать местоположение при вызове календаря с намерением?

Зарегистрировать новый тип файла в Android

Я хочу написать приложение для просмотра STL (файл геометрических данных) на Android, но я не могу распознать формат системы. То, что я написал в файле манифеста приложения:

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

Но на данный момент я запускаю браузер и загружаю некоторый образец файла STL, загрузка прерывается, и мне сообщают, что тип файла данных неизвестен для системы. У меня нет реального устройства для Android, поэтому используйте только эмулятор, и для разработки я использую C # на MonoDroid (но я не думаю, что это проблема честно)

Любые идеи по теме?

Заранее спасибо.

Solutions Collecting From Web of "Зарегистрировать новый тип файла в Android"

Я использую этот манифест для регистрации (например) .stl-файла с моим приложением:

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

Как вы можете видеть, я связываю расширение файла .stl с активностью OdinActivity . Внутри OdinActivity я использую следующую строку, чтобы получить путь к файлу, чтобы я мог открыть его:

 filePath = getIntent().getData().getEncodedPath(); 

Затем я просто открываю его для чтения:

 FileOutputStream out = new FileOutputStream(new File(filePath)); 

Я удивлен, что решение gnclmorais должно работать. Поскольку у меня есть несколько записей data в одном intent-filter для меня это не сработало. В конце концов, в результате было создано несколько intent-filter :

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

Обратите внимание, что использование обоих pathPattern и mimeType в одной записи data также не pathPattern . Не в последнюю очередь я бы предложил несколько нулевых проверок при получении имени файла:

  /** * <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 

Фактическая загрузка файла отсутствует в образце. Он должен быть вставлен после команды журнала «Открыть файл».

Я пробовал другие решения, и это единственное, что работает для меня:

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

У кого-то есть идея, почему другие не работают?