Android Open Source - RoseInterface Device List Activity






From Project

Back to project page RoseInterface.

License

The source code is released under:

Copyright (c) 2012, Stephen H. Gerstacker All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions ar...

If you think the Android project RoseInterface listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package net.shortround.roseinterface;
//  w  ww  . ja  va2  s .c o m
import java.util.Set;

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.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

public class DeviceListActivity extends Activity {
  // Debugging
  @SuppressWarnings("unused")
  private static final String TAG = "DeviceListActivity";
  
  // Return Intent extra
  public static final String EXTRA_DEVICE_ADDRESS = "device_address";
  
  // Member fields
  private BluetoothAdapter bluetoothAdapter;
  private ArrayAdapter<String> pairedDevicesArrayAdapter;
  private ArrayAdapter<String> newDevicesArrayAdapter;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    // Setup the window
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    setContentView(R.layout.device_list);
    
    // Set result CANCELED in case the user backs out
    setResult(Activity.RESULT_CANCELED);
    
    // Initialize the button to perform device discovery
    Button scanButton = (Button) findViewById(R.id.button_scan);
    scanButton.setOnClickListener(new OnClickListener() {
      public void onClick(View v) {
        doDiscovery();
        v.setVisibility(View.GONE);
      }
    });
    
    // Initialize array adapters.  One for already paired devices and
    // one for newly discovered devices.
    pairedDevicesArrayAdapter = new ArrayAdapter<String>(this, R.layout.device_name);
    newDevicesArrayAdapter = new ArrayAdapter<String>(this, R.layout.device_name);
    
    // Find and set up the ListView for paired devices
    ListView pairedListView = (ListView) findViewById(R.id.paired_devices);
    pairedListView.setAdapter(pairedDevicesArrayAdapter);
    pairedListView.setOnItemClickListener(deviceClickListener);
    
    // Find and set up the ListView for newly discovered devices
    ListView newDeviceListView = (ListView) findViewById(R.id.new_devices);
    newDeviceListView.setAdapter(newDevicesArrayAdapter);
    newDeviceListView.setOnItemClickListener(deviceClickListener);
    
    // Register for broadcasts when a device is discovered
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    this.registerReceiver(receiver, filter);
    
    // Register for broadcasts when discover has finished
    filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
    this.registerReceiver(receiver, filter);
    
    // Get the local Bluetooth adapter
    bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    
    // Get a set of currently paired devices
    Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
    
    // If there are paired devices, add each one to the ArrayAdapter
    if (pairedDevices.size() > 0) {
      findViewById(R.id.title_paired_devices).setVisibility(View.VISIBLE);
      for (BluetoothDevice device : pairedDevices) {
        pairedDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress());
      }
    } else {
      String noDevices = getResources().getText(R.string.none_paired).toString();
      pairedDevicesArrayAdapter.add(noDevices);
    }
  }
  
  @Override
  protected void onDestroy() {
    super.onDestroy();
    
    // Make sure we're not doing discovery anymore
    if (bluetoothAdapter != null) {
      bluetoothAdapter.cancelDiscovery();
    }
    
    // Unregister broadcast listeners
    this.unregisterReceiver(receiver);
  }
  
  private void doDiscovery() {
    // Indicate scanning in the title
    setProgressBarIndeterminateVisibility(true);
    setTitle(R.string.scanning);
    
    // Turn on sub-title for new devices
    findViewById(R.id.title_new_devices).setVisibility(View.VISIBLE);
    
    // If we're already discovering, stop it
    if (bluetoothAdapter.isDiscovering()) {
      bluetoothAdapter.cancelDiscovery();
    }
    
    // Request discoer from Bluetooth Adapter
    bluetoothAdapter.startDiscovery();
  }
  
  private OnItemClickListener deviceClickListener = new OnItemClickListener() {
    public void onItemClick(AdapterView<?> av, View v, int arg2, long arg3) {
      // Cancel discovery because it's costly
      bluetoothAdapter.cancelDiscovery();
      
      // Get the device MAC address
      String info = ((TextView) v).getText().toString();
      String address = info.substring(info.length() - 17);
      
      // Create the result Intent and include the MAC address
      Intent intent = new Intent();
      intent.putExtra(EXTRA_DEVICE_ADDRESS, address);
      
      // Set result and finish this Activity
      setResult(Activity.RESULT_OK, intent);
      finish();
    }
  };
  
  private final BroadcastReceiver receiver = 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);
        // If it's already paired, skip it
        if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
          newDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress());
        }
      } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
        setProgressBarIndeterminateVisibility(false);
        setTitle(R.string.select_device);
        if (newDevicesArrayAdapter.getCount() == 0) {
          String noDevices = getResources().getText(R.string.none_found).toString();
          newDevicesArrayAdapter.add(noDevices);
        }
      }
    }
  };
}




Java Source Code List

net.shortround.roseinterface.BluetoothService.java
net.shortround.roseinterface.DeviceListActivity.java
net.shortround.roseinterface.RoseInterfaceActivity.java