Android 启用/禁用WLAN直连功能

该博客主要介绍了在Android中如何实现Wi-Fi Direct(Wi-Fi P2P)功能,并通过ContentObserver监听Wi-Fi P2P的状态变化。在接收到状态改变时,会根据Wi-Fi P2P的开启或关闭状态来执行相应的操作,如取消连接、移除群组等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

修改记录【mt67xx_11.0】

--- a/alps/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
+++ b/alps/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
@@ -61,6 +61,11 @@ import com.android.settingslib.core.AbstractPreferenceController;
 
 import java.util.ArrayList;
 import java.util.List;
+//add  start
+import android.provider.Settings;
+import android.database.ContentObserver;
+import android.os.Handler;
+//add end
 
 /*
  * Displays Wi-fi p2p settings UI
@@ -106,9 +111,43 @@ public class WifiP2pSettings extends DashboardFragment
 
     private WifiP2pDevice mThisDevice;
     private WifiP2pDeviceList mPeers = new WifiP2pDeviceList();
+    private Context mContext;//add
 
     @VisibleForTesting String mSavedDeviceName;
 
+    //add by start
+    private ContentObserver mWifiP2pEnableObserver = new ContentObserver(new Handler())
 {
+        @Override
+        public void onChange(boolean selfChange) {
+            boolean state = Settings.Global.getInt(mContext.getContentResolver(), "isWi
fiP2pEnable", 1) == 1; //这里如果直接用getContext()或activity.getApplicationContext()会有空指针报错
+            if (!state) {
+                if (mWifiP2pManager != null) {
+                    mWifiP2pManager.cancelConnect(mChannel,
+                            new WifiP2pManager.ActionListener() {
+                        public void onSuccess() {
+                            if (DBG) Log.d(TAG, " cancel connect success");
+                        }
+                        public void onFailure(int reason) {
+                            if (DBG) Log.d(TAG, " cancel connect fail " + reason);
+                        }
+                    });
+                    mWifiP2pManager.removeGroup(mChannel, new WifiP2pManager.ActionList
ener() {
+                        public void onSuccess() {
+                            if (DBG) Log.d(TAG, " remove group success");
+                        }
+                        public void onFailure(int reason) {
+                            if (DBG) Log.d(TAG, " remove group fail " + reason);
+                        }
+                    });
+                    mSelectedGroup = null;
+                }
+            }
+            handleP2pStateChanged();
+        }
+    };
+    //add end
+
     @VisibleForTesting
     final BroadcastReceiver mReceiver = new BroadcastReceiver() {
         @Override
@@ -116,8 +155,12 @@ public class WifiP2pSettings extends DashboardFragment
             String action = intent.getAction();
 
             if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {
-                mWifiP2pEnabled = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE,
-                    WifiP2pManager.WIFI_P2P_STATE_DISABLED) == WifiP2pManager.WIFI_P2P_
STATE_ENABLED;
+                //add by start
+                mContext = context;
+                boolean state = Settings.Global.getInt(context.getContentResolver(),"is
WifiP2pEnable",1) == 1;
+                mWifiP2pEnabled = (intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE,
+                    WifiP2pManager.WIFI_P2P_STATE_DISABLED) == WifiP2pManager.WIFI_P2P_
STATE_ENABLED) && state;
+                //add end
                 handleP2pStateChanged();
             } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
                 mPeers = (WifiP2pDeviceList) intent.getParcelableExtra(
@@ -332,7 +375,10 @@ public class WifiP2pSettings extends DashboardFragment
                 }
             }
         };
-
+        //add start
+        activity.getApplicationContext().getContentResolver().registerContentObserver(
+                    Settings.Global.getUriFor("isWifiP2pEnable"), true,mWifiP2pEnableOb
server);
+        //add end
         super.onActivityCreated(savedInstanceState);
     }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值