2016-07-21 12 views
1

私はBluetooth RSSIを計算しようとしていて、いくつかの例が見つかりましたが、broadcastReceiverは機能していません。コードは次のとおりです。このを通じて登録Bluetooth ACTION_FOUND broadcastReceiverが機能していません

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

registerReceiver(receiver, new IntentFilter(BluetoothDevice.ACTION_FOUND)); 

、ボタンがクリックされたとき、BTAdapter.startDiscovery()。は働いている。 しかし、textviewでは何も変わりません。

私にはいくつかのアドバイスがありますか?

もう一度編集: 私のコードを少し変更しました。コード全体を表示します。

public class Blutooth extends Activity { 

private BluetoothAdapter BTAdapter = BluetoothAdapter.getDefaultAdapter(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_blutooth); 

    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.blutooth, menu); 
    return true; 
    } 
} 

とレシーバのクラスが

public class TestReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    String name = intent.getAction(); 
    String device = intent.getStringExtra(BluetoothDevice.EXTRA_NAME); 
    String rssi_msg = Integer.toString(intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE)); 
    Toast.makeText(context, name, Toast.LENGTH_SHORT).show(); 
    } 

} 

である私はintent.getAction();をトーストにしようとしているが、何も起こりませんでした。 BluetoothDevice.ACTION_FOUNDは放送されていないと思います。

もう一度編集: 私はアンドロイド6.0バージョンを使用しています。 そして、私の全体のマニフェストはこれです:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.blutooth" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-feature android:name="android.hardware.bluetooth" /> 
    <uses-permission android:name="android.permission.BLUETOOTH" /> 
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-sdk 
     android:minSdkVersion="23" 
     android:targetSdkVersion="23" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".Blutooth" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <receiver android:name=".TestReceiver"> 
      <intent-filter> 
       <action android:name="BluetoothDevice.ACTION_FOUND"> 
      </action></intent-filter> 
     </receiver> 
    </application> 

</manifest> 

私が6.0以上のバージョンを聞いたACTION_FOUNDを使用するための追加の許可が必要です。 したがって、ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATIONを追加しました。 そして、自分の活動にfilter.addAction(BluetoothDevice.ACTION_NAME_CHANGED);コードを追加しました。 ACTION_NAME_CHANGEDはうまく働いており、BluetoothDevice.EXTRA_NAMEを得ることができます。 ただし、BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUEは機能しません。 デフォルト値-32768を出力します。 まだBluetoothDevice.ACTION_FOUNDが機能していません。

+0

マニフェストファイルにも受信者を追加しましたか? –

+0

少なくともクラス全体でコードを追加しました。また、あなたの 'intent.getAction()'はあなたに何を与えますか? 'Log.d'や' Toast'を使ってみてください。 –

+0

どのAndroid版をお使いですか?また、権限に行方不明がある可能性がありますマニフェストを追加してください –

答えて

3

私はついに答えを見つけました。 Android 6.0には追加の権限が必要ですが、マニフェストにuses-permissionを追加するだけでは機能しません。 ユーザーに許可を確認する必要があります。 私はこのような私のコード記述:

int permissionCheck = ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.ACCESS_COARSE_LOCATION); 

     BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
     if (!bluetoothAdapter.isEnabled()) 
      bluetoothAdapter.enable(); 
     leScanner = bluetoothAdapter.getBluetoothLeScanner(); 

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

このコードは、あなたの許可ポップアップが表示されます。 多くのお返事ありがとうございます。

関連する問題