-> android-platform

On 15 Dez., 13:15, Narseo Vallina <[email protected]> wrote:
> Hi all
>
> I'm working on a research project and I need to have a system service
> running as an android component and one of it's features is performing
> bluetooth scans in the environment.
>
> I have the following code to discover bluetooth devices (taken from
> BluetoothChat example). I tried it as an application and it worked but
> once I'm adding it as a feature of my system service it does not work.
> I'm not sure if I'm declaring the intents properly or if I need to set
> up the permissions for my system service somewhere. Does any of you
> tried to do something similar?
>
> The erros I get are:
>
> E/ErdMngr(   88): Error starting enable BT intent: No Activity found
> to handle Intent { act=android.bluetooth.adapter.action.REQUEST_ENABLE
> flg=0x10000000 }
>
> E/ErdMngr(   88): Error starting enable BT intent: No Activity found
> to handle Intent { act=android.bluetooth.adapter.action.REQUEST_ENABLE
> flg=0x10000000 }
>
> E/ErdMngr ( 88) Error ensuring BT device is discoverable: No Activity
> found to handle Intent
> { act=android.bluetooth.adapter.action.REQUEST_DISCOVERABLE
> flg=0x10000000 (has extras) }
>
> D/ErdMngr(   88): Bluetooth discovering
> I/ActivityManager(   88): Starting activity: Intent
> { act=android.bluetooth.adapter.action.REQUEST_DISCOVERABLE
> flg=0x10000000 (has extras) }
>
> And the code:
>
> //In run (for the thread), I define the intents:
>         IntentFilter intentFilter = new IntentFilter();
>         intentFilter.addAction(ALARM_WAKEUP);
>         intentFilter.addAction(ALARM_TIMEOUT);
>         intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
>
> intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
>         mContext.registerReceiver(mBroadcastReciever, intentFilter);
>
> //And then it calls a method to start bluetooth
>         private void loadInterfaces(){
>
>                 Log.d(TAG, "Loading interfaces");
>                 //At this point, interfaces must be ready
>
>                 mBtAdapter = BluetoothAdapter.getDefaultAdapter();
>                 try{
>                         //Enable interface
>                         enableBluetooth();
>                 }
>                 catch(Exception e){
>                         Log.e(TAG, "Failed to enable interface");
>                 }
>                 try{
>                         //Ensure interface is discoverable
>                         ensureBluetoothDiscoverability();
>                 }
>                 catch(Exception e){
>                         Log.e(TAG, "Failed to set BT interface discoverable");
>                 }
>
>         }
>
>         private void enableBluetooth(){
>                 Log.d(TAG, "enableBluetooth()");
>                 if(!mBtAdapter.isEnabled()){
>                         Intent enableBtIntent = new Intent
> (BluetoothAdapter.ACTION_REQUEST_ENABLE);
>                         
> enableBtIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
>                 try{
>                         mContext.startActivity(enableBtIntent);
>                 }
>                 catch(Exception e){
>                         Log.e(TAG, "Error starting enable BT intent: 
> "+e.getMessage());
>                 }
>
>                 }
>                 else{
>                         Log.e(TAG, "BT Interface already enabled");
>                 }
>         }
>
>         private void ensureBluetoothDiscoverability(){
>                 Log.d(TAG, "Ensuring bluetoot is discoverable");
>                 if(mBtAdapter.getScanMode()!=
> BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE){
>                         Log.e(TAG, "Device was not in discoverable mode");
>                         Intent discoverableIntent = new
> Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
>
> discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,
> 300);
>
>                         //Without specifying the flags, it returns the 
> exception: "Calling
> startActivity() from outside of an Activity  context requires the
> FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?"
>                         
> discoverableIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
>                         try{
>                                 mContext.startActivity(discoverableIntent);
>                                 Log.d(TAG, "Device set up as discoverable");
>                         }
>                         catch(Exception e){
>                                 Log.e(TAG, "Error ensuring BT device is 
> discoverable:
> "+e.getMessage());
>                         }
>                 }
>                 else{
>                         Log.e(TAG, "Device already discoverable");
>                 }
>         }
>
>         //TODO: It should specify which interface to use (argument)
>         private void startDiscovery(){
>
>                 if (mBtAdapter.isDiscovering()){
>                         Log.e(TAG, "BT Interface already discovering. 
> Cancelling");
>                         mBtAdapter.cancelDiscovery();
>                 }
>                 ensureBluetoothDiscoverability();
>
>                 try{
>                         mBtAdapter.startDiscovery();
>                         Log.d(TAG, "Bluetooth discovering");
>                 }
>                 catch(Exception e){
>                         Log.e(TAG, "Error when starting bluetooth discovery:
> "+e.getMessage());
>                 }
>         }
>
> I've tried both with an HTC G1 and a Nexus one and in both cases I get
> the same error (so it's not a platform issue as I initially thought).
> I guess that there's an specific difference of using bluetooth as if
> it were a System Service compared to an standard app (there's no
> manifest for the permissions?). The Bluetooth indicator never appears
> in the screen as with the application.
>
> Any indication will be very welcome!
>
> Many thanks,
>
> N

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to