0



Я пишу приложение, которое содержит 2 фрагмента, завернутых в viewpager. Я пытаюсь получить список доступных Bluetooth-устройств, но список никогда не меняется.
Это первый раз, когда я работаю с фрагментами. Надеюсь, вы, ребята, можете мне помочь. Спасибо заранее!

Вот фрагмент:BroadcastReceiver никогда не вызывает OnReceive на фрагменте в ViewPager

public class BluetoothDevicesFragment extends Fragment { 
    private ListView mListView; 
    private BluetoothListAdapter mAdapter; 
    private ArrayList<String> mArray; 
    private SwipeRefreshLayout mRefresh; 
    private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      //Finding devices 
      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 ListView 
       //Snackbar.make(getView(), device.getName(), Snackbar.LENGTH_LONG).setAction("Action", null).show(); 
       mArray.add(device.getName() + "\n" + device.getAddress()); 
       mAdapter.notifyDataSetChanged(); 
      } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { 
       mRefresh.setRefreshing(false); 
       getActivity().unregisterReceiver(mReceiver); 
      } 
     } 
    }; 

    public BluetoothDevicesFragment() { 

    } 

    public static BluetoothDevicesFragment newInstance() { 

     Bundle args = new Bundle(); 

     BluetoothDevicesFragment fragment = new BluetoothDevicesFragment(); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_bluetooth, container, false); 
     mListView = (ListView) rootView.findViewById(R.id.listviewB); 
     mArray = new ArrayList<>(); 
     mAdapter = new BluetoothListAdapter(getContext(), R.layout.fragment_bluetooth, mArray); 
     mListView.setAdapter(mAdapter); 
     mRefresh = (SwipeRefreshLayout) rootView.findViewById(R.id.refresh); 
     mRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
      @Override 
      public void onRefresh() { 
       IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
       getActivity().registerReceiver(mReceiver, filter); 
       Bluetooth.bluetoothAdapter.cancelDiscovery(); 
       Bluetooth.bluetoothAdapter.startDiscovery(); 
      } 
     }); 
     return rootView; 
    } 
} 
+0

зарегистрировавшихся вы его в манифесте ? –

+0

@kishorejethava Nope. Должен ли я? –

ответ

1

Вы должны зарегистрироваться BroadcastReceiver получить события

Есть два способа сделать это:

регистрирующие BroadcastReceiver в файле манифеста

<receiver 
android:name="com.pycitup.pyc.MyReceiver" 
android:enabled="true" 
android:exported="true" > 
<intent-filter> 
    <action android:name="com.pycitup.BroadcastReceiver" /> 
</intent-filter> 

Регистрация BroadcastReceiver Programatically

IntentFilter filter = new IntentFilter("packagename.customclass"); 

MyReceiver myReceiver = new MyReceiver(); 
registerReceiver(myReceiver, filter); 

Добавить разрешения в manifest.xml

<uses-permission android:name="android.permission.BLUETOOTH" /> 
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 

Не забудьте проверить разрешение выполнения для abaove

+0

Я сделал это программно, следуя рекомендациям Google, но он все еще не работает –

+0

Я имею в виду, что я до сих пор не вижу, чего не хватает –

+0

Вы пытались [this] (http://stackoverflow.com/questions/32656510/register-broadcast-receiver-dynamically-does-not-work-bluetoothdevice-action-f) –

 Смежные вопросы

  • Нет связанных вопросов^_^