45

携帯電話に接続されている別のデバイスの Bluetooth 信号強度を取得したいのですが、

Bluetooth 信号強度を取得するにはどうすればよいですか?

私はグーグルでたくさん検索しようとしましたが、答えが見つかりませんでした。

誰かがそれを実装する方法を知っていますか?

これは私のアクティビティです:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        registerReceiver(receiver, new IntentFilter(BluetoothDevice.ACTION_FOUND));


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    private final BroadcastReceiver receiver = new BroadcastReceiver(){
        @Override
        public void onReceive(Context context, Intent intent) {

            String action = intent.getAction();
            if(BluetoothDevice.ACTION_FOUND.equals(action)) {
                int rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE);
                Toast.makeText(getApplicationContext(),"  RSSI: " + rssi + "dBm", Toast.LENGTH_SHORT).show();
            }
        }
    };

}

また、マニフェスト ファイルに Bluetooth のアクセス許可があります。

4

4 に答える 4

46

信号を取得するには、Bluetooth RSSIを確認するか、接続されているデバイスのRSSIを読み取るか、Bluetooth検出を実行して近くのデバイスのRSSIを確認します。

基本的に、Bluetoothディスカバリーは、範囲内のすべてのステーションにブロードキャストして応答します。各デバイスが応答すると、AndroidはACTION_FOUNDインテントを起動します。このインテント内で、ExtraEXTRA_RSSIを取得してRSSIを取得できます。

すべてのBluetoothハードウェアがRSSIをサポートしているわけではないことに注意してください。

関連項目:AndroidIRCの営業時間Androidに関する質問BluetoothRSSI は、BluetoothClassicブロードキャストレシーバーの例です。

private final BroadcastReceiver receiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {

        String action = intent.getAction();
        if(BluetoothDevice.ACTION_FOUND.equals(action)) {
            int  rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE);
            Toast.makeText(getApplicationContext(),"  RSSI: " + rssi + "dBm", Toast.LENGTH_SHORT).show();
        }
    }
};
于 2013-03-09T16:31:36.587 に答える
35

コードは問題ないと思いますが、startDiscovery()結果を確認するには実装する必要があります。

真実は、BluetoothDevice.EXTRA_RSSIデバイスを検出するためにのみ機能するということです。それらのいずれかに接続すると、その RSSI を取得できなくなります。

ここでは、近くにあるデバイスの RSSI を確認できるアクティビティの非常に単純なサンプルを作成しました。最初に TextView と Button をレイアウトに追加し、次に Bluetooth アダプターを有効にして、ボタンをクリックするだけです。

package com.in2apps.rssi;

import android.os.Bundle;
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.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class RSSIActivity extends Activity {

    private BluetoothAdapter BTAdapter = BluetoothAdapter.getDefaultAdapter();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rssi);
        registerReceiver(receiver, new IntentFilter(BluetoothDevice.ACTION_FOUND));

        Button boton = (Button) findViewById(R.id.button1);
        boton.setOnClickListener(new OnClickListener(){
            public void onClick(View v) {
                BTAdapter.startDiscovery();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_rssi, menu);
        return true;
    }

    private final BroadcastReceiver receiver = new BroadcastReceiver(){
        @Override
        public void onReceive(Context context, Intent intent) {

            String action = intent.getAction();
            if(BluetoothDevice.ACTION_FOUND.equals(action)) {
                int rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE);
                String name = intent.getStringExtra(BluetoothDevice.EXTRA_NAME);
                TextView rssi_msg = (TextView) findViewById(R.id.textView1);
                rssi_msg.setText(rssi_msg.getText() + name + " => " + rssi + "dBm\n");
            }
        }
    };
}

次のようになります。

RSSI 検出 - Android の例

于 2013-08-05T00:35:36.960 に答える