Bluetooth startActivity метод для Bluetooth намерения - PullRequest
3 голосов
/ 03 августа 2011

Eclipse продолжает требовать от меня определения метода startActivity, но я понятия не имею, что поместить в этот метод. В моем androidmanifest.xml уже включен Bluetooth.

Я предоставил отрывок из моего кода ниже:

public int enable() {
    if ( isSupported() ==  false)
        return BT_NOT_AVAILABLE;

    if ( isEnabled() == true)
        return Activity.RESULT_OK;
    //start
    if ( isEnabled() == false)
    {
        Intent intentBluetooth = new Intent();
        intentBluetooth.setAction(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS);
        startActivity(intentBluetooth);

        //Intent enableBTIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        //startActivityForResult(enableBTIntent, 1);
    }


public class BTConnection {

// Constants
public final static int BT_NOT_AVAILABLE = 0;   // BT is not available on device.
public final static int BT_NOT_ENABLED = 1;     // BT is not enabled on device.


BluetoothAdapter m_adapter;

/**
 * Default constructor
 */
public BTConnection() {
    m_adapter = BluetoothAdapter.getDefaultAdapter();
}
/**
 * Returns whether Bluetooth is supported on this device or not.
 * @return - True if BT is supported, false otherwise.
 */
public boolean isSupported() {

    if ( m_adapter ==  null)
        return false;

    return true;
}




/**
 * Returns whether Bluetooth is enabled on the device or not.
 * @return - True if BT is enabled, false otherwise.
 */
public boolean isEnabled() {
    if ( isSupported() ==  false)
        return false;

    return m_adapter.isEnabled();
}

/**
 * Enabled Bluetooth on the device if not already enabled.
 * Does nothing is BT is not available on the device or is
 * already enabled. This does not prompt user - the proper
 * way to enable is not to use this method, but instead use
 * intents from your activity to enable BT.
 * See http://developer.android.com/guide/topics/wireless/bluetooth.html
 * @return - Activity.RESULT_OK if BT is enabled, 
 *           Activity.RESULT_CANCELED if user canceled the operation.
 *           BT_NOT_AVAILABLE if BT is not available on device.      
 */
// Jerrell Jones
public int enable() {
    if ( isSupported() ==  false)
        return BT_NOT_AVAILABLE;

    if ( isEnabled() == true)
        return Activity.RESULT_OK;
    //start
    if ( isEnabled() == false)
    {
        Intent intentBluetooth = new Intent();
        intentBluetooth.setAction(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS);
        startActivity(intentBluetooth);

        //Intent enableBTIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        //startActivityForResult(enableBTIntent, 1);
    }
    //stop
    if ( m_adapter.enable() )
        return Activity.RESULT_OK;



    return Activity.RESULT_CANCELED;
}

//private void startActivityForResult(Intent enableBTIntent, int i) {
    // TODO Auto-generated method stub

//}
/**
 * Gets already paired Bluetooth devices.
 * @return Set of Bluetooth devices.
 */
public Set<BluetoothDevice> getPairedDevices() {
    Set<BluetoothDevice> pairedDevices = m_adapter.getBondedDevices();
    return pairedDevices;
}

/**
 * Gets the bluetooth device using the address.
 * @param address - Address of BT device.
 * @return - BT device object if connected, null otherwise.
 */
public BluetoothDevice getDevice(String address) {
    if ( isSupported() ==  false)
        return null;

    if ( isEnabled() == false)
        return null;

    //place intent action here

    BluetoothDevice device = m_adapter.getRemoteDevice(address);


    return device;
}


private void doDeviceSelection() {
    // Enable BT if not already done
    BTConnection bt = new BTConnection(context);
    if (bt.isSupported() == false) {
        setResult(Activity.RESULT_CANCELED, null);
        finish();
        return;
    }

    if (bt.isEnabled() == false) {
        /*Intent enableBtIntent = new Intent(
                BluetoothAdapter.ACTION_REQUEST_ENABLE);

        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT_READ);
    */


                /*Intent intentBluetooth = new Intent();
        intentBluetooth.setAction(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS);
        context.startActivity(intentBluetooth);
        return;
        */
    }

    selectDevice(REQUEST_CONNECT_DEVICE_READ);
}

`

1 Ответ

2 голосов
/ 03 августа 2011

Попробуйте удалить переопределенный метод и скомпилировать / запустить. Нет причин, по которым вам следует переопределять метод startActivity. Если он не запускается, опубликуйте ошибку. Кроме того - расширяет ли ваш класс какой-то базовый класс Activity? Такие, как ListActivity или что-то?

РЕДАКТИРОВАТЬ: О, я вижу потенциальную проблему. Ваш класс НЕ расширяет активность, поэтому у вас нет доступа к вспомогательному методу startActivity (). Вам нужно передать свой основной контекст Activity через конструктор BTConnection, а затем вызвать context.startActivity (...).

Пример:

BluetoothAdapter m_adapter;
Context context;

/**
 * Default constructor
 */
public BTConnection(Context c) {
    m_adapter = BluetoothAdapter.getDefaultAdapter();
    context = c;
}

И в вашем методе enable ():

if ( isEnabled() == false)
    {
        Intent intentBluetooth = new Intent();
        intentBluetooth.setAction(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS);
        context.startActivity(intentBluetooth);

        //Intent enableBTIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        //startActivityForResult(enableBTIntent, 1);
    }
...