Dar permiso de actividad en AndroidManifest

Tengo un plugin Cordova que ejecuta un escáner láser en un dispositivo, cuyo Main.java se ve así:

package com.example.plugin; import org.apache.cordova.*; import org.json.JSONArray; import org.json.JSONException; import java.security.PublicKey; import android.os.Bundle; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.util.Log; public class Hello extends CordovaPlugin { public static final int REQUEST_CODE = 0x0ba7c0de; @Override public boolean execute(String action, JSONArray data, CallbackContext callbackContext) throws JSONException { if (action.equals("scan")) { scan(); return true; } else { return false; } } public void scan() { Intent intentService = new Intent("com.hyipc.core.service.barcode.BarcodeService2D"); intentService.putExtra("KEY_ACTION", "UP"); this.cordova.startActivityForResult((CordovaPlugin) this, intentService, REQUEST_CODE); } @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { Log.i("scan", "everything works fine"); } } 

Cuando ejecuto el complemento, obtengo esto en el registro de errores:

 07-11 12:03:33.541: E/AndroidRuntime(5258): FATAL EXCEPTION: main 07-11 12:03:33.541: E/AndroidRuntime(5258): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.ionicframework.curierapp266167/com.hyipc.core.service.barcode.BarcodeService2D}: java.lang.ClassNotFoundException: Didn't find class "com.hyipc.core.service.barcode.BarcodeService2D" on path: DexPathList[[zip file "/data/app/com.ionicframework.curierapp266167-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.ionicframework.curierapp266167-2, /vendor/lib, /system/lib]] 07-11 12:03:33.541: E/AndroidRuntime(5258): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269) 07-11 12:03:33.541: E/AndroidRuntime(5258): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395) 07-11 12:03:33.541: E/AndroidRuntime(5258): at android.app.ActivityThread.access$600(ActivityThread.java:162) 07-11 12:03:33.541: E/AndroidRuntime(5258): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364) 07-11 12:03:33.541: E/AndroidRuntime(5258): at android.os.Handler.dispatchMessage(Handler.java:107) 07-11 12:03:33.541: E/AndroidRuntime(5258): at android.os.Looper.loop(Looper.java:194) 07-11 12:03:33.541: E/AndroidRuntime(5258): at android.app.ActivityThread.main(ActivityThread.java:5392) 07-11 12:03:33.541: E/AndroidRuntime(5258): at java.lang.reflect.Method.invokeNative(Native Method) 07-11 12:03:33.541: E/AndroidRuntime(5258): at java.lang.reflect.Method.invoke(Method.java:525) 07-11 12:03:33.541: E/AndroidRuntime(5258): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 07-11 12:03:33.541: E/AndroidRuntime(5258): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 07-11 12:03:33.541: E/AndroidRuntime(5258): at dalvik.system.NativeStart.main(Native Method) 07-11 12:03:33.541: E/AndroidRuntime(5258): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.hyipc.core.service.barcode.BarcodeService2D" on path: DexPathList[[zip file "/data/app/com.ionicframework.curierapp266167-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.ionicframework.curierapp266167-2, /vendor/lib, /system/lib]] 

He añadido esto a mi archivo AndroidManifest.xml, pero estoy bastante seguro de que algo está mal con él.

 <activity android:label="@string/share_name" android:name="com.hyipc.core.service.barcode.BarcodeService2D"> <intent-filter> <action android:name="com.hyipc.core.service.barcode.BarcodeService2D" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 

EDITAR

Si edito mi archivo de manifiesto a esto, no obtengo ninguna actividad encontrada para manejar el error de intención.

 <activity android:label="@string/share_name" android:name="com.hyipc.core.service.barcode.BarcodeService2D"> <intent-filter> <action android:name="android.intent.action.LAUNCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 

Además, si intento iniciar la actividad de esta manera:

 cordova.getActivity().startService(intentService); 

El escáner se inicia sin error, pero no sé cómo obtener el resultado.

De la discusión en la lista de comentarios sabemos que BarcodeService2D , es un Service , y puede iniciar el componente utilizando startService correctamente. Ahora la pregunta se convierte en "¿Cómo puedo pasar los datos de mi servicio a una instancia de Activity "? Hay muchas respuestas en StackOverflow, vea esto y esto . Sólo google para él.

Y para la pregunta "¿Así que un servicio es diferente de una actividad?", La respuesta es sí. Una Activity normalmente representa una pantalla en una aplicación. Tiene una variedad de View , Drawable y muchas otras cosas y puede interactuar con él directamente. Normalmente se utiliza un Service para realizar una tarea de ejecución larga en segundo plano sin ninguna interfaz de usuario. Para obtener información detallada, consulte el sitio del desarrollador

En primer lugar parece que el escáner de código de barras es un servicio en su caso por lo que lo utilizan como un servicio y registrarlo como un servicio, entonces parece que usted necesita para crear un receptor de radiodifusión dentro de su clase como este (desde el otro post)

  public class BarcodeReceiver extends BroadcastReceiver { public void onReceive(Context ctx, Intent intent) { if (intent.getAction().equals(ACTION_BARCODE_SERVICE_BROADCAST)) { strBarcode = intent.getExtras().getString(KEY_BARCODE_STR); tvBarcode.setText(strBarcode); strBarcode = ""; } } } 

Receptores de difusión son como los chicos que escucha y filtrar llamadas entrantes.

crear un objeto de este receptor en la parte superior dentro de la actividad

  private BroadcastReceiver mReceiver = new BarcodeReceiver(); 

a continuación, registrarlo en el curriculum vitae con un filtro de intención (para que no tenga que registrar esto en el manifiesto) y reiniciar el servicio (en caso de encender / apagar la pantalla)

  @Override protected void onResume() { super.onResume(); intentService.putExtra(KEY_ACTION, "INIT"); this.startService(intentService); // register receiver IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_BARCODE_SERVICE_BROADCAST); this.registerReceiver(mReceiver, filter); } 

así que note la declaración de filter.addAction es como usted posee el indicador único de la identidad de modo que u pueda comprobar y emparejar cuando u consigue una respuesta dentro de onreceive () dentro de su receptor de la difusión

al final de la exploración se le notificará dentro de su receptor de difusión y, a continuación, coincide con el indicador de identidad con su bandera única y si es coincidencia, entonces puede buscar los datos que estarán disponibles con la clave definida (par clave-valor)

public static final String KEY_BARCODE_STR = "clave_de_código_de_barras";

no olvide anular el registro de su receptor en pausa para ahorrar batería y reducir la sobrecarga

  @Override protected void onPause() { super.onPause(); //close barcodePower this.unregisterReceiver(mReceiver); } 

Después de leer la discusión anterior llegué a los siguientes puntos

  1. Si BarcodeService2D es una actividad, su declaración de manifiesto debería ser así:

      <activity android:name="com.hyipc.core.service.barcode.BarcodeService2D" android:label="@string/share_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 
  2. Si BarcodeService2D es un servicio, su declaración de manifiesto debe ser así:

     <service android:name="com.hyipc.core.service.barcode.BarcodeService2D"> <intent-filter> /*Your Service specific intent filters should be here*/ </intent-filter> </service> 
  • Cómo escribir en una hoja de Google desde la aplicación de Android mediante programación
  • Android.support.v4.util.Pair vs android.util.Pair
  • ¿Cómo obtener tablas columnas arraylist en Android?
  • GetStaticMethodId firma de método para public static MyClass myMethod ()
  • ¿Cómo utilizo un proyecto Java que requiere un nivel de cumplimiento de 1.7 en una ruta de construcción de proyecto de Android?
  • No puede utilizar el método "getString (int resId)" en FragmentPagerAdapter
  • Cómo crear una tabla en Android con varias columnas?
  • Android: Dagger 2 y la inyección del constructor
  • ¿Por qué utilizar Context.MODE_PRIVATE o Context.MODE_WRITABLE?
  • ¿Cómo obtener el comportamiento de pantalla de inicio de arrastrar a bin, en mi propia aplicación?
  • No se puede crear tabla TEMP en Android sqlite
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.