Android 7.0 ble scan no result

后端 未结 4 1804
悲&欢浪女
悲&欢浪女 2020-12-19 17:27

When I start ble(Bluetooth Le) scan for seconds, then stop scan. Then start, then stop... after about 5-8 Loops, the start action will be No effect ,this means no s

相关标签:
4条回答
  • 2020-12-19 17:49

    You are probably running into the new and undocumented behavior changes in Android 7 that prevent apps from scanning too often.

    I wrote a blog post about it: https://blog.classycode.com/undocumented-android-7-ble-behavior-changes-d1a9bd87d983

    0 讨论(0)
  • 2020-12-19 18:05

    I had also this kind of problem. It is solved by enabling Location. In android, we need to enable Location for scan near by devices. So please check location is enable or not. Below code is useful. I hope it works, in my case it works good.

    LocationManager manager = (LocationManager) mainActivity.getSystemService(Context.LOCATION_SERVICE);
    if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
        buildAlertMessageNoGps(mainActivity);
    }else{ //scanning part}
    
    
    public void  buildAlertMessageNoGps(MainActivity mainActivity){
        final AlertDialog.Builder builder = new AlertDialog.Builder(mainActivity);
        builder.setMessage("Your GPS seems to be disabled, do you want to enable it? It is required for this application.")
                .setCancelable(false)
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    public void onClick(final DialogInterface dialog, final int id) {
                        mainActivity.startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS), MainActivity.LOCATION_ENABLE);
                    }
                })
                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    public void onClick(final DialogInterface dialog, final int id) {
                        dialog.cancel();
                        mainActivity.finishAffinity();
                    }
                });
        final AlertDialog alert = builder.create();
        alert.show();
    }
    

    After on location start scanning and get scanning result.

    0 讨论(0)
  • 2020-12-19 18:06

    You will also have to include location permissions in your Manifest or else your search will not return anything. This is mandatory I would say for Bluetooth and Wifi searches.

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

    As the in the developer section for BLE in Android.

    0 讨论(0)
  • 2020-12-19 18:13

    You need to make sure that you stop and re-start your scan only after 6 seconds for all devices with Android N and above.

    This is as per the introduced restriction where apps are allowed to scan a maximum of 5 times in 30 seconds.

    We’ve changed the BLE Scanning behavior starting in DP4. We’ll prevent applications from starting and stopping scans more than 5 times in 30 seconds. For long running scans, we’ll convert them into opportunistic scans.

    Refer to this discussion here

    0 讨论(0)
提交回复
热议问题