BroadcastReceiver从来没有在ViewPager的片段上调用OnReceive
我正在写一个应用程序,它包含由viewpager包装的两个片段。我试图获得蓝牙可用设备的列表,但列表视图从未改变。
这是我第一次使用碎片。我希望你们能帮助我。 在此先感谢!
这里的片段:BroadcastReceiver从来没有在ViewPager的片段上调用OnReceive
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;
}
}
您必须先注册BroadcastReceiver
接收事件
有两种方法可以做到这一点:
manifest文件中注册广播接收器
<receiver
android:name="com.pycitup.pyc.MyReceiver"
android:enabled="true"
android:exported="true" >
<intent-filter>
<action android:name="com.pycitup.BroadcastReceiver" />
</intent-filter>
注册广播接收器通过编程
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
我已经按照Google的指导以编程方式完成了它,但它仍然不起作用 –
我的意思是我仍然没有看到它缺少什么 –
你试过[this](http://stackoverflow.com/questions/32656510)/register-broadcast-receiver-dynamic-does-not-work-bluetoothdevice-action-f) –
你有没有在清单注册它? –
@kishorejethava没有。我必须吗? –