設定中有控制熱點的開關,并且有相關的類型和密碼設定,但如何通過api在第三方app開發中控制呢?android 9.0的api為了安全,并不允許除systemuid之外的app控制熱點,
android 代碼設定、打開wifi熱點及熱點的連接配接
以上blog也僅對android 5.1有效。
那隻能通過系統提供對外接口,然後在設定中進行控制,接口形式為廣播:
Index: frameworks/base/services/core/java/com/android/server/am/BroadcastQueue.java
===================================================================
--- frameworks/base/services/core/java/com/android/server/am/BroadcastQueue.java (版本 4616)
+++ frameworks/base/services/core/java/com/android/server/am/BroadcastQueue.java (版本 4619)
@@ -116,6 +116,7 @@
sBackgroundActionWhiteListArraySet.add("com.android.action.LOCATION_STATE");
+ sBackgroundActionWhiteListArraySet.add("android.intent.action.HOTSPOT_STATE_CHANGED"); // @ + for BUG #
}
Index: packages/apps/Settings/AndroidManifest.xml
===================================================================
--- packages/apps/Settings/AndroidManifest.xml (版本 4616)
+++ packages/apps/Settings/AndroidManifest.xml (版本 4619)
@@ -3485,6 +3485,7 @@
<action android:name="com.android.action.GET_FIRST_DATA_NETWORK" />
<action android:name="com.android.action.SWITCH_FIRST_DATA_NETWORK" />
+ <action android:name="android.intent.action.HOTSPOT_STATE_CHANGED" /> <!-- @ + for BUG # -->
</intent-filter>
</receiver>
Index: packages/apps/Settings/src/com/android/settings/BootCompleteReceiver.java
===================================================================
--- packages/apps/Settings/src/com/android/settings/BootCompleteReceiver.java (版本 4616)
+++ packages/apps/Settings/src/com/android/settings/BootCompleteReceiver.java (版本 4619)
@@ -16,10 +16,15 @@
package com.android.settings;
+import static android.net.ConnectivityManager.TETHERING_WIFI;
+
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.net.ConnectivityManager;
+import android.net.wifi.WifiManager;
import android.os.Bundle;
+import android.os.Looper;
import android.util.Log;
import java.io.IOException;
import android.app.AlertDialog;
@@ -731,5 +736,23 @@
thr.start();
}
-
+
+ // @ + for BUG # {
+ void startTether() {
+ mConnectivityManager.startTethering(TETHERING_WIFI, true /* showProvisioningUi */,
+ mOnStartTetheringCallback, new Handler(Looper.getMainLooper()));
+ }
+
+ void stopTether() {
+ mConnectivityManager.stopTethering(TETHERING_WIFI);
+ }
+
+ final ConnectivityManager.OnStartTetheringCallback mOnStartTetheringCallback =
+ new ConnectivityManager.OnStartTetheringCallback() {
+ @Override
+ public void onTetheringFailed() {
+ super.onTetheringFailed();
+ }
+ };
+ // @ + for BUG # }
}
以上功能僅支援對開關的控制,如果要設定ssid和密碼,需要通過反射wifimanager的setWifiApConfiguration方法。