changeset 7:5fbee00dbb66

merge
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sat, 01 Jun 2013 18:35:11 +0200
parents 1175afa0cd7b (current diff) 1ec9513a1f1b (diff)
children 1d9ebcb40456 3ba185e21a91
files
diffstat 8 files changed, 591 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/assets/www/Bluetooth.js	Sat Jun 01 18:35:11 2013 +0200
@@ -0,0 +1,115 @@
+/* Copyright (c) 2011 - Andago
+*
+* author: Daniel Tizon
+*
+* Licensed under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License. You may obtain a copy of
+* the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+* License for the specific language governing permissions and limitations under
+* the License.
+*/
+
+cordova.define("cordova/plugin/bluetooth",
+  function(require, exports, module) {
+    var exec = require("cordova/exec");
+
+    var Bluetooth = function() {};
+
+    /**
+    * @param argument Argument that we are going to pass to the plugin - for this method no arguments are needed
+    * @param successCallback The callback which will be called when listDevices is successful
+    * @param failureCallback The callback which will be called when listDevices encouters an error
+    */
+    Bluetooth.prototype.listDevices = function(argument,successCallback, failureCallback) {
+        exec(successCallback, failureCallback, 'BluetoothPlugin', 'listDevices', [argument]);
+    };
+    
+    /**
+    * @param argument Argument that we are going to pass to the plugin - for this method no arguments are needed
+    * @param successCallback The callback which will be called when listDevices is successful
+    * @param failureCallback The callback which will be called when listDevices encouters an error
+    */
+    Bluetooth.prototype.isBTEnabled = function(argument,successCallback, failureCallback) {
+        exec(successCallback, failureCallback, 'BluetoothPlugin', 'isBTEnabled', [argument]);
+    };
+    
+    /**
+    * @param argument Argument that we are going to pass to the plugin - for this method no arguments are needed
+    * @param successCallback The callback which will be called when listDevices is successful
+    * @param failureCallback The callback which will be called when listDevices encouters an error
+    */
+    Bluetooth.prototype.enableBT = function(argument,successCallback, failureCallback) {
+        exec(successCallback, failureCallback, 'BluetoothPlugin', 'enableBT', [argument]);
+    };
+    
+    /**
+    * @param argument Argument that we are going to pass to the plugin - for this method no arguments are needed
+    * @param successCallback The callback which will be called when listDevices is successful
+    * @param failureCallback The callback which will be called when listDevices encouters an error
+    */
+    Bluetooth.prototype.disableBT = function(argument,successCallback, failureCallback) {
+        exec(successCallback, failureCallback, 'BluetoothPlugin', 'disableBT', [argument]);
+    };
+
+    /**
+    * @param argument Argument that we are going to pass to the plugin, you need pass the MAC address of the bluetooth device with wich you want to pair
+    * @param successCallback The callback which will be called when listDevices is successful
+    * @param failureCallback The callback which will be called when listDevices encouters an error
+    */
+    Bluetooth.prototype.pairBT = function(argument,successCallback, failureCallback) {
+        exec(successCallback, failureCallback, 'BluetoothPlugin', 'pairBT', [argument]);
+    };
+    
+    /**
+    * @param argument Argument that we are going to pass to the plugin, you need pass the MAC address of the bluetooth device that you want unpair
+    * @param successCallback The callback which will be called when listDevices is successful
+    * @param failureCallback The callback which will be called when listDevices encouters an error
+    */
+    Bluetooth.prototype.unPairBT = function(argument,successCallback, failureCallback) {
+        exec(successCallback, failureCallback, 'BluetoothPlugin', 'unPairBT', [argument]);
+    };
+    
+    /**
+    * @param argument Argument that we are going to pass to the plugin - for this method no arguments are needed
+    * @param successCallback The callback which will be called when listDevices is successful
+    * @param failureCallback The callback which will be called when listDevices encouters an error
+    */
+    Bluetooth.prototype.listBoundDevices = function(argument,successCallback, failureCallback) {
+        exec(successCallback, failureCallback, 'BluetoothPlugin', 'listBoundDevices', [argument]);
+    };
+    
+    /**
+    * @param argument Argument that we are going to pass to the plugin - for this method no arguments are needed
+    * @param successCallback The callback which will be called when listDevices is successful
+    * @param failureCallback The callback which will be called when listDevices encouters an error
+    */
+    Bluetooth.prototype.stopDiscovering = function(argument,successCallback, failureCallback) {
+        exec(successCallback, failureCallback, 'BluetoothPlugin', 'stopDiscovering', [argument]);
+    };
+    
+    /**
+    * @param argument Argument that we are going to pass to the plugin, you need pass the MAC address of the mobile that you want to know if it is bound
+    * @param successCallback The callback which will be called when listDevices is successful
+    * @param failureCallback The callback which will be called when listDevices encouters an error
+    */
+    Bluetooth.prototype.isBound = function(argument,successCallback, failureCallback) {
+        exec(successCallback, failureCallback, 'BluetoothPlugin', 'isBound', [argument]);
+    };
+
+    var bluetooth = new Bluetooth();
+    module.exports = bluetooth;
+});
+
+
+if (!window.plugins) {
+    window.plugins = {};
+}
+if (!window.plugins.bluetooth) {
+    window.plugins.bluetooth = cordova.require("cordova/plugin/bluetooth");
+}
--- a/assets/www/index.html	Sat Jun 01 18:34:26 2013 +0200
+++ b/assets/www/index.html	Sat Jun 01 18:35:11 2013 +0200
@@ -23,21 +23,28 @@
     <title>Acceleration Example</title>
 
     <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
+    <script type="text/javascript" charset="utf-8" src="Bluetooth.js"></script>
     <script type="text/javascript" charset="utf-8">
 
     // Wait for Cordova to load
     //
     document.addEventListener("deviceready", onDeviceReady, false);
+    console.log('in');
 
     // Cordova is ready
     //
     function onDeviceReady() {
-        navigator.accelerometer.getCurrentAcceleration(onSuccess, onError);
+        plugin = cordova.require('cordova/plugin/bluetooth');
+        plugin.listDevices(null,
+                function(r){console.log(r)},
+                function(e){console.log(e)}
+                );
     }
+        //navigator.accelerometer.getCurrentAcceleration(onSuccess, onError);
 
     // onSuccess: Get a snapshot of the current acceleration
     //
-    function onSuccess(acceleration) {
+    /*function onSuccess(acceleration) {
         alert('Acceleration X: ' + acceleration.x + '\n' +
               'Acceleration Y: ' + acceleration.y + '\n' +
               'Acceleration Z: ' + acceleration.z + '\n' +
@@ -48,12 +55,10 @@
     //
     function onError() {
         alert('onError!');
-    }
+    }*/
 
     </script>
   </head>
   <body>
-    <h1>Example</h1>
-    <p>getCurrentAcceleration</p>
   </body>
 </html>
Binary file bin/classes/com/phonegap/plugin/bluetooth/Bluetooth.class has changed
Binary file bin/classes/com/phonegap/plugin/bluetooth/BluetoothPlugin$1.class has changed
Binary file bin/classes/com/phonegap/plugin/bluetooth/BluetoothPlugin.class has changed
--- a/res/xml/config.xml	Sat Jun 01 18:34:26 2013 +0200
+++ b/res/xml/config.xml	Sat Jun 01 18:35:11 2013 +0200
@@ -104,5 +104,6 @@
     <!-- Deprecated plugins element. Remove in 3.0 -->
     <plugins>
         <plugin name="Accelerometer" value="org.apache.cordova.AccelListener" />
+        <plugin name="BluetoothPlugin" value="com.phonegap.plugin.bluetooth.BluetoothPlugin"/>
     </plugins>
 </widget>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/com/phonegap/plugins/bluetooth/Bluetooth.java	Sat Jun 01 18:35:11 2013 +0200
@@ -0,0 +1,13 @@
+package com.phonegap.plugin.bluetooth;
+
+import org.apache.cordova.DroidGap;
+import android.os.Bundle;
+
+public class Bluetooth extends DroidGap {
+    /** Called when the activity is first created. */
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        super.loadUrl("file:///android_asset/www/index.html");
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/com/phonegap/plugins/bluetooth/BluetoothPlugin.java	Sat Jun 01 18:35:11 2013 +0200
@@ -0,0 +1,452 @@
+/* Copyright (c) 2011 - Andago
+ * 
+ * author: Daniel Tizon, Idoia Olalde, Iigo Gonzalez
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.phonegap.plugin.bluetooth;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Set;
+
+import org.apache.cordova.CordovaWebView;
+import org.apache.cordova.api.CallbackContext;
+import org.apache.cordova.api.CordovaInterface;
+import org.apache.cordova.api.CordovaPlugin;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import android.net.ConnectivityManager;
+import android.os.Looper;
+import android.util.Log;
+import org.apache.cordova.api.PluginResult;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+
+
+
+public class BluetoothPlugin extends CordovaPlugin {
+
+	private static final String LOG_TAG = "BluetoothPlugin";
+    public static final String ACTION_DISCOVER_DEVICES="listDevices";
+	public static final String ACTION_LIST_BOUND_DEVICES="listBoundDevices";
+	public static final String ACTION_IS_BT_ENABLED="isBTEnabled";
+	public static final String ACTION_ENABLE_BT="enableBT";
+	public static final String ACTION_DISABLE_BT="disableBT";
+	public static final String ACTION_PAIR_BT="pairBT";
+	public static final String ACTION_UNPAIR_BT="unPairBT";
+	public static final String ACTION_STOP_DISCOVERING_BT="stopDiscovering";
+	public static final String ACTION_IS_BOUND_BT="isBound";
+	private static BluetoothAdapter btadapter;	
+	private ArrayList<BluetoothDevice> found_devices;
+	private boolean discovering=false;
+	private Context context;
+	
+	/* (non-Javadoc)
+	 * @see com.phonegap.api.Plugin#execute(java.lang.String, org.json.JSONArray, java.lang.String)
+	 */
+    private CallbackContext callbackContext;
+
+    public void initialize(CordovaInterface cordova, CordovaWebView webView) {
+        super.initialize(cordova, webView);
+        context = this.cordova.getActivity().getBaseContext();
+        
+        // Register for broadcasts when a device is discovered
+        IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
+        context.registerReceiver(mReceiver, filter);
+      
+        // Register for broadcasts when discovery starts
+        filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
+        context.registerReceiver(mReceiver, filter);
+      
+        // Register for broadcasts when discovery has finished
+        filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
+        context.registerReceiver(mReceiver, filter);  
+             
+        // Register for broadcasts when connectivity state changes
+        filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
+        context.registerReceiver(mReceiver, filter);  
+    }
+    
+    @Override
+    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) {
+		Log.d(LOG_TAG, "Plugin Called");
+		this.callbackContext = callbackContext;
+		PluginResult result = null;
+       
+		//Looper.prepare();
+		btadapter= BluetoothAdapter.getDefaultAdapter();
+		found_devices=new ArrayList<BluetoothDevice>(); 
+		
+		if (ACTION_DISCOVER_DEVICES.equals(action)) {
+			try {
+				
+				Log.d(LOG_TAG, "We're in "+ACTION_DISCOVER_DEVICES);
+				
+				found_devices.clear();
+				discovering=true;
+				
+		        if (btadapter.isDiscovering()) {
+		        	btadapter.cancelDiscovery();
+		        }
+		        
+                Log.i(LOG_TAG,"Discovering devices...");
+                btadapter.startDiscovery();     
+				
+				result = new PluginResult(PluginResult.Status.NO_RESULT);
+                result.setKeepCallback(true);
+			} catch (Exception Ex) {
+				Log.d("BluetoothPlugin - "+ACTION_DISCOVER_DEVICES, "Got Exception "+ Ex.getMessage());
+				result = new PluginResult(PluginResult.Status.ERROR);
+			}
+			
+			
+			
+			
+			
+		} else 	if (ACTION_IS_BT_ENABLED.equals(action)) {
+			try {							
+				Log.d(LOG_TAG, "We're in "+ACTION_IS_BT_ENABLED);
+				
+				boolean isEnabled = btadapter.isEnabled();
+				
+				Log.d("BluetoothPlugin - "+ACTION_IS_BT_ENABLED, "Returning "+ "is Bluetooth Enabled? "+isEnabled);
+				result = new PluginResult(PluginResult.Status.OK, isEnabled);
+			} catch (Exception Ex) {
+				Log.d("BluetoothPlugin - "+ACTION_IS_BT_ENABLED, "Got Exception "+ Ex.getMessage());
+				result = new PluginResult(PluginResult.Status.ERROR);
+			}
+		
+			
+			
+			
+			
+		} else 	if (ACTION_ENABLE_BT.equals(action)) {
+			try {							
+				Log.d(LOG_TAG, "We're in "+ACTION_ENABLE_BT);
+				
+				boolean enabled = false;
+				
+				Log.d(LOG_TAG, "Enabling Bluetooth...");
+				
+				if (btadapter.isEnabled())
+				{
+				  enabled = true;
+				} else {
+				  enabled = btadapter.enable();
+				}
+
+				
+				Log.d("BluetoothPlugin - "+ACTION_ENABLE_BT, "Returning "+ "Result: "+enabled);
+				result = new PluginResult(PluginResult.Status.OK, enabled);
+			} catch (Exception Ex) {
+				Log.d("BluetoothPlugin - "+ACTION_ENABLE_BT, "Got Exception "+ Ex.getMessage());
+				result = new PluginResult(PluginResult.Status.ERROR);
+			}
+			
+			
+			
+			
+			
+		} else 	if (ACTION_DISABLE_BT.equals(action)) {
+			try {							
+				Log.d(LOG_TAG, "We're in "+ACTION_DISABLE_BT);
+				
+				boolean disabled = false;
+				
+				Log.d(LOG_TAG, "Disabling Bluetooth...");
+				
+				if (btadapter.isEnabled())
+				{
+					disabled = btadapter.disable();
+				} else {
+					disabled = true;
+				}				
+								
+				Log.d("BluetoothPlugin - "+ACTION_DISABLE_BT, "Returning "+ "Result: "+disabled);
+				result = new PluginResult(PluginResult.Status.OK, disabled);
+			} catch (Exception Ex) {
+				Log.d("BluetoothPlugin - "+ACTION_DISABLE_BT, "Got Exception "+ Ex.getMessage());
+				result = new PluginResult(PluginResult.Status.ERROR);
+			}
+			
+			
+			
+			
+						
+		} else 	if (ACTION_PAIR_BT.equals(action)) {
+			try {							
+				Log.d(LOG_TAG, "We're in "+ACTION_PAIR_BT);
+				
+				String addressDevice = args.getString(0);
+				
+				if (btadapter.isDiscovering()) {
+		        	btadapter.cancelDiscovery();
+		        }
+
+				BluetoothDevice device = btadapter.getRemoteDevice(addressDevice);
+				boolean paired = false;
+							
+				Log.d(LOG_TAG,"Pairing with Bluetooth device with name " + device.getName()+" and address "+device.getAddress());
+		          	
+				try {
+					Method m = device.getClass().getMethod("createBond");
+					paired = (Boolean) m.invoke(device);					
+				} catch (Exception e) 
+				{
+					e.printStackTrace();
+				}  
+				
+				
+				Log.d("BluetoothPlugin - "+ACTION_PAIR_BT, "Returning "+ "Result: "+paired);
+				result = new PluginResult(PluginResult.Status.OK, paired);
+			} catch (Exception Ex) {
+				Log.d("BluetoothPlugin - "+ACTION_PAIR_BT, "Got Exception "+ Ex.getMessage());
+				result = new PluginResult(PluginResult.Status.ERROR);
+			}
+			
+			
+			
+			
+						
+		} else 	if (ACTION_UNPAIR_BT.equals(action)) {
+			try {							
+				Log.d(LOG_TAG, "We're in "+ACTION_UNPAIR_BT);
+				
+				String addressDevice = args.getString(0);
+				
+				if (btadapter.isDiscovering()) {
+		        	btadapter.cancelDiscovery();
+		        }
+
+				BluetoothDevice device = btadapter.getRemoteDevice(addressDevice);
+				boolean unpaired = false;
+							
+				Log.d(LOG_TAG,"Unpairing Bluetooth device with " + device.getName()+" and address "+device.getAddress());
+		          	
+				try {
+					Method m = device.getClass().getMethod("removeBond");
+					unpaired = (Boolean) m.invoke(device);					
+				} catch (Exception e) 
+				{
+					e.printStackTrace();
+				}  
+				
+				
+				Log.d("BluetoothPlugin - "+ACTION_UNPAIR_BT, "Returning "+ "Result: "+unpaired);
+				result = new PluginResult(PluginResult.Status.OK, unpaired);
+			} catch (Exception Ex) {
+				Log.d("BluetoothPlugin - "+ACTION_UNPAIR_BT, "Got Exception "+ Ex.getMessage());
+				result = new PluginResult(PluginResult.Status.ERROR);
+			}
+			
+			
+			
+			
+						
+		} else 	if (ACTION_LIST_BOUND_DEVICES.equals(action)) {
+			try {							
+				Log.d(LOG_TAG, "We're in "+ACTION_LIST_BOUND_DEVICES);
+				
+				Log.d(LOG_TAG,"Getting paired devices...");
+				Set<BluetoothDevice> pairedDevices = btadapter.getBondedDevices();
+				int count =0;	
+				String resultBoundDevices="[ ";
+				if (pairedDevices.size() > 0) {					
+					for (BluetoothDevice device : pairedDevices) 
+					{						
+						Log.i(LOG_TAG,device.getName() + " "+device.getAddress()+" "+device.getBondState());
+						
+						if ((device.getName()!=null) && (device.getBluetoothClass()!=null)){
+							resultBoundDevices = resultBoundDevices + " { \"name\" : \"" + device.getName() + "\" ," +
+				   				"\"address\" : \"" + device.getAddress() + "\" ," +
+				   				"\"class\" : \"" + device.getBluetoothClass().getDeviceClass() + "\" }";
+							 if (count<pairedDevices.size()-1) resultBoundDevices = resultBoundDevices + ",";					   
+						} else Log.i(LOG_TAG,device.getName() + " Problems retrieving attributes. Device not added ");
+						 count++;
+					 }			    
+					
+				}
+				
+				resultBoundDevices= resultBoundDevices + "] ";
+				
+				Log.d("BluetoothPlugin - "+ACTION_LIST_BOUND_DEVICES, "Returning "+ resultBoundDevices);
+				result = new PluginResult(PluginResult.Status.OK, resultBoundDevices);
+				
+			} catch (Exception Ex) {
+				Log.d("BluetoothPlugin - "+ACTION_LIST_BOUND_DEVICES, "Got Exception "+ Ex.getMessage());
+				result = new PluginResult(PluginResult.Status.ERROR);
+			}	
+			
+			
+			
+			
+			
+		} else 	if (ACTION_STOP_DISCOVERING_BT.equals(action)) {
+			try {							
+				Log.d(LOG_TAG, "We're in "+ACTION_STOP_DISCOVERING_BT);
+				
+				boolean stopped = true;
+				
+				Log.d(LOG_TAG, "Stop Discovering Bluetooth Devices...");
+				
+				if (btadapter.isDiscovering())
+				{
+					Log.i(LOG_TAG,"Stop discovery...");	
+					stopped = btadapter.cancelDiscovery();
+		        	discovering=false;
+				}				
+				
+			
+				Log.d("BluetoothPlugin - "+ACTION_STOP_DISCOVERING_BT, "Returning "+ "Result: "+stopped);
+				result = new PluginResult(PluginResult.Status.OK, stopped);
+			} catch (Exception Ex) {
+				Log.d("BluetoothPlugin - "+ACTION_STOP_DISCOVERING_BT, "Got Exception "+ Ex.getMessage());
+				result = new PluginResult(PluginResult.Status.ERROR);
+			}
+			
+			
+			
+			
+			
+		} else 	if (ACTION_IS_BOUND_BT.equals(action)) {
+			try {							
+				Log.d(LOG_TAG, "We're in "+ACTION_IS_BOUND_BT);
+				String addressDevice = args.getString(0);
+				BluetoothDevice device = btadapter.getRemoteDevice(addressDevice);
+				Log.i(LOG_TAG,"BT Device in state "+device.getBondState());	
+				
+				boolean state = false;
+				
+				if (device!=null && device.getBondState()==12) 
+					state =  true;
+				else
+					state = false;
+				
+				Log.d(LOG_TAG,"Is Bound with " + device.getName()+" - address "+device.getAddress());
+		          				
+				
+				Log.d("BluetoothPlugin - "+ACTION_IS_BOUND_BT, "Returning "+ "Result: "+state);
+				result = new PluginResult(PluginResult.Status.OK, state);
+				
+				
+			} catch (Exception Ex) {
+				Log.d("BluetoothPlugin - "+ACTION_IS_BOUND_BT, "Got Exception "+ Ex.getMessage());
+				result = new PluginResult(PluginResult.Status.ERROR);
+			}
+			
+			
+			
+		
+		
+		} else {
+			result = new PluginResult(PluginResult.Status.INVALID_ACTION);
+			Log.d(LOG_TAG, "Invalid action : "+action+" passed");
+		}
+		this.callbackContext.sendPluginResult(result);
+		return true;
+	}
+	
+	
+	
+	
+	public void setDiscovering(boolean state){
+		discovering=state;
+	}
+
+	
+	
+	public void addDevice(BluetoothDevice device){		
+		if (!found_devices.contains(device))
+		{
+			Log.i(LOG_TAG,"Device stored ");
+			found_devices.add(device);
+		}
+	}
+	
+	
+	
+    @Override
+	public void onDestroy() {
+		// TODO Auto-generated method stub
+    	Log.i(LOG_TAG,"onDestroy "+this.getClass());
+    	context.unregisterReceiver(mReceiver);
+    	super.onDestroy();
+	}
+	
+	
+    
+    /** BroadcastReceiver to receive bluetooth events */    
+	private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+	    public void onReceive(Context context, Intent intent) 
+	    {
+	    	
+	        String action = intent.getAction();
+	        Log.i(LOG_TAG,"Action: "+action);
+	        
+	        // 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);
+	            Log.i(LOG_TAG,"Device found "+device.getName()+ " "+device.getBondState()+" " + device.getAddress());
+	       
+	            if (device.getBondState() != BluetoothDevice.BOND_BONDED) {	
+	            	Log.i(LOG_TAG,"Device not paired");
+	            	addDevice(device);
+	            }else Log.i(LOG_TAG,"Device already paired");	         
+	         
+	        // When discovery starts	
+	        }else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
+	        	
+	        	Log.i(LOG_TAG,"Discovery started");
+	        	setDiscovering(true);
+	        	
+	        // When discovery finishes	
+            }else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
+            	
+            	Log.i(LOG_TAG,"Discovery finilized");
+            	setDiscovering(false);
+            	JSONArray devicesFound = new JSONArray();
+                for (BluetoothDevice device : found_devices) {
+                    Log.i(LOG_TAG,device.getName() + " "+device.getAddress()+" "+device.getBondState());
+                    if ((device.getName()!=null) && (device.getBluetoothClass()!=null)) {
+                        JSONObject theDevice = new JSONObject();
+                        try {
+                            theDevice.put("name", device.getName());
+                            theDevice.put("address", device.getAddress());
+                            theDevice.put("class", device.getBluetoothClass().getDeviceClass());
+                            devicesFound.put(theDevice);
+                        } catch (JSONException e) {
+                            Log.e(LOG_TAG, e.getMessage(), e);
+                        }
+                    } else {
+                        Log.i(LOG_TAG,device.getName() + " Problems retrieving attributes. Device not added ");
+                    }
+                }   
+                
+                Log.d("BluetoothPlugin - "+ACTION_DISCOVER_DEVICES, "Returning: "+ devicesFound);
+                PluginResult result = new PluginResult(PluginResult.Status.OK, devicesFound);
+                callbackContext.sendPluginResult(result);	
+            }
+	    }
+    };
+
+}