【问题标题】:Configure Wifi from ADB从 ADB 配置 Wifi
【发布时间】:2014-03-21 02:40:38
【问题描述】:

我想用 Adb 配置我的 Wifi AP。

我已经制作了一个 Java 活动:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    WifiConfiguration wc = new WifiConfiguration();
    wc.SSID = "\"ap_name\"";
    wc.preSharedKey  = "\"password\"";
    wc.hiddenSSID = false;
    wc.status = WifiConfiguration.Status.ENABLED;        

    int res = wifi.addNetwork(wc);
    Log.d("WifiPreference", "add Network returned " + res );
    boolean b = wifi.enableNetwork(res, true);        
    Log.d("WifiPreference", "enableNetwork returned " + b );
    if (b) tv.setText("Internet conectado");
    wifi.saveConfiguration();

在我的清单中我有:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />

当我从 Eclipse 或已安装的应用程序运行它时,它运行正常 但是当我从 Adb 运行它时,使用:

adb shell am start -n com.mexico.sgp/.ConfigureWifi

我得到一个权限错误:

Starting: Intent { cmp=com.mexico.sgp/.ConfigureWifi }
java.lang.SecurityException: Permission Denial: starting Intent { flg=0x10000000    cmp=com.mexico.sgp/.ConfigureWifi } from null (pid=3279, uid=2000) not exported from uid 10130
at android.os.Parcel.readException(Parcel.java:1425)
at android.os.Parcel.readException(Parcel.java:1379)
at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1857)
at com.android.commands.am.Am.runStart(Am.java:463)
at com.android.commands.am.Am.run(Am.java:108)
at com.android.commands.am.Am.main(Am.java:81)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:237)
at dalvik.system.NativeStart.main(Native Method)

如何从 adb 获得许可???

【问题讨论】:

    标签: android permissions adb


    【解决方案1】:

    在您的清单中,将您的服务标记为exported="true"

    <service android:name=".ConfigureWifi"
             android:exported="true" />
    

    根据official docexported控制:

    其他应用程序的组件是否可以调用服务或与之交互 - 如果可以,则为“true”,否则为“false”。当值为“false”时,只有相同应用的组件或具有相同用户ID的应用才能启动服务或绑定服务。

    因此将其设置为 true 允许 adb 调用您的服务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 2023-02-11
      • 2018-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多