Intereting Posts
Что происходит с выполнением JavaScript (settimeout и т. Д.), Когда iPhone / Android ложится спать? Могу ли я создать приложение для Android в качестве отладки, но подписать с хранилищем ключей Android – простая пользовательская форма ввода веб-представления для встроенной java с jQuery Mobile Недостаточно разрешений для SpeechRecognizer, несмотря на его установку в манифесте Удалить элемент в RecyclerView- Android Android Dev – R.layout.main, Variable «R» не может быть разрешен Не удалось создать: файл dx.jar не был загружен из папки SDK Android – надежное получение текущего местоположения Получить начальную и конечную дату недели с номера недели и года в android Spinner с многострочными элементами перекрывает выбранный элемент на Froyo Android studio 2.3: Не удалось инициализировать класс org.jetbrains.kotlin.android.actions.NewKotlinActivityAction Emoji (смайлики) на Blackberry и Android App. Как поддержать? Получите сердечный ритм от «Sensor» Samsung Gear Live Размер значка меню Android Как показать уведомление по Android после каждых 48 часов?

Почему мое приложение в списке приложений не открывает файл txt?

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

манифест

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.broadcastreceivertest1" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".BroadcastReceiverTest1Activity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="MyBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.ACTION_VIEW" /> <action android:name="android.intent.action.ACTION_EDIT" /> <action android:name="android.intent.action.ACTION_PICK" /> <data android:scheme="file" /> <data android:mimeType="*/*" /> <data android:pathPattern=".*\\.txt" /> <data android:host="*" /> </intent-filter> </receiver> </application> </manifest> 

Мой расширенный BroadcastReceiver

 public final class MyBroadcastReceiver extends BroadcastReceiver { private String TAG = "MyBroadcastReceiver"; @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Intent i = new Intent(context, BroadcastReceiverTest1Activity.class); i.putExtra("URI", intent.getData()); context.startActivity(i); Log.d(TAG, "Leaving onReceived..."); } } 

Моя активность, которую должен открыть широковещательный приемник

 public class BroadcastReceiverTest1Activity extends Activity { private String uri =""; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Intent intent = getIntent(); final String action = intent.getAction(); if(Intent.ACTION_VIEW.equals(action)){ uri = intent.getStringExtra("URI"); TextView textView = (TextView)findViewById(R.id.textView); textView.setText(uri); } } } 

Благодаря!

Вам необходимо связать приложение с расширением файла. Чтобы сделать это, добавьте эти две строки в фильтр намерений, и вам хорошо идти

 <data android:scheme="file" /> <data android:mimeType="*/*"/> <data android:pathPattern=".*\\.pdf" /> 

И ваш манифест будет выглядеть так

 <activity name="com.your.activity"> <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="*/*" /> <data android:pathPattern=".*\\.txt" /> </intent-filter> </activity> 

<data android:scheme="file" /> => определяют, что файл должен быть локальным, а не http или иначе

<data android:mimeType="*/*" /> => соответствует любому типу mime

<data android:pathPattern=".*\\.txt" /> => Здесь вы указываете, какое расширение вы хотите сопоставить

Надеюсь, что эта помощь

Разрабатывая псевдокод HERO, это эффективно работает:

Измените <manifest> следующим образом:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.broadcastreceivertest1" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="9" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".BroadcastReceiverTest1Activity" > <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="*/*" /> <data android:pathPattern=".*\\.txt" /> </intent-filter> </activity> </application> </manifest> 

Снимите приемник вещания , потому что он не нужен.

Измените свой класс BroadcastReceiverTest1Activity (он НЕ должен быть вашей основной деятельностью , см. BONUS ниже):

 import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.widget.TextView; public class BroadcastReceiverTest1Activity extends Activity { private String TAG = "TagOpenTxt"; private String uri =""; private Uri uri2; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Intent intent = getIntent(); final String action = intent.getAction(); if(Intent.ACTION_VIEW.equals(action)){ //uri = intent.getStringExtra("URI"); uri2 = intent.getData(); uri = uri2.getEncodedPath() + " complete: " + uri2.toString(); TextView textView = (TextView)findViewById(R.id.textView); textView.setText(uri); // now you call whatever function your app uses // to consume the txt file whose location you now know } else { Log.d(TAG, "intent was something else: "+action); } } } 

Вы эффективно создали приемник намерений для файлов TXT , который будет вызывать ваше приложение, если пользователь решит его использовать (если только пользователь ранее не связал тип файла TXT с другим приложением …)

Ваше приложение НЕ должно быть активным, чтобы поймать намерения. После установки система распознает его как одно из «приложений goto» для определенных типов и / или расширений mime (менее просто, чем ассоциировать с типом mime), который вы выбрали.

БОНУС: вы можете иметь отдельный MAIN-актив, и когда вызывается BroadcastReceiver, он будет выполняться в той же песочнице, что и ваше приложение, без воздействия на нее (вам придется реализовать это в методе onResume вашей onResume активности).

Вы можете читать текстовые данные в статические переменные (sloppy) ИЛИ вы можете поместить их в SQLite db, который является постоянным и безопасным , независимо от приложения и / или закрытия телефона, например.

Вы могли бы активировать работу и даже не запускать макет / окно – что-то вроде странного, если ваш пользователь хочет получить какое-то подтверждение, что txt-файл был правильно и полностью использован приложением.

Вы должны зарегистрировать ACTIVITY, а не широковещательный приемник с атрибутами фильтра.