web-dev-qa-db-ja.com

androidでプログラムでbluetoothを有効/無効にする方法

プログラムを介してbluetoothを有効/無効にします。次のコードがあります。

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();    
if (!mBluetoothAdapter.isEnabled()) {
        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);

ただし、このコードはSDK 1.5では機能しません。どうすればそれを機能させることができますか?

98
user458295

Android BluetoothAdapter docsは、APIレベル5以降で利用可能であると述べています。 APIレベル5 はAndroid 2.0です。

Bluetooth APIのバックポートを使用して試すことができます(個人的には試していません): http://code.google.com/p/backport-Android-bluetooth/

29
James Schek

このコードは私のために働いた..

//Disable bluetooth
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();    
if (mBluetoothAdapter.isEnabled()) {
    mBluetoothAdapter.disable(); 
} 

これが機能するには、次の権限が必要です。

<uses-permission Android:name="Android.permission.BLUETOOTH"/>
<uses-permission Android:name="Android.permission.BLUETOOTH_ADMIN"/>
153
prijin

enable()\disable()メソッドの戻り値も処理する、これを行うもう少し堅牢な方法を次に示します。

public static boolean setBluetooth(boolean enable) {
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    boolean isEnabled = bluetoothAdapter.isEnabled();
    if (enable && !isEnabled) {
        return bluetoothAdapter.enable(); 
    }
    else if(!enable && isEnabled) {
        return bluetoothAdapter.disable();
    }
    // No need to change bluetooth state
    return true;
}

マニフェストファイルに次のアクセス許可を追加します。

<uses-permission Android:name="Android.permission.BLUETOOTH"/>
<uses-permission Android:name="Android.permission.BLUETOOTH_ADMIN"/>

ただし、次の重要な点に注意してください。

これは非同期呼び出しです。すぐに戻り、クライアントはACTION_STATE_CHANGEDを​​リッスンして、後続のアダプター状態の変更を通知する必要があります。この呼び出しがtrueを返す場合、アダプターの状態はすぐにSTATE_OFFからSTATE_TURNING_ONに移行し、しばらくしてからSTATE_OFFまたはSTATE_ONに移行します。この呼び出しがfalseを返した場合、飛行機モードなど、アダプターがオンにならない、またはアダプターが既にオンになっているなど、アダプターにすぐに問題が発生しました。

更新:

では、Bluetoothリスナーを実装する方法を教えてください。

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();

        if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
            final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
                                                 BluetoothAdapter.ERROR);
            switch (state) {
            case BluetoothAdapter.STATE_OFF:
                // Bluetooth has been turned off;
                break;
            case BluetoothAdapter.STATE_TURNING_OFF:
                // Bluetooth is turning off;
                break;
            case BluetoothAdapter.STATE_ON:
                // Bluetooth has been on
                break;
            case BluetoothAdapter.STATE_TURNING_ON:
                // Bluetooth is turning on
                break;
            }
        }
    }
};

そして、レシーバーを登録/登録解除する方法は? (Activityクラス内)

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // ...

    // Register for broadcasts on BluetoothAdapter state change
    IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
    registerReceiver(mReceiver, filter);
}

@Override
public void onStop() {
    super.onStop();

     // ...

    // Unregister broadcast listeners
    unregisterReceiver(mReceiver);
}
85
Caner

Bluetoothを有効にするには、次の機能のいずれかを使用できます。

 public void enableBT(View view){
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (!mBluetoothAdapter.isEnabled()){
        Intent intentBtEnabled = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
        // The REQUEST_ENABLE_BT constant passed to startActivityForResult() is a locally defined integer (which must be greater than 0), that the system passes back to you in your onActivityResult() 
        // implementation as the requestCode parameter. 
        int REQUEST_ENABLE_BT = 1;
        startActivityForResult(intentBtEnabled, REQUEST_ENABLE_BT);
        }
  }

2番目の機能は次のとおりです。

public void enableBT(View view){
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (!mBluetoothAdapter.isEnabled()){
        mBluetoothAdapter.enable();
    }
}

違いは、最初の機能がアプリにユーザーにBluetoothをオンにするか拒否するかを許可することです。 2番目の機能により、アプリはBluetoothを直接オンにします。

Bluetoothを無効にするには、次の機能を使用します。

public void disableBT(View view){
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (mBluetoothAdapter.isEnabled()){
        mBluetoothAdapter.disable();
    }
}

注/最初の関数は、AndroidManifest.xmlファイルで定義される次の権限のみを必要とします。

<uses-permission Android:name="Android.permission.BLUETOOTH"/>

一方、2番目と3番目の機能には次の権限が必要です。

<uses-permission Android:name="Android.permission.BLUETOOTH"/>
<uses-permission Android:name="Android.permission.BLUETOOTH_ADMIN"/>
22
Ahmed Alnabhan

Prijinのソリューションは私にとって完璧に機能しました。次の2つの追加のアクセス許可が必要であることを言及するだけです。

<uses-permission Android:name="Android.permission.BLUETOOTH"/>
<uses-permission Android:name="Android.permission.BLUETOOTH_ADMIN"/>

これらを追加すると、デフォルトのBluetoothアダプターで有効化と無効化が問題なく機能します。

6
Peter Osburg

アプリを起動して正常に動作するときに、以下のコードを使用してBTを無効にしました。 Googleが「bluetooth.disable();」を使用しないことを推奨しているため、これを実装する正しい方法であるかどうかはわかりませんBluetoothをオフにする明示的なユーザーアクションはありません。

    BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
    bluetooth.disable();

以下の権限のみを使用しました。

<uses-permission Android:name="Android.permission.BLUETOOTH_ADMIN"/>
4
nik

次のアクセス許可をマニフェストファイルに追加します。

<uses-permission Android:name="Android.permission.BLUETOOTH"/>
<uses-permission Android:name="Android.permission.BLUETOOTH_ADMIN"/>

Bluetoothを有効にする

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();    
if (!mBluetoothAdapter.isEnabled()) {
    mBluetoothAdapter.enable(); 
}else{Toast.makeText(getApplicationContext(), "Bluetooth Al-Ready Enable", Toast.LENGTH_LONG).show();}

これを使用してBluetoothを無効にする

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();    
if (mBluetoothAdapter.isEnabled()) {
    mBluetoothAdapter.disable(); 
}
2
Selim Raza

これを試して:

//this method to check bluetooth is enable or not: true if enable, false is not enable
public static boolean isBluetoothEnabled()
    {
        BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (!mBluetoothAdapter.isEnabled()) {
            // Bluetooth is not enable :)
            return false;
        }
        else{
            return true;
        }

    }

//method to enable bluetooth
    public static void enableBluetooth(){
        BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (!mBluetoothAdapter.isEnabled()) {
            mBluetoothAdapter.enable();
        }
    }

//method to disable bluetooth
    public static void disableBluetooth(){
        BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (mBluetoothAdapter.isEnabled()) {
            mBluetoothAdapter.disable();
        }
    }

これらの権限をマニフェストに追加します

<uses-permission Android:name="Android.permission.BLUETOOTH"/>
<uses-permission Android:name="Android.permission.BLUETOOTH_ADMIN"/>
0