2017-09-20 3 views
1

私は次のコード行を持っています。私は文字列deviceNameとdeviceHarwareAddressにアクセスしようとしています。私はBroadcastReceiverを拡張し、私のためにコードを返すメソッドを作成するクラスを構築する必要がありますか?このオブジェクト内からdeviceNameとdeviceHardwareAddressにアクセスするにはどうすればよいですか?

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

     String action = intent.getAction(); 
     if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
      // Discovery has found a device. Get the BluetoothDevice 
      // object and its info from the Intent. 
      BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
      String deviceName = device.getName(); 
      String deviceHardwareAddress = device.getAddress(); // MAC address 


     } 
    } 
}; 

答えて

0

不要です。単一のコンポーネント(例えば、アクティビティ/フラグメント/サービス)内でその使用を制限している場合は、そのコンポーネントの中に "mReceiver"を保持し、mReceiverを登録することができます。それは正常に動作します。

これは、アクティビティ内で実行している場合です。

public class BluetoothTest extends AppCompatActivity { 
private ArrayList<BluetoothDevice> deviceList; 
private BluetoothAdapter mBluetoothAdapter; 
private ArrayList<DeviceItem> deviceItemList = new ArrayList<>(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.abc); 
    /** 
    * Do necessary coding to enable bluetooth 
    */ 
    registerReceiver(); 
    startBluetoothDiscovery(); 
} 
private void registerReceiver() { 
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
    IntentFilter dintentFilter = new IntentFilter(); 
    dintentFilter.addAction(BluetoothDevice.ACTION_FOUND); 
    dintentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED); 
    dintentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); 
    registerReceiver(mDiscoveryBroadcastReceiver, dintentFilter); 
} 

public void startBluetoothDiscovery() { 
    if (!mBluetoothAdapter.isDiscovering()) 
     mBluetoothAdapter.startDiscovery(); 
} 

public void setBluetoothDevice(BluetoothDevice device) { 
    if (!deviceList.contains(device)) 
     deviceList.add(device); 
} 

public ArrayList<BluetoothDevice> getBluetoothDeviceList() { 
    return deviceList; 

} 

private void resetAll() { 
    deviceItemList.clear(); 
    unregisterReceiver(mDiscoveryBroadcastReceiver); 
} 

private final BroadcastReceiver mDiscoveryBroadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
     if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) { 
      Toast.makeText(getApplicationContext(), "Started discovery!!!", Toast.LENGTH_SHORT).show(); 
      deviceList = new ArrayList<>(); 
      deviceItemList.clear(); 
     } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { 
      Toast.makeText(getApplicationContext(), "Finished discovery!!!", Toast.LENGTH_SHORT).show(); 

     } else if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
      DeviceItem deviceItem = new DeviceItem(device.getName(), 
        device.getAddress(), device.getBluetoothClass(), device); 
      deviceItem.setBluetoothDevice(device); 
      /** 
      * To check if the device is in paired list or not 
      */ 
      if (mBluetoothAdapter.getBondedDevices().contains(device)) 
       deviceItem.setPaired(true); 
      else 
       deviceItem.setPaired(false); 

      if (!deviceItemList.contains(deviceItem)) 
       deviceItemList.add(deviceItem); 
      /** 
      * Once the device is found,it is added to a list 
      */ 
      setBluetoothDevice(device); 
     } 
    } 
}; 


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

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    return id == R.id.action_settings; 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 

} 

@Override 
protected void onResume() { 
    super.onResume(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
} 

}

「サービス」の場合では、アクティビティにデータを利用可能にするためのバインダーやオブザーバーパターンを利用することができます。

+0

返信いただきありがとうございます。だから、私は変数にアクセスする方法がわからないと思うので、そのアクティビティ/フラグメント/サービス内の現在の状態です –

関連する問題