textos texto programas programa para office mejor hacer gratis falsificar escribir editar documentos crear app aplicaciones aplicacion android android-intent broadcastreceiver

android - texto - programa para editar documentos gratis



¿Por qué mi aplicación no está en la lista de aplicaciones para abrir el archivo txt? (3)

Necesita asociar su aplicación con la extensión de archivo. Para hacerlo, agregue estas dos líneas dentro del filtro de intención y será bueno ir

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

Y tu manifiesto se vería así

<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" /> => esto define que el archivo debe ser local, no desde http o else

<data android:mimeType="*/*" /> => coincide con cualquier tipo de mimo

<data android:pathPattern=".*//.txt" /> => aquí es donde especificas qué extensión deseas unir

Espero que esto ayude

Tengo una aplicación de lectura de texto diseñada para recibir la intención del sistema Android cuando hago clic en un archivo de texto para abrirlo. Pero mi aplicación no está en la lista que apareció en el sistema. A continuación están mis códigos:

Manifiesto

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

Mi BroadcastReceiver extendido

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

Mi actividad será abierta por el receptor de la transmisión

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

¡Gracias!


al elaborar el pseudo código de HERO, esto funciona de manera efectiva:

cambie el <manifest> así:

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

suelta tu receptor de emisión , porque es innecesario.

cambie su clase BroadcastReceiverTest1Activity ( NO es necesario que sea su actividad principal , consulte BONUS a continuación):

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

ha creado efectivamente un oyente intencionado para archivos TXT , que llamará a su aplicación SI el usuario decide usarla (a menos que el usuario haya asociado previamente el tipo de archivo TXT a otra aplicación ...)

su aplicación NO necesita estar activa para atrapar intenciones. una vez instalado, el sistema lo reconoce como una de las "aplicaciones goto" para los tipos y / o extensiones de mime particulares (menos fácil que asociar por tipo de mimo) que elija.

BONIFICACIÓN: puede tener una actividad PRINCIPAL separada y cuando se llame a su BroadcastReceiver, se ejecutará dentro del mismo entorno limitado que su aplicación, sin afectarlo (tendrá que implementarlo en el método onResume su actividad PRINCIPAL).

puede leer los datos de texto en variable (s) estática (s) [descuidada] O puede ubicarlo en una base de datos SQLite , que es permanente Y segura , independientemente de la aplicación y / o el apagado del teléfono, por ejemplo.

podrías tener la actividad autoterminante y nunca disparar un diseño / ventana, lo cual es un poco extraño en caso de que tu usuario quiera algún tipo de confirmación de que el archivo txt fue consumido correcta y completamente por la aplicación.


Debe registrar una ACTIVIDAD, no un receptor de difusión con los atributos de filtro.