开发平台基本信息
芯片: MTK8766
版本: Android 12
kernel: msm-4.19
问题描述
最近做了一款没有屏幕显示的智能盒子,要想操控这款设备就只能通过adb投屏,如果默认不允许有线连接,那么要怎么实现adb投屏呢?安卓是支持WIFI adb连接投屏的,只要盒子启动热点,然后用手机或者其他有屏幕的设备连接盒子的热点,这样就可以通过IP地址在有屏幕的设备操纵智能盒子。所以,需要做的事情有几个:
- 修改盒子热点的默认名称、密码
- 固定热点的IP地址
解决方法
设备默认开启热点,固定热点的名称、密码以及IP地址,然后手机或者电脑,连接设备的热点,这样电脑跟设备就处于同一个局域网内,通过固定IP就能连接、操作设备。
- 固定热点名称、密码
--- a/packages/modules/Wifi/service/java/com/android/server/wifi/WifiApConfigStore.java
+++ b/packages/modules/Wifi/service/java/com/android/server/wifi/WifiApConfigStore.java
@@ -346,13 +346,16 @@ public class WifiApConfigStore {
private SoftApConfiguration getDefaultApConfiguration() {
SoftApConfiguration.Builder configBuilder = new SoftApConfiguration.Builder();
configBuilder.setBand(generateDefaultBand(mContext));
- configBuilder.setSsid(mContext.getResources().getString(
- R.string.wifi_tether_configure_ssid_default) + "_" + getRandomIntForDefaultSsid());
+ // configBuilder.setSsid(mContext.getResources().getString(
+ // R.string.wifi_tether_configure_ssid_default) + "_" + getRandomIntForDefaultSsid());
+ configBuilder.setSsid("WIFI_Test");
if (ApConfigUtil.isWpa3SaeSupported(mContext)) {
- configBuilder.setPassphrase(generatePassword(),
+ // configBuilder.setPassphrase(generatePassword(),
+ configBuilder.setPassphrase("123456",
SoftApConfiguration.SECURITY_TYPE_WPA3_SAE_TRANSITION);
} else {
- configBuilder.setPassphrase(generatePassword(),
+ // configBuilder.setPassphrase(generatePassword(),
+ configBuilder.setPassphrase("123456",
SoftApConfiguration.SECURITY_TYPE_WPA2_PSK);
}
- 固定IP地址
--- a/packages/modules/Connectivity/Tethering/src/android/net/ip/IpServer.java
+++ b/packages/modules/Connectivity/Tethering/src/android/net/ip/IpServer.java
@@ -111,6 +111,7 @@ public class IpServer extends StateMachine {
// TODO: have PanService use some visible version of this constant
private static final String BLUETOOTH_IFACE_ADDR = "192.168.44.1/24";
+ private static final String WIFI_IFACE_ADDR = "192.168.68.68/24";
// TODO: have this configurable
private static final int DHCP_LEASE_TIME_SECS = 3600;
@@ -657,6 +658,8 @@ public class IpServer extends StateMachine {
if (mInterfaceType == TetheringManager.TETHERING_BLUETOOTH) {
return new LinkAddress(BLUETOOTH_IFACE_ADDR);
+ }else if (mInterfaceType == TetheringManager.TETHERING_WIFI){
+ return new LinkAddress(WIFI_IFACE_ADDR);
}
return mPrivateAddressCoordinator.requestDownstreamAddress(this, useLastAddress);
- 接收到开机广播,默认开启热点
--- a/frameworks/base/custom/java/com/common/sdk/security/SecurityService.java
+++ b/frameworks/base/custom/java/com/common/sdk/security/SecurityService.java
@@ -60,6 +60,10 @@ import android.os.UserHandle;
import static android.provider.Settings.System.SHOW_BATTERY_PERCENT;
import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE;
import android.telephony.SubscriptionManager;
+import static android.net.ConnectivityManager.TETHERING_WIFI;
+import android.os.Handler;
+import android.os.Looper;
+import android.net.ConnectivityManager;
public class SecurityService extends ISecurityService.Stub {
private static final String TAG = "SecurityService";
@@ -124,11 +128,23 @@ public class SecurityService extends ISecurityService.Stub {
//}
}
+ ConnectivityManager.OnStartTetheringCallback mOnStartTetheringCallback =
+ new ConnectivityManager.OnStartTetheringCallback() {
+ @Override
+ public void onTetheringFailed() {
+ super.onTetheringFailed();
+ }
+ };
+
private final class securityReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Log.d(TAG, "Receive intent ACTION_BOOT_COMPLETED");
+ ConnectivityManager mConnectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
+ mConnectivityManager.startTethering(TETHERING_WIFI, true /* showProvisioningUi */,
+ mOnStartTetheringCallback, new Handler(Looper.getMainLooper()));
+
String basebandVersion = null;
String languageAlreadySet = null;
basebandVersion = TelpoUtil.getBasebandVersion();