0



Ich schreibe eine Anwendung, die 2 Fragmente enthält, die von einem Viewpager umschlossen sind. Ich versuche, die Liste der verfügbaren Bluetooth-Geräte zu erhalten, aber die ListView ändert sich nie.
Dies ist das erste Mal, dass ich mit Fragmenten arbeite. Ich hoffe ihr könnt mir helfen. Vielen Dank im Voraus!

Hier ist das Fragment:BroadcastReceiver ruft niemals OnReceive on Fragment in ViewPager auf

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

Haben Sie registriert es im Manifest zu überprüfen ? –

+0

@kishorejethava Nein. Musste ich? –

Antwort

1

Sie haben BroadcastReceiver registrieren Ereignisse

zu erhalten

Es gibt zwei Möglichkeiten, dies zu tun:

Registrieren BroadcastReceiver in der Manifest-Datei

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

Registrieren BroadcastReceiver Programatically

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

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

Erlaubnis hinzufügen in 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" /> 

Vergessen Sie nicht, Laufzeit Erlaubnis für abaove

+0

Ich habe es programmatisch getan nach den Richtlinien von Google, aber es funktioniert immer noch nicht –

+0

ich meine ich immer noch nicht sehen, was es fehlt –

+0

Haben Sie versucht, [diese] (http://stackoverflow.com/questions/32656510/register-broadcast-receiver-dynamisch-tut-nicht-arbeiten-bluetoothdevice-action-f) –

Verwandte Themen