2017-01-30 33 views
0

近くのBluetoothデバイスのリストをユーザーに表示し、選択したデバイスに接続するAndroidアプリケーションを開発中です。デバイスピッカーがショーを行いAndroid bluetoothデバイスピッカーからBluetoothデバイス情報を取得

How to retrieve Bluetooth device info with Android Bluetooth device picker?

Android Bluetooth Device Picker Usage

が、私は私の中で選択されたデバイスを見つけることができません:私はこれらの記事に示すように、システムのBluetoothデバイスピッカーを使用しようとしていますコード。 onReceiveのトーストは表示されません。これは、ブロードキャストが受信されていないことを示しています。

私が直面した別の問題は、onRequestPermissionsResultの中でデバイスピッカーアクティビティを開始しようとすると、リクエスト許可ダイアログで「許可」をクリックしたにもかかわらず、デバイスピッカーがまったく表示されないということです。トースト内部も表示されません。すべてのヘルプは理解されるであろう

//Code inside Fragment 
BroadcastReceiver mReceiver; 
BluetoothAdapter bluetoothAdapter; 
BluetoothSocket bsock; 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    myView = inflater.inflate(R.layout.controller_mode_layout,container,false); 

    bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
//Get location access permission. 
    if (bluetoothAdapter != null) { 
     if (bluetoothAdapter.isEnabled()) { 
      ActivityCompat.requestPermissions(getActivity(),new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, reqCode); 
     } 
    } 
//Receiver to get the selected device information 
    mReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
       context.unregisterReceiver(this); 
       BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
      Toast.makeText(context,"Device"+device.getAddress(), Toast.LENGTH_SHORT).show(); 
      try { 
       bsock=device.createRfcommSocketToServiceRecord(UUID.fromString("00002415-0000-1000-8000-00805F9B34FB")); 
       bsock.connect(); 
       //Send and receive data logic follows 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 
    getActivity().registerReceiver(mReceiver, new IntentFilter("android.bluetooth.devicepicker.action.DEVICE_SELECTED")); 

    showDevicePicker(); 

    return myView; 
} 



@Override 
public void onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults) 
{ 
    Toast.makeText(getActivity(),"Permission result", Toast.LENGTH_SHORT).show(); 
    if((requestCode == reqCode) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) 
    { 
     //Not working 
     // showDevicePicker(); 
    } 
} 

public void showDevicePicker() 
{ 
    //Launch built in bluetooth device picker activity 
    startActivity(new Intent("android.bluetooth.devicepicker.action.LAUNCH") 
      .putExtra("android.bluetooth.devicepicker.extra.NEED_AUTH", false) 
      .putExtra("android.bluetooth.devicepicker.extra.FILTER_TYPE", 0) 
      .putExtra("android.bluetooth.devicepicker.extra.LAUNCH_PACKAGE","com.example.ankit2.controllerapp1") 
      .putExtra("android.bluetooth.devicepicker.extra.DEVICE_PICKER_LAUNCH_CLASS","com.example.ankit2.controllerapp1.Fragment1") 
      .setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)); 

} 

は、ここでは、コードです。

注:コードを、Marshmallowを実行しているLenovo K3ノートでテストしました。

答えて

0

DEVICE_PICKER_LAUNCH_CLASSに問題があり、Fragment1と指定されていました。ブロードキャストレシーバがフラグメント内にあっても、起動クラスはアクティビティでなければなりません。この場合、起動クラスをControllerActivity(フラグメントFragment1を含む)に変更することで問題は解決されました。

関連する問題