¿Cómo forzar el uso de zxing lib con sólo mi aplicación?
Ok, digamos que hay 3 aplicaciones diferentes que utilizan zxing lib en el teléfono. Siempre que quiera abrir zxing con mi propia aplicación android me pregunta si para completar la acción usando la aplicación 1 o la aplicación 2 o mi propia aplicación. ¿Cómo lo obligo a ejecutar sólo a través de mi aplicación sin ningún diálogo? ¿Hay alguna posibilidad de hacerlo?
EDITAR
- ¿Cómo integrar ZXing Library a Android Studio para escanear códigos de barras?
- Cómo usar la biblioteca de ZXing sin instalar la aplicación barcodescanner
- Zxing modo retrato de la cámara y el paisaje en Android
- ¿Cómo incluir la biblioteca Zxing en el proyecto android?
- Android + biblioteca de escaneo de códigos de barras ZXing - tamaño personalizado y orientación
En Adicional a CommonsWare, puede hacerlo si desea manejar el resultado del código de barras en la otra actividad.
paso 1: saltar al método denominado handleDecode en Capture Activity. Agregue estas líneas después de handleDecodeInternally (rawResult, resultHandler, código de barras);
Intent intent = new Intent(getIntent().getAction()); intent.putExtra("SCAN_RESULT", rawResult.getText()); setResult(RESULT_OK,intent); finish();
paso 2: Haga lo que quiera hacer en el evento onActivityResult de la otra actividad.
PS: Gracias de nuevo a CommonsWare.
- Escáner de código QR
- Cómo agregar un logotipo al código QR en android
- Escáner de código de barras ZXing Propósito: set DecodeHintType.ASSUME_GS1
- Integración de la biblioteca de ZXing directamente en mi aplicación de Android
- Cómo integrar Zxing Barcode Scanner sin instalar la aplicación real zxing (no se puede resolver el símbolo: .android.CaptureActivity)?
- Vista de cámara personalizada y rotación en Zxing para el código QR?
- Cómo decodificar datos utilizando Zxing C ++
- Android: El código QR generado que usa Zxing tiene márgenes (no es apropiado para el área)
En primer lugar, no hay "zxing lib". Se supone que debes utilizar la aplicación Barcode Scanner, vinculándola a tu aplicación en el nivel de actividad, idealmente usando su código IntentIntegrator
. Aquí hay una aplicación de ejemplo que demuestra esto . Los creadores de ZXing específicamente no soportan ni respaldan la cocción del código fuente del escáner de código de barras en otra aplicación.
Sin embargo, dados sus síntomas, tengo que asumir que usted está intentando agregar el código de fuente del explorador de código de barras a su propia aplicación.
Usted presumiblemente tiene algo como esto en su manifiesto en el elemento de la actividad de escaneo:
<intent-filter > <action android:name="com.google.zxing.client.android.SCAN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter>
No eres escáner de código de barras. Sin embargo, este <intent-filter>
afirma que usted es Barcode Scanner.
Necesita quitar este <intent-filter>
, modificar su copia del código fuente del escáner de código de barras para no requerirlo y, a continuación, iniciar la actividad de escaneo utilizando el constructor Intent
basado en componentes (por ejemplo, new Intent(this, ThisIsYourRevisedScanningActivity.class)
).
Sólo incluir esto, esto ha hecho lo necesario para mí ..
Intent intent = new Intent("com.google.zxing.client.android.SCAN"); intent.setPackage(getPackageName()); intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); startActivityForResult(intent, 0);
Android no le permite establecer esto por su cuenta. Sólo un usuario puede establecer la aplicación predeterminada para una acción. Si en su teléfono desea que su aplicación maneje ese evento, active la casilla Usar como predeterminado antes de seleccionar su aplicación en el selector.
Por motivos de seguridad, Android no le permite configurar su aplicación como predeterminada sin la interacción del usuario, ya que una aplicación malintencionada podría asociarse como predeterminada a varios eventos.
En realidad, usted necesita para eliminar el intento de filtro como CommonsWare dijo, por lo que debe ser como sigue:
<activity android:name="com.google.zxing.client.android.CaptureActivity" android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="stateAlwaysHidden"> </activity>
y en vez de llamar vía la intención externa usted debe llamar a zxing como:
private final static int ACTION_ZXING_SCANNER = 0x0000c0de; //IntentIntegrator.REQUEST_CODE private void startZxingScanner() { final Intent intent = new Intent(this, com.google.zxing.client.android.CaptureActivity.class); intent.setAction(Intents.Scan.ACTION); startActivityForResult(intent, ACTION_ZXING_SCANNER); }
y luego el resultado del proceso en onActivityResult()
utilizando el código de solicitud ACTION_ZXING_SCANNER
. La cadena de importación si es necesario:
import com.google.zxing.client.android.Intents;
nota: esto funciona para mí y he añadido zxing proyecto como un lib de mi proyecto por lo que aquí es – el "zxing lib" 🙂