Autore Topic: Monitoraggio dispositivi bluetooth  (Letto 870 volte)

Offline giucaf

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero android 2.1
  • Sistema operativo:
    Windows 7 64 bit
Monitoraggio dispositivi bluetooth
« il: 05 Giugno 2012, 17:43:02 CEST »
0
Salve a tutti voi del forum. Vorrei chiedervi un aiuto a voi che sicuramente ne sapete più di me. Devo sviluppare un'applicazione che mi faccia costantemente la ricerca dei dispositivi bluetooth e mi confronti i mac address dei dispositivi trovati con dei mac address che gli setto io inizialmente.Una volta trovato il dispositivo di mio interesse estraggo il mac address che mi servirà in seguito. La ricerca e il confronto devono essere fatte in maniera automatica senza che l'utente intervenga.  Non so come fare la ricerca e il confronto in modo automatico. Ho visto anche la classe DeviceListActivity dell'esempio BluetoothChat ma non so proprio da dove incominciare. Riepilogando la mia applicazione deve fare questo:
  • All'avvio dell'applicazione parte la ricerca dei dispositivi bluetooth
  • Trovato il primo dispositivo di mio interesse estraggo il mac address. La ricerca deve continuare.
  • Trovato il secondo dispositivo estraggo il mac address e così via.
Spero di essere stato chiaro.
Vi ringrazio confidando in un vostro aiuto.

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:Monitoraggio dispositivi bluetooth
« Risposta #1 il: 05 Giugno 2012, 17:56:05 CEST »
0
La DeviceListActivity dell'esempio BluetoothChat è un ottimo punto di partenza, perchè è una activity completamente standalone che puoi anche copiare pari pari per la tua app. Ti consiglio di concentrarti sul capire quella, eventualmente posta qua domande su cosa ti risulta più oscuro.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline giucaf

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero android 2.1
  • Sistema operativo:
    Windows 7 64 bit
Re:Monitoraggio dispositivi bluetooth
« Risposta #2 il: 05 Giugno 2012, 18:05:07 CEST »
0
Bradipao intanto ti ringrazio per avermi risposto. La devicelistactivity l'ho vista e mi è stata utile per capire i metodi di ricerca. Allora ti spiego. A me non interessa visualizzare una lista di dispositivi trovati e di quelli accoppiati ma mi interessa fare la ricerca dei dispositivi e estrarre il mac address di un dispositivo in particolare. Tutto questo però senza che l'utente per così dire se ne accorga cioè senza cliccare su nessun bottone. Si può fare? Grazie ancora.

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Monitoraggio dispositivi bluetooth
« Risposta #3 il: 05 Giugno 2012, 18:07:41 CEST »
0
Citazione
A me non interessa visualizzare una lista di dispositivi trovati e di quelli accoppiati ma mi interessa fare la ricerca dei dispositivi e estrarre il mac address di un dispositivo in particolare. Tutto questo però senza che l'utente per così dire se ne accorga cioè senza cliccare su nessun bottone. Si può fare? Grazie ancora.

Ma il problema è "fare la ricerca dei dispositivi e estrarre il mac address di un dispositivo in particolare" oppure "tutto questo però senza che l'utente [...] se ne accorga cioè senza cliccare su nessun bottone"?

Offline giucaf

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero android 2.1
  • Sistema operativo:
    Windows 7 64 bit
Re:Monitoraggio dispositivi bluetooth
« Risposta #4 il: 05 Giugno 2012, 18:14:14 CEST »
0
Il problema più grande per il momento è come effettuare la ricerca senza che l'utente che se accorga poi vediamo l'estrazione del mac address. Preciso che a me non interessa fare nemmeno la connessione ma semplicemente ricerca e estrazione mac address di un dispositivo in particolare.

Offline giucaf

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero android 2.1
  • Sistema operativo:
    Windows 7 64 bit
Re:Monitoraggio dispositivi bluetooth
« Risposta #5 il: 05 Giugno 2012, 19:50:57 CEST »
0
Nessuno può darmi qualche consiglio?

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Monitoraggio dispositivi bluetooth
« Risposta #6 il: 05 Giugno 2012, 20:02:09 CEST »
0
Quindi il problema non ha a che fare col bluethoot ma con il legare l'esecuzione di un blocco di codice non ad un evento generato dall'utente ma ad un evento generato dal sistema tipo l'apertura dell'app?

Offline giucaf

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero android 2.1
  • Sistema operativo:
    Windows 7 64 bit
Re:Monitoraggio dispositivi bluetooth
« Risposta #7 il: 05 Giugno 2012, 20:08:54 CEST »
0
Sì. In sostanza l'app completa si deve avviare, deve fare la ricerca costantemente dei dispositivi bluetooth e quando trova quello di mio interesse estrarre il mac address e salvarlo in una variabile string. Questa mi servirà in seguito per aprire una webview passando per la connessione ad un server web in cui sono memorizzati mac address e url della pagina html. Ma questa parte non è un problema perchè l'ho già fatta.

Offline giucaf

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero android 2.1
  • Sistema operativo:
    Windows 7 64 bit
Re:Monitoraggio dispositivi bluetooth
« Risposta #8 il: 09 Giugno 2012, 17:52:06 CEST »
0
Buongiorno a tutti. Sono riuscito ha fare una ricerca costante dei dispositivi bluetooth. Ho creato un service in cui ci sono i metodi che avviano la ricerca. Ora il problema è che quando trovo il dispositivo di mio interesse vorrei passare il mac address all'activity principale cioè quella che ha avviato il service. Ho provato costruendo il metodo stampavideo() nell'activity principale, che riceve il mac address ma quando provo ad usare questo valore per fare la connessione al database attraverso il metodo postData() l'applicazione non si connette al database e se chiudo l'applicazione si blocca e mi da errore. Qualcuno può aiutarmi? Grazie.
Vi posto i sorgenti e il logCat e il manifest:
Codice (Java): [Seleziona]
package mio.pippo.pippo;

import android.app.Service;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.util.Log;

public class ServiceDiscovery extends Service {
       
        public static final String TAG = "ServiceDiscovery";
        private BluetoothAdapter mBtAdapter;
        private static final String quadro1 ="00:22:5F:F7:47:FB";
        private static final String quadro2 ="F8:D0:BD:8A:70:A5";
        //private boolean stato = false;
        private String nuova_ad = "";
       
        @Override
        public void onCreate(){
       
                Log.e("TAG","---Service creato---");
               
                       
        }
       
       
       
       
        @Override
        public IBinder onBind(Intent intent) {
               
                return null;
        }
       
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
       
                super.onStartCommand(intent, flags, startId);
               
                mBtAdapter = BluetoothAdapter.getDefaultAdapter();
               
                if (mBtAdapter.isDiscovering()) {
                    mBtAdapter.cancelDiscovery();
                }
                 
                        // Request discover from BluetoothAdapter
                mBtAdapter.startDiscovery();
                Log.e("TAG","---avviata la ricerca bluetooth---");
               
                // Register for broadcasts when a device is discovered
                IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
                this.registerReceiver(mReceiver, filter);

                // Register for broadcasts when discovery has finished
                filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
                this.registerReceiver(mReceiver, filter);

               
               
                return START_STICKY;
        }
       
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
               
                @Override
                public void onReceive(Context context, Intent intent) {
                        String action = intent.getAction();
                        // When discovery finds a device
            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                // Get the BluetoothDevice object from the Intent
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                String address = device.getAddress();
               
                Log.e(TAG, address);
               
               
               
                                if (address.equals(quadro1) && !nuova_ad.equals(quadro1) ) {
                        nuova_ad = quadro1;
                       
                       
                        System.out.println("quadro1");
                        ServiceDiscoveryBluetoothActivity discovery = new ServiceDiscoveryBluetoothActivity();
                        discovery.stampavideo(address);
               
                } else if(address.equals(quadro2) && !nuova_ad.equals(quadro2) ){
                        nuova_ad = quadro2;
                        System.out.println("quadro2");
                        ServiceDiscoveryBluetoothActivity discovery = new ServiceDiscoveryBluetoothActivity();
                        discovery.stampavideo(address);
               
                }
               
            } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
               
                Log.v(TAG,"Entered the Finished ");
                mBtAdapter.startDiscovery();

                }
            }
           
            };
       
        @Override
        public void onDestroy() {
                if (mBtAdapter != null) {
            mBtAdapter.cancelDiscovery();
        }

        // Unregister broadcast listeners
        this.unregisterReceiver(mReceiver);
               
        };
}
Codice (Java): [Seleziona]
package mio.pippo.pippo;



import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.ByteArrayBuffer;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.TextView;

public class ServiceDiscoveryBluetoothActivity extends Activity {
    /** Called when the activity is first created. */
        public static final String TAG = "ServiceDiscovery";
        //private BluetoothAdapter mBtAdapter;
        private static final String quadro1 ="00:22:5F:F7:47:FB";
        private static final String quadro2 ="F8:D0:BD:8A:70:A5";
       
        private TextView tv;
        private WebView webview;
        private WebSettings zoomWebview;
       
        private String text = "";
        private String nome = "Giuseppe";
       
        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e(TAG, "++ ON CREATE ++");
        setContentView(R.layout.main);
       
        Intent intentdiscovery = new Intent(this, ServiceDiscovery.class);
        this.startService(intentdiscovery);
        Log.e(TAG, "--chiamata service--");
   
      // tv = (TextView) findViewById(R.id.dispositivo);
               
     //  webview = (WebView) findViewById(R.id.webview);
          // webview.getSettings().setJavaScriptEnabled(true);
       
          // zoomWebview= webview.getSettings();
       //zoomWebview.setBuiltInZoomControls(true);
       //webview.loadUrl("http://www.google.it/");
    }
       
        @Override
        public void onStart() {
                super.onStart();
                Log.e(TAG, "++ ON START ++");
        }
       
        public synchronized void onResume(){
                super.onResume();
                Log.e (TAG, "++ ON RESUME ++");
               
                tv =(TextView) findViewById(R.id.dispositivo);
               
                 //webview = (WebView) findViewById(R.id.webview);
            // webview.getSettings().setJavaScriptEnabled(true);
         
            // zoomWebview= webview.getSettings();
            // zoomWebview.setBuiltInZoomControls(true);
                //webview.loadUrl("http://www.google.it/");
                //text = "00:22:5F:F7:47:FB";
                //postData();
        }
       
         @Override
            public synchronized void onPause() {
                super.onPause();
                Log.e(TAG, "-- ON PAUSE --");
         }
         
         @Override
            public void onStop() {
                super.onStop();
                Log.e(TAG, "-- ON STOP --");
         }

       
        @Override
        public void onDestroy(){
                super.onDestroy();
                Log.e(TAG, "--- ON DESTROY ---");
                Intent intentdiscovery = new Intent(this, ServiceDiscovery.class);
                this.stopService(intentdiscovery);
                webview.clearView(); //ripulisce la webview
               
        }
       
         //metodo per la connessione alla pagina php
    public void postData(){  
                // Create a new HttpClient and Post Header
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost("http://192.168.1.100/tesi/post_db.php");  

                try {
                        // Add your data
                        List nameValuePairs = new ArrayList(1);
                        nameValuePairs.add(new BasicNameValuePair("data1" , nome));
                        nameValuePairs.add(new BasicNameValuePair("data2" , text));
                        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));  

                        // Execute HTTP Post Request
                        HttpResponse response = httpclient.execute(httppost);
                       
                       
                        InputStream is = response.getEntity().getContent();
                        BufferedInputStream bis = new BufferedInputStream(is);
                        ByteArrayBuffer baf = new ByteArrayBuffer(20);

                        int current = 0;
               
                        while((current = bis.read()) != -1){
                                baf.append((byte)current);
                        }  

                        /* Convert the Bytes read to a String. */
                        text = new String(baf.toByteArray());
                        tv.setText(text);
                } catch (ClientProtocolException e) {
                        // TODO Auto-generated catch block
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                }
        }// end postData();
   
        public void stampavideo(String address){
        //i=i+1;
                //System.out.println("nome dispositivo: " + i);
        if(address.equals(quadro2)){
                System.out.println("nome dispositivo: " + quadro2);
                //webview.loadUrl("http://www.yahoo.it/");
                text = address;
                postData();
                Log.e(TAG, "--- POST SUL DB ---");
               
        } else if (address.equals(quadro1)){
                System.out.println("nome dispositivo: " + quadro1);
               
                //Log.e(TAG, "---quadro1----" + nuova_ad);
               
                //webview.loadUrl("http://www.google.it/");
                //address.toString();
                text = address;
                postData();
                Log.e(TAG, "--- POST SUL DB ---" + text);
               
        } else {
                System.out.println("sono ancora nella stessa stanza");
        }
        }
       
       


}

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="mio.pippo.pippo"
   android:versionCode="1"
   android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="7" />

    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.INTERNET"/>
   
   
    <application

       android:icon="@drawable/ic_launcher"
       android:label="@string/app_name" >

        <service android:enabled="true" android:name=".ServiceDiscovery"/>
       
        <activity
           android:label="@string/app_name"
           android:name=".ServiceDiscoveryBluetoothActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Codice: [Seleziona]
06-09 17:46:11.044: E/ServiceDiscovery(3800): ++ ON CREATE ++
06-09 17:46:11.554: E/ServiceDiscovery(3800): --chiamata service--
06-09 17:46:11.554: E/ServiceDiscovery(3800): ++ ON START ++
06-09 17:46:11.554: E/ServiceDiscovery(3800): ++ ON RESUME ++
06-09 17:46:11.584: E/TAG(3800): ---Service creato---
06-09 17:46:11.664: E/TAG(3800): ---avviata la ricerca bluetooth---
06-09 17:46:11.774: W/webcore(3800): Not supported in this case.
06-09 17:46:11.774: W/webcore(3800): JuLOG: what=105 mMessages size=0
06-09 17:46:12.664: E/ServiceDiscovery(3800): 00:22:5F:F7:47:FB
06-09 17:46:12.664: I/System.out(3800): quadro1
06-09 17:46:12.664: I/System.out(3800): nome dispositivo: 00:22:5F:F7:47:FB
06-09 17:46:15.794: E/ServiceDiscovery(3800): --- POST SUL DB ---00:22:5F:F7:47:FB
06-09 17:46:21.924: V/ServiceDiscovery(3800): Entered the Finished
06-09 17:46:22.954: E/ServiceDiscovery(3800): 00:22:5F:F7:47:FB
06-09 17:46:32.224: V/ServiceDiscovery(3800): Entered the Finished
06-09 17:46:32.394: E/ServiceDiscovery(3800): 00:22:5F:F7:47:FB
06-09 17:46:42.534: V/ServiceDiscovery(3800): Entered the Finished
06-09 17:46:42.914: E/ServiceDiscovery(3800): 00:22:5F:F7:47:FB
06-09 17:46:52.864: V/ServiceDiscovery(3800): Entered the Finished
06-09 17:46:54.124: E/ServiceDiscovery(3800): 00:22:5F:F7:47:FB
06-09 17:47:03.174: V/ServiceDiscovery(3800): Entered the Finished
06-09 17:47:03.764: E/ServiceDiscovery(3800): 00:22:5F:F7:47:FB
06-09 17:47:13.474: V/ServiceDiscovery(3800): Entered the Finished
06-09 17:47:14.854: E/ServiceDiscovery(3800): 00:22:5F:F7:47:FB
06-09 17:47:23.804: V/ServiceDiscovery(3800): Entered the Finished
06-09 17:47:23.964: E/ServiceDiscovery(3800): 00:22:5F:F7:47:FB
06-09 17:47:34.114: V/ServiceDiscovery(3800): Entered the Finished
06-09 17:47:34.454: E/ServiceDiscovery(3800): 00:22:5F:F7:47:FB
06-09 17:47:44.424: V/ServiceDiscovery(3800): Entered the Finished
06-09 17:47:44.674: E/ServiceDiscovery(3800): 00:22:5F:F7:47:FB
06-09 17:47:54.724: V/ServiceDiscovery(3800): Entered the Finished
06-09 17:47:55.294: E/ServiceDiscovery(3800): 00:22:5F:F7:47:FB
06-09 17:48:05.034: V/ServiceDiscovery(3800): Entered the Finished
06-09 17:48:05.744: E/ServiceDiscovery(3800): 00:22:5F:F7:47:FB
06-09 17:48:15.344: V/ServiceDiscovery(3800): Entered the Finished
06-09 17:48:16.184: E/ServiceDiscovery(3800): 00:22:5F:F7:47:FB
06-09 17:48:25.504: E/ServiceDiscovery(3800): -- ON PAUSE --
06-09 17:48:25.904: V/ServiceDiscovery(3800): Entered the Finished
06-09 17:48:26.054: E/ServiceDiscovery(3800): -- ON STOP --
06-09 17:48:26.054: E/ServiceDiscovery(3800): --- ON DESTROY ---
06-09 17:48:26.114: D/AndroidRuntime(3800): Shutting down VM
06-09 17:48:26.124: W/dalvikvm(3800): threadid=3: thread exiting with uncaught exception (group=0x4001e390)
06-09 17:48:26.154: E/AndroidRuntime(3800): Uncaught handler: thread main exiting due to uncaught exception
06-09 17:48:26.224: E/AndroidRuntime(3800): java.lang.RuntimeException: Unable to destroy activity {mio.pippo.pippo/mio.pippo.pippo.ServiceDiscoveryBluetoothActivity}: java.lang.NullPointerException
06-09 17:48:26.224: E/AndroidRuntime(3800):         at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3644)
06-09 17:48:26.224: E/AndroidRuntime(3800):         at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3674)
06-09 17:48:26.224: E/AndroidRuntime(3800):         at android.app.ActivityThread.access$2800(ActivityThread.java:126)
06-09 17:48:26.224: E/AndroidRuntime(3800):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1965)
06-09 17:48:26.224: E/AndroidRuntime(3800):         at android.os.Handler.dispatchMessage(Handler.java:99)
06-09 17:48:26.224: E/AndroidRuntime(3800):         at android.os.Looper.loop(Looper.java:123)
06-09 17:48:26.224: E/AndroidRuntime(3800):         at android.app.ActivityThread.main(ActivityThread.java:4595)
06-09 17:48:26.224: E/AndroidRuntime(3800):         at java.lang.reflect.Method.invokeNative(Native Method)
06-09 17:48:26.224: E/AndroidRuntime(3800):         at java.lang.reflect.Method.invoke(Method.java:521)
06-09 17:48:26.224: E/AndroidRuntime(3800):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
06-09 17:48:26.224: E/AndroidRuntime(3800):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
06-09 17:48:26.224: E/AndroidRuntime(3800):         at dalvik.system.NativeStart.main(Native Method)
06-09 17:48:26.224: E/AndroidRuntime(3800): Caused by: java.lang.NullPointerException
06-09 17:48:26.224: E/AndroidRuntime(3800):         at mio.pippo.pippo.ServiceDiscoveryBluetoothActivity.onDestroy(ServiceDiscoveryBluetoothActivity.java:109)
06-09 17:48:26.224: E/AndroidRuntime(3800):         at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3631)
06-09 17:48:26.224: E/AndroidRuntime(3800):         ... 11 more
06-09 17:48:26.444: I/dalvikvm(3800): threadid=7: reacting to signal 3
06-09 17:48:26.474: I/dalvikvm(3800): Wrote stack trace to '/data/anr/traces.txt'
06-09 17:48:29.624: I/Process(3800): Sending signal. PID: 3800 SIG: 9