Android - Issues with using Library Activity in another Application

48 views Asked by At

I have made an application that allows many-to-one communication using Bluetooth and it is working perfectly fine. Now, i wanted to use the service of the application in another application (e.g. Discovering Devices, Connecting to Device). So, I marked my project as library and added it as library in my new project. However, when i call the Discovering Device Activity (Available in library) from the application, the activity starts, but it doesn't discovers the devices ? Can someone help on this ?

I have included all the library project activity and permissions in my app's manifest.

Here is the sample code for the same -

In Library -

This is how the DeviceListActivity Looks like -

`

public class DeviceListActivity extends Activity{
String insecure="8ce255c0-200a-11e0-ac64-0800200c9a66";
private int flag=0;
int flag_toast=0;
ArrayList<Pair<String,String>> x=new ArrayList<Pair<String,String>>();
private static final String TAG = "DeviceListActivity";
ArrayList<String> temp=new ArrayList<String>();
Map<String, String> services = new HashMap<String, String>();
/**
 * Return Intent extra
 */
public static String EXTRA_DEVICE_ADDRESS = "device_address";

/**
 * Member fields
 */
private BluetoothAdapter mBtAdapter;

/**
 * Newly discovered devices
 */
ImageView animation;
private ArrayList<BluetoothDevice> btDeviceList = new ArrayList<BluetoothDevice>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Setup the window
   // requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    setContentView(R.layout.activity_device_list);

    // Set result CANCELED in case the user backs out
    setResult(Activity.RESULT_CANCELED);

    // Initialize the button to perform device discovery
    animation=(ImageView)findViewById(R.id.imageAnimation);
    /*scanButton.setOnClickListener(new View.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
    //ArrayAdapter<String> pairedDevicesArrayAdapter =new ArrayAdapter<String>(this, R.layout.device_name);
    //mNewDevicesArrayAdapter = new ArrayAdapter<String>(this, R.layout.device_name);
    //Register for broadcasts when a device is discovered
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    filter.addAction(BluetoothDevice.ACTION_UUID);
    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
    registerReceiver(mReceiver, filter);
    /* this.registerReceiver(mReceiver, filter);

    // Register for broadcasts when discovery has finished
    filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
    this.registerReceiver(mReceiver, filter);
    */
    // Get the local Bluetooth adapter
    mBtAdapter = BluetoothAdapter.getDefaultAdapter();
    animation.setBackgroundResource(R.drawable.animation);
    doDiscovery();
}

@Override
protected void onDestroy() {
    super.onDestroy();

    // Make sure we're not doing discovery anymore
    if (mBtAdapter != null) {
        mBtAdapter.cancelDiscovery();
    }

    // Unregister broadcast listeners
    this.unregisterReceiver(mReceiver);
}

/**
 * Start device discover with the BluetoothAdapter
 */
public void doDiscovery() {
    Log.d(TAG, "doDiscovery()");    
    // If we're already discovering, stop it
    if (mBtAdapter.isDiscovering()) {
        mBtAdapter.cancelDiscovery();
    }

    // Request discover from BluetoothAdapter
    mBtAdapter.startDiscovery();
}
private void connect_automatic(String name){
    flag++;
    Log.d(name,"Called " + Integer.toString(flag)+" times");
    Log.d("Flag is = ",Integer.toString(flag));
    int i,j;
    for(i=0;i<x.size();i++){
        for (j=i+1;j<x.size();j++)
            if (x.get(i).getFirst().equals(x.get(j).getFirst())==true && x.get(i).getSecond().equals(x.get(j).getSecond())==true)
                x.remove(j);
    }
    for(i=0;i<x.size();i++){
          Log.d("Found "+x.get(i).getFirst(),x.get(i).getSecond());
    }
    Log.d("Size =",Integer.toString(x.size()));
    if (x.size()>=1){
        Log.d("Size is =",Integer.toString(x.size()));
        String address = x.get(0).getFirst();
        if (flag_toast==0)
            Toast.makeText(DeviceListActivity.this, "Merchant Found", Toast.LENGTH_SHORT).show();
        flag_toast++;
        Log.d("Connecting to ",x.get(0).getFirst());
        // 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();
    }
}
/**
 * The BroadcastReceiver that listens for discovered devices and changes the title when
 * discovery is finished
 */
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
            flag++;
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            // If it's already paired, skip it, because it's been listed already
            //mNewDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress());
            btDeviceList.add(device);     
            // When discovery is finished, change the Activity title
        } 
        else
        {
            Log.d("Action=",action.toString());
            if(BluetoothDevice.ACTION_UUID.equals(action)) {
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            Parcelable[] uuidExtra = intent.getParcelableArrayExtra(BluetoothDevice.EXTRA_UUID);
            if(uuidExtra!=null)
                for (int i=0; i<uuidExtra.length; i++) {
                    if(uuidExtra[i].toString().length()>0){  
                        Log.d("\n  Device: " + device.getName() + ", " + device, ", Service: " + uuidExtra[i].toString());
                        //  services.put(device.getName(), uuidExtra[i].toString());
                        //flag=btDeviceList.size();

                        if (/*uuidExtra[i].toString().equals(secure)==true ||*/ uuidExtra[i].toString().equals(insecure)==true){
                            Pair<String,String> t=new Pair<String, String>(device.getAddress(), uuidExtra[i].toString());
                            x.add(t);

                        }
                        //connect_automatic();
                    }
                }
            Log.d("Device List =",Integer.toString(flag));
            connect_automatic(device.getName());

            //Log.d("Boolean",Boolean.toString(services.isEmpty()))
            } 
            else
            {
              if(BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
                  Log.d("Discovery","Started...");
              } 
              else 
              {
                  if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
                      Log.d("Discover","Finished");
                      //setProgressBarIndeterminateVisibility(false);
                      Iterator<BluetoothDevice> itr = btDeviceList.iterator();
                      while (itr.hasNext()) {
                            // Get Services for paired devices
                            BluetoothDevice device = itr.next();
                            temp.add(device.getName());
                            Log.d("ok","Getting Services for " + device.getName() + ", " + device);
                            if(!device.fetchUuidsWithSdp()) {
                                Log.d("!ok","SDP Failed for " + device.getName());
                            } 
                            else{
                                Log.d("SDP Passed for ",device.getName());
                            }
                      }
                      //connect_automatic();
                  }
              }
            }
        }
    }
};}`

And here is how i call it in my new application -

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (mBluetoothAdapter != null) { ensureDiscoverable(); Intent intent = new Intent(this, DeviceListActivity.class); startActivityForResult(intent, REQUEST_CONNECT_DEVICE_INSECURE); }
}

0

There are 0 answers