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


104

プログラムでBluetoothを有効/無効にしたい。次のコードがあります。

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

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


どのように機能しないのですか?エラーが発生していますか?もしそうなら、エラーは何ですか?
Adam Driscoll

1
BluetoothAdapterがSDK 1.5でエラーを表示する
user458295

回答:



164

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

//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"/>

それは私にとっても本当にうまくいきます。AndroidデバイスでBluetoothを切断する簡単な方法。たくさんの仲間に感謝します。
Amit Thaper

7
BLUETOOTH_ADMIN権限を追加した場合は機能しますが、そうでない場合はstartActivityForResult(enableBtIntent、0);を使用する必要があります。Bluetoothを有効にする
マジッドゴルシャディ2014年

1
お役に立ててありがとうございます+1。それを有効にする方法がわからない人のために追加したいだけです:mBluetoothAdapter.enable()
Chris Sim

97

これを行うためのもう少し堅牢な方法と、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 is 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);
}

1
BLUETOOTH_ADMIN許可を追加すれば機能しますが、許可しない場合はstartActivityForResult(enableBtIntent, 0);、Bluetoothを有効にするために使用する必要があります
Majid Golshadi 2014年

1
強調表示された情報は、具体的にはenable()メソッドのBluetoothAdapterドキュメントから引用されています。
Kevin Lee

ねえ、ドキュメントBluetooth should never be enabled without direct user consent. If you want to turn on Bluetooth in order to create a wireless connection, you should use the ACTION_REQUEST_ENABLE Intent, which will raise a dialog that requests user permission to turn on Bluetooth. The enable() method is provided only for applications that include a user interface for changing system settings, such as a "power manager" app.はそれはどういう意味ですか?例のために。私はあなたのコードから小さなアプリを作りました、そしてそれはうまくいきました。Playストアにアップロードしたいのですが、うまくいきませんか?
Hilal

@ヒラルそれは動作します。ただし、ユーザーはインストールの前に同意を与える必要があります。:彼らは、このようなダイアログが表示されますpewinternet.org/2015/11/10/...
Caner

23

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"/>

パラメータ(ビュービュー)は必要ないと思います
CitrusO2

6

プリジンの解決策は私にとって完璧に機能しました。2つの追加の権限が必要であることを述べるのは公正です:

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

これらが追加されると、デフォルトのBluetoothアダプターで有効化と無効化が完全に機能します。


4

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

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

以下の許可のみを使用しました。

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

2

次の権限をマニフェストファイルに追加します。

<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(); 
}

0

これを試して:

//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"/>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.