Android Studio:getScanResults返回空,但已授予权限 [英] Android Studio: getScanResults returns empty but permission is given

查看:171
本文介绍了Android Studio:getScanResults返回空,但已授予权限的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个代码,以返回可用的Wi-Fi网络.但是我面临一个问题.尽管我已授予所有可能的网络权限,但getScanResults返回空.

I am trying to create a code that returns me available Wi-Fi networks. But I am facing a problem. getScanResults returns empty, though I have given all possible network permissions.

public class MainActivity extends Activity {

    private static final String  TAG = "My Activity";
    private StringBuilder sb = new StringBuilder();
    private TextView tv;
    List<ScanResult> scanList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        final String CoarseLocation = Manifest.permission.ACCESS_COARSE_LOCATION;
        final String AccessWifi = Manifest.permission.ACCESS_WIFI_STATE;
        final String ChangeWifi = Manifest.permission.CHANGE_WIFI_STATE;

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.textView2);
        Button btn = (Button) findViewById(R. id. button);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                if (checkSelfPermission(CoarseLocation) != PackageManager.PERMISSION_GRANTED)
                {
                    requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 123);
                }

                if (checkSelfPermission(AccessWifi) != PackageManager.PERMISSION_GRANTED)
                {
                    requestPermissions(new String[]{Manifest.permission.ACCESS_WIFI_STATE, Manifest.permission.ACCESS_WIFI_STATE}, 123);
                }

                if (checkSelfPermission(ChangeWifi) != PackageManager.PERMISSION_GRANTED)
                {
                    requestPermissions(new String[]{Manifest.permission.CHANGE_WIFI_STATE, Manifest.permission.CHANGE_WIFI_STATE}, 123);
                }

                LocationManager lman = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
                boolean network_enabled = false;

                try
                {
                    network_enabled = lman.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
                } catch (Exception ex) {}

                if (!network_enabled)
                {
                    startActivityForResult(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS), 0);
                }

                final WifiManager mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
                mWifiManager.setWifiEnabled(true);

                IntentFilter filter = new IntentFilter();
                filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);

                registerReceiver(new BroadcastReceiver() {
                    @Override
                    public void onReceive(Context context, Intent intent) {

                        List<ScanResult> results = mWifiManager.getScanResults();
                        final int Amount = results.size();

                        Log.v(TAG, "Wifi Scan Results Count: " + Amount);

                        int num = 1;

                        while (num <= Amount)
                        {
                            Log.v(TAG, "SSID  =  " + results.get(num).SSID);

                            num = num+1;
                        }
                    }
                }, filter);

                mWifiManager.startScan();
            }
        });
    }
}

更新:

这是启用定位服务后尝试扫描Wi-Fi时遇到的错误.我仅一个月才开始进行android编程,所以任何人都可以解释该错误的含义吗?

Here is the error that I get when I try to scan Wi-Fi when location services are enabled. I am into android programming only for a month so can anyone explain what that error means?

10-15 21:55:21.843 21441-21441/com.example.gytis.imlost E/AndroidRuntime: FATAL EXCEPTION: main
      Process: com.example.gytis.imlost, PID: 21441
      java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.wifi.SCAN_RESULTS flg=0x4000010 (has extras) } in com.example.gytis.imlost.MainActivity$1$1@a300383
          at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:935)
          at android.os.Handler.handleCallback(Handler.java:739)
          at android.os.Handler.dispatchMessage(Handler.java:95)
          at android.os.Looper.loop(Looper.java:148)
          at android.app.ActivityThread.main(ActivityThread.java:5527)
          at java.lang.reflect.Method.invoke(Native Method)
          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
       Caused by: java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2
          at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
          at java.util.ArrayList.get(ArrayList.java:308)
          at com.example.gytis.imlost.MainActivity$1$1.onReceive(MainActivity.java:110)
          at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:925)
          at android.os.Handler.handleCallback(Handler.java:739) 
          at android.os.Handler.dispatchMessage(Handler.java:95) 
          at android.os.Looper.loop(Looper.java:148) 
          at android.app.ActivityThread.main(ActivityThread.java:5527) 
          at java.lang.reflect.Method.invoke(Native Method) 
          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 

请帮助.谢谢!

推荐答案

如果在具有Android 6或更高版本的设备上使用它,则即使您拥有正确的权限,也必须启用位置服务以获取扫描结果.

If you are using it on a device with Android 6 or higher you have to enable location services to get the scan results, even if you have the right permissions.

有关更多信息,请参见此处: https://stackoverflow.com/a/32151901/6951450

For more information see here: https://stackoverflow.com/a/32151901/6951450

这篇关于Android Studio:getScanResults返回空,但已授予权限的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆