ゴール:範囲内のBTデバイスの名前とアドレスを検出し、その値をWebサービスに送信するAndroidアプリを作成します。 BTデバイスは、以前はホストデバイスに接続されていませんでした。私が歩いているうちにすべてをポーリングしたいだけです。ドキュメントの上に注いAndroidでのBluetoothデバイスの検出 - startDiscovery()
- を:私は何をやったか
。
- ホストデバイスのBTアダプタのローカルインスタンスを実装しました。
- 有効になっていない場合、BTを有効にするための通知を実装しました。
ACTION_FOUNDs
がstartDiscovery()から解析されるように登録されたブロードキャストレシーバーとインテント。- 登録BLUETOOTHおよびBLUETOOTH_ADMINマニフェストのアクセス許可。
状況は(増分コンソールログでテストした通り)startDiscovery()
まで動作します。
フラストレーション:
- StartDiscoveryを() - 私は私が間違ったコンテキストでこれを渡しています疑い。このメソッドは、適切に機能するためにはどのコンテキスト内に配置する必要がありますか?
この方法を使用することができれば、私はあなたの知恵に感謝します。
更新 - ここでは、私の悲しみの原因となっているコードの簡略化されたバージョンです。この単純化は私の誤りを再現します。このコードは実行され、cat.log
というエラーやその他のエラーは発生しません。単に出力されません。
package aqu.bttest;
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.os.Bundle;
import android.widget.Toast;
public class BT2Activity extends Activity {
private BluetoothAdapter mBTA;
private SingBroadcastReceiver mReceiver;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//register local BT adapter
mBTA = BluetoothAdapter.getDefaultAdapter();
//check to see if there is BT on the Android device at all
if (mBTA == null){
int duration = Toast.LENGTH_SHORT;
Toast.makeText(this, "No Bluetooth on this handset", duration).show();
}
//let's make the user enable BT if it isn't already
if (!mBTA.isEnabled()){
Intent enableBT = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBT, 0xDEADBEEF);
}
//cancel any prior BT device discovery
if (mBTA.isDiscovering()){
mBTA.cancelDiscovery();
}
//re-start discovery
mBTA.startDiscovery();
//let's make a broadcast receiver to register our things
mReceiver = new SingBroadcastReceiver();
IntentFilter ifilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
this.registerReceiver(mReceiver, ifilter);
}
private class SingBroadcastReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction(); //may need to chain this to a recognizing function
if (BluetoothDevice.ACTION_FOUND.equals(action)){
// Get the BluetoothDevice object from the Intent
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
// Add the name and address to an array adapter to show in a Toast
String derp = device.getName() + " - " + device.getAddress();
Toast.makeText(context, derp, Toast.LENGTH_LONG);
}
}
}
}
これは、あなたが得ているエラーを知るのを助けるでしょう。少なくとも、 'startDiscovery()'が間違って機能していると思うように導いているのでしょうか? –