首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >请求android.permission.CHANGE_WIFI_STATE

请求android.permission.CHANGE_WIFI_STATE
EN

Stack Overflow用户
提问于 2014-07-08 23:51:45
回答 1查看 8.7K关注 0票数 1

如何请求或更改CHANGE_WIFI_STATE权限?我正试图扫描本地地区的Wifi网络,并在列表视图中显示结果。但是,当它运行时

代码语言:javascript
运行
复制
wifiMan.startScan();

它崩溃时有以下错误:

代码语言:javascript
运行
复制
07-08 16:43:20.765: E/AndroidRuntime(13725): FATAL EXCEPTION: main
07-08 16:43:20.765: E/AndroidRuntime(13725): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wdi.wdigateway/com.wdi.wdigateway.SelectGateway}: java.lang.SecurityException: WifiService: Neither user 10111 nor current process has android.permission.CHANGE_WIFI_STATE.
07-08 16:43:20.765: E/AndroidRuntime(13725):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2070)
07-08 16:43:20.765: E/AndroidRuntime(13725):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2095)
07-08 16:43:20.765: E/AndroidRuntime(13725):    at android.app.ActivityThread.access$600(ActivityThread.java:135)
07-08 16:43:20.765: E/AndroidRuntime(13725):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201)
07-08 16:43:20.765: E/AndroidRuntime(13725):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-08 16:43:20.765: E/AndroidRuntime(13725):    at android.os.Looper.loop(Looper.java:137)
07-08 16:43:20.765: E/AndroidRuntime(13725):    at android.app.ActivityThread.main(ActivityThread.java:4849)
07-08 16:43:20.765: E/AndroidRuntime(13725):    at java.lang.reflect.Method.invokeNative(Native Method)
07-08 16:43:20.765: E/AndroidRuntime(13725):    at java.lang.reflect.Method.invoke(Method.java:511)
07-08 16:43:20.765: E/AndroidRuntime(13725):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
07-08 16:43:20.765: E/AndroidRuntime(13725):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
07-08 16:43:20.765: E/AndroidRuntime(13725):    at dalvik.system.NativeStart.main(Native Method)
07-08 16:43:20.765: E/AndroidRuntime(13725): Caused by: java.lang.SecurityException: WifiService: Neither user 10111 nor current process has android.permission.CHANGE_WIFI_STATE.
07-08 16:43:20.765: E/AndroidRuntime(13725):    at android.os.Parcel.readException(Parcel.java:1425)
07-08 16:43:20.765: E/AndroidRuntime(13725):    at android.os.Parcel.readException(Parcel.java:1379)
07-08 16:43:20.765: E/AndroidRuntime(13725):    at android.net.wifi.IWifiManager$Stub$Proxy.startScan(IWifiManager.java:651)
07-08 16:43:20.765: E/AndroidRuntime(13725):    at android.net.wifi.WifiManager.startScan(WifiManager.java:726)
07-08 16:43:20.765: E/AndroidRuntime(13725):    at com.wdi.wdigateway.SelectGateway.onCreate(SelectGateway.java:52)
07-08 16:43:20.765: E/AndroidRuntime(13725):    at android.app.Activity.performCreate(Activity.java:5244)
07-08 16:43:20.765: E/AndroidRuntime(13725):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1082)
07-08 16:43:20.765: E/AndroidRuntime(13725):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2034)
07-08 16:43:20.765: E/AndroidRuntime(13725):    ... 11 more

这是我的传呼课:

代码语言:javascript
运行
复制
public class SelectGateway extends ActionBarActivity {

        WifiManager wifiMan;
        WifiReciever wifiRec;
        List<ScanResult> wifiList;
        ArrayAdapter<String> gateways;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_select_gateway);

            if (savedInstanceState == null) {
                getSupportFragmentManager().beginTransaction()
                        .add(R.id.container, new PlaceholderFragment()).commit();
            }

            wifiMan = (WifiManager) getSystemService(Context.WIFI_SERVICE);
            if(wifiMan.isWifiEnabled() == false) {
                Toast.makeText(getApplicationContext(), "wifi no good", Toast.LENGTH_SHORT).show();
                wifiMan.setWifiEnabled(true);
            }
            wifiRec = new WifiReciever();
            registerReceiver(wifiRec, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
            wifiMan.startScan(); //<------Code Crashes here

            ListView list = (ListView) findViewById(R.id.listView1);
            gateways = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
            gateways.add("One");
            gateways.add("two");
            gateways.add("three");
            list.setAdapter(gateways);
        }

接收类

代码语言:javascript
运行
复制
class WifiReciever extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            wifiList = wifiMan.getScanResults();
            for(int i=0;i<wifiList.size();i++){
                gateways.add(wifiList.get(i).toString());
            }
        }
    }

AndroidManifest.xml

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wdi.wdigateway"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-08 23:55:37

您只需要在清单中添加相关的uses-permission标记,就像您对其他清单所做的那样:

代码语言:javascript
运行
复制
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

请参阅文档中有关此机制的说明。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24643328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档