Autore Topic: Bluetooth RFCOMM  (Letto 1599 volte)

Offline joaquin

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
Bluetooth RFCOMM
« il: 18 Aprile 2011, 12:55:19 CEST »
0
Salve, sto creando un'applicazione  Bluetooth rfcomm per android, ma ho un problema credo con la riflessione Java. in particolare credo che la porzione di codice che dia problemi sia questa:

Codice (Java): [Seleziona]
BluetoothAdapter adapter = null;

                adapter = BluetoothAdapter.getDefaultAdapter();
               
                //abilito il bluetooth se questo non lo è
                if (!adapter.isEnabled()) {
                        Intent enableIntent = new Intent(
                                        BluetoothAdapter.ACTION_REQUEST_ENABLE);
                        startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
                }

                BluetoothDevice device = adapter.getRemoteDevice("00:17:A0:01:56:9C");

                print+=" "+device.getAddress();
               
                BluetoothSocket tmpsock = null;
               
                int port=1;

                try {
                       
                        Method m = device.getClass().getMethod
            ("createRfcommSocket", new Class[] { int.class });

                        tmpsock = (BluetoothSocket) m.invoke(device, Integer.valueOf(1));

                        tmpsock.connect();
                       
                        InputStream is=tmpsock.getInputStream();
                       
                        OutputStream os=tmpsock.getOutputStream();
                       
                        os.write("1".getBytes());
                       
                        print+=" Stampato";
                       
                        os.close();
                       
                        is.close();
                       
                        tmpsock.close();

                } catch (SecurityException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        print+="Security";
                } catch (NoSuchMethodException e) {
                        // TODO Auto-generated catch block
                        print+="NoSuchMethodException";
                        e.printStackTrace();
                } catch (IllegalArgumentException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        print+="IllegalArgumentException";
                } catch (InvocationTargetException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        print+="InvocationTargetException";
                } catch (IllegalAccessException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        print+="IllegalAccessException";
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        print+="IOException";
                }

ricevo sempre un'eccezione del tipo:InvocationTargetException.

Qualcuno sa come risolvere questo problema?
« Ultima modifica: 18 Aprile 2011, 13:13:18 CEST da joaquin »

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Bluetooth RFCOMM
« Risposta #1 il: 18 Aprile 2011, 13:07:39 CEST »
0
due cose:
-posta il logcat
-il codice va messo nel tag java, non nel tag codice generico

senza logcat non ti possiamo aiutare
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline joaquin

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
Re:Bluetooth RFCOMM
« Risposta #2 il: 18 Aprile 2011, 13:15:06 CEST »
0
Ecco il logcat:

D/AndroidRuntime( 1983): CheckJNI is OFF
D/dalvikvm( 1983): Precise GC configured ON
I/dalvikvm(   79):   at com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:~12375)
I/dalvikvm(   79):   at com.android.server.PackageManagerService.sendPackageBroadcast(PackageManagerService.java:3702)
I/dalvikvm(   79):   at com.android.server.PackageManagerService.access$1400(PackageManagerService.java:109)
I/dalvikvm(   79):   at com.android.server.PackageManagerService$5.run(PackageManagerService.java:3843)
I/dalvikvm(   79):   at android.os.Handler.handleCallback(Handler.java:609)
I/dalvikvm(   79):   at android.os.Handler.dispatchMessage(Handler.java:92)
I/dalvikvm(   79):   at android.os.Looper.loop(Looper.java:123)
I/dalvikvm(   79):   at android.os.HandlerThread.run(HandlerThread.java:60)
I/dalvikvm(   79):
D/AndroidRuntime( 1983): --- registering native functions ---
D/JBtlRBtlServicesNative( 1983): register_android_server_JBtlRbtlServicesNative: Entered
D/JBtlCommonNative( 1983): register_android_server_JBtlCommonNative: Entered
D/        ( 1983): Entered register_android_server_JBtlBmgNative
D/JBtlA2dpNative( 1983): <<<< Entered register_android_server_JBtlA2dpNative >>>>
D/JBtlAgNative( 1983): <<<< Entered register_android_server_JBtlAgNative >>>>
D/        ( 1983): Entered register_android_server_JBtlAvrcptgNative
D/JBtlPbapsNative( 1983): Entered register_android_server_JBtlPbapsNative
D/JBthalPbNative( 1983): Entered register_android_server_JBthalPbNative
D/JBtlSppNative( 1983): <<<< Entered register_android_server_JBtlSppNative >>>>
D/JBtlOppcNative( 1983): <<<< Entered register_android_server_JBtlOppcNative >>>>
D/JBtlOppsNative( 1983): <<<< Entered register_android_server_JBtlOppsNative >>>>
D/JBtlFtpsNative( 1983): <<<< Entered register_android_server_JBtlFtpsNative >>>>
D/        ( 1983): <<<< Entered register_android_server_JFmRxNative() >>>>
D/ddm-heap( 1983): Got feature list request
W/dalvikvm(   79): threadid=13: spin on suspend resolved in 1148 msec
D/HtcWidgetScanner(  322): action - android.intent.action.PACKAGE_REMOVED
D/HtcWidgetScanner(  322): packageUid - 10048
D/dalvikvm(   79): GC freed 43136 objects / 2360096 bytes in 1718ms
W/dalvikvm(   79): disableGcForExternalAlloc: true
I/ActivityManager(   79): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=it.it/.Start }
D/AndroidRuntime( 1983): Shutting down VM
D/dalvikvm( 1983): DestroyJavaVM waiting for non-daemon threads to exit
D/dalvikvm( 1983): DestroyJavaVM shutting VM down
D/dalvikvm( 1983): HeapWorker thread shutting down
D/dalvikvm( 1983): HeapWorker thread has shut down
D/jdwp    ( 1983): JDWP shutting down net...
I/dalvikvm( 1983): Debugger has detached; object registry had 1 entries
D/dalvikvm( 1983): VM cleaning up
E/AndroidRuntime( 1983): ERROR: thread attach failed
D/dalvikvm( 1983): LinearAlloc 0x0 used 665196 of 5242880 (12%)
D/dalvikvm(   79): GC freed 3584 objects / 190552 bytes in 395ms
W/ActivityManager(   79): Activity pause timeout for HistoryRecord{44c9f3f0 com.android.settings/.ManageApplications}
I/ActivityManager(   79): Start proc it.it for activity it.it/.Start: pid=1991 uid=10048 gids={3002, 3001, 1015}
D/ddm-heap( 1991): Got feature list request
D/Sensors (   79): open_akm, fd=137
D/AK8973  (   62): Compass Start
W/dalvikvm(   79): disableGcForExternalAlloc: false
W/System.err( 1991): java.lang.reflect.InvocationTargetException
W/System.err( 1991):    at android.bluetooth.BluetoothDevice.createRfcommSocket(BluetoothDevice.java:694)
W/System.err( 1991):    at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err( 1991):    at java.lang.reflect.Method.invoke(Method.java:521)
W/System.err( 1991):    at it.it.Start.onCreate(Start.java:54)
W/System.err( 1991):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
W/System.err( 1991):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544)
W/System.err( 1991):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621)
W/System.err( 1991):    at android.app.ActivityThread.access$2200(ActivityThread.java:126)
W/System.err( 1991):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932)
W/System.err( 1991):    at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err( 1991):    at android.os.Looper.loop(Looper.java:123)
W/ResourceType(   79): Resources don't contain package for resource number 0x7f050002
W/System.err( 1991):    at android.app.ActivityThread.main(ActivityThread.java:4595)
W/System.err( 1991):    at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err( 1991):    at java.lang.reflect.Method.invoke(Method.java:521)
W/System.err( 1991):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
W/System.err( 1991):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
W/System.err( 1991):    at dalvik.system.NativeStart.main(Native Method)
W/System.err( 1991): Caused by: java.io.IOException: Invalid UUID Specified
W/ResourceType(   79): Resources don't contain package for resource number 0x7f020000
W/ResourceType(   79): Resources don't contain package for resource number 0x7f030001
W/System.err( 1991):    at android.bluetooth.BluetoothSocket.<init>(BluetoothSocket.java:167)
W/System.err( 1991):    at android.bluetooth.BluetoothSocket.<init>(BluetoothSocket.java:142)
W/System.err( 1991):    ... 17 more

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Bluetooth RFCOMM
« Risposta #3 il: 18 Aprile 2011, 13:26:10 CEST »
0
Codice (Java): [Seleziona]
tmpsock = (BluetoothSocket) m.invoke(device, Integer.valueOf(1));perchè reflection e perchè valore 1?
io avevo fatto piu o meno come in questo post:
java - Android Bluetooth: Service Discovery Failed Exception - Stack Overflow
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline joaquin

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
Re:Bluetooth RFCOMM
« Risposta #4 il: 18 Aprile 2011, 13:31:17 CEST »
0
Codice (Java): [Seleziona]
tmpsock = (BluetoothSocket) m.invoke(device, Integer.valueOf(1));perchè reflection e perchè valore 1?
io avevo fatto piu o meno come in questo post:
java - Android Bluetooth: Service Discovery Failed Exception - Stack Overflow

Perchè cerco di aprire un canale RFCOMM verso un dispositivo.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Bluetooth RFCOMM
« Risposta #5 il: 18 Aprile 2011, 13:44:17 CEST »
0
Hai letto nel logcat:
Codice: [Seleziona]
W/System.err( 1991): Caused by: java.io.IOException: Invalid UUID Specified

il che giustifca l'InvocationTargetException

Offline joaquin

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
Re:Bluetooth RFCOMM
« Risposta #6 il: 18 Aprile 2011, 13:49:40 CEST »
0
Hai letto nel logcat:
Codice: [Seleziona]
W/System.err( 1991): Caused by: java.io.IOException: Invalid UUID Specified

il che giustifca l'InvocationTargetException

Si la causa è quella ma come si risolve? Per aprire una connessione RFCOMM credo che sia facciamo come indicato nel codice postato, ho letto tanto sull'argomento e non credo che ci sia un altro modo.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Bluetooth RFCOMM
« Risposta #7 il: 18 Aprile 2011, 14:22:05 CEST »
0
Si la causa è quella ma come si risolve? Per aprire una connessione RFCOMM credo che sia facciamo come indicato nel codice postato, ho letto tanto sull'argomento e non credo che ci sia un altro modo.

Mi dispiace ma non ti saprei aiutare, non ho mai lavorato con bt & argomenti correlati.
La mia era solo un'analisi di quello che hai postato :)

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Bluetooth RFCOMM
« Risposta #8 il: 18 Aprile 2011, 14:54:08 CEST »
0
il mio link proprio non ti piace eh?
io la mia connessione bluetooth l'avevo fatta cosi (circa):
Codice (Java): [Seleziona]
private UUID BB_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                switch (requestCode) {
                        case REQUEST_CONNECT_DEVICE:
                                if (resultCode == Activity.RESULT_OK) {
                                        // Get the device MAC address
                                        String address = data.getExtras().getString("device_address");
                                        // Get the BLuetoothDevice object
                                        BluetoothDevice device = mBtAdapter.getRemoteDevice(address);                                  
                                        // Attempt to connect to the device
                                        try {
                                                BluetoothSocket socket = device.createRfcommSocketToServiceRecord(BB_UUID);
                                                socket.connect();                                              
                                        } catch (IOException ex) {
                                                ex.printStackTrace();
                                        }
                                }
                                break;
                        default:
                                super.onActivityResult(requestCode, resultCode, data);
                                break;
                }
        }

a me questo funziona
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Bluetooth RFCOMM
« Risposta #9 il: 18 Aprile 2011, 15:33:18 CEST »
0
Sottoscrivo l'esempio di Nicola, non occorre la reflection per creare la connessione RFCOMM.

Questo è lo scheletro del thread che uso per la connessione con un device Bluetooth:

Codice (Java): [Seleziona]
      public void run() {

         // get device and socket
         BluetoothDevice device = mBtAdapter.getRemoteDevice(address);
         try {
            mBtSocket = device.createRfcommSocketToServiceRecord(RFCOMM_UUID);
         } catch (IOException e) {
            Log.e("BLUE","Exception on BtSocket create : "+e.toString());
         }

         // connect after canceldiscovery (safety)
         mBtAdapter.cancelDiscovery();
         try {
            mBtSocket.connect();
         } catch (IOException e) {
            Log.e("BLUE","Exception on BtSocket connect : "+e.toString());
            try {
               mBtSocket.close();
            } catch (IOException ee) {
               Log.e("BLUE","Exception on BtSocket close : "+ee.toString());
            }
         }

         // open output stream
         try {
            outStream = mBtSocket.getOutputStream();
         } catch (IOException e) {
            Log.e("BLUE","Exception on outStream creation : "+e.toString());
         }

      }
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store