• android 12动态开关USB网络共享


    这个是采用发送广播的形式,自己写app软件发送广播就可以实现此功能

    ’frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java

    导入依赖

    import android.bluetooth.BluetoothAdapter;
    import android.net.TetheringManager;
    import android.net.ConnectivityManager;
    import static android.net.ConnectivityManager.TETHERING_BLUETOOTH;
    import static android.net.ConnectivityManager.TETHERING_USB;
    import static android.net.TetheringManager.TETHERING_ETHERNET;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    然后要去使用,
    先去注册

        // register for dock events
            IntentFilter filter = new IntentFilter();
            filter.addAction(UiModeManager.ACTION_ENTER_CAR_MODE);
            filter.addAction(UiModeManager.ACTION_EXIT_CAR_MODE);
            filter.addAction(UiModeManager.ACTION_ENTER_DESK_MODE);
            filter.addAction(UiModeManager.ACTION_EXIT_DESK_MODE);
            filter.addAction(Intent.ACTION_DOCK_EVENT);
    		//这两个广播打开与关闭
            filter.addAction("com.tyd.intent.internet.share.open");
            filter.addAction("com.tyd.intent.internet.share.close");
            
            Intent intent = context.registerReceiver(mDockReceiver, filter);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    然后去注册的mDockReceiver里面去进行接收我们的广播

      BroadcastReceiver mDockReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (Intent.ACTION_DOCK_EVENT.equals(intent.getAction())) {
                    mDefaultDisplayPolicy.setDockMode(intent.getIntExtra(Intent.EXTRA_DOCK_STATE,
                            Intent.EXTRA_DOCK_STATE_UNDOCKED));
                } else {
                    try {
                        IUiModeManager uiModeService = IUiModeManager.Stub.asInterface(
                                ServiceManager.getService(Context.UI_MODE_SERVICE));
                        mUiMode = uiModeService.getCurrentModeType();
                    } catch (RemoteException e) {
                    }
                }
                //add
    	    TetheringManager mTetheringManager =(TetheringManager) context.getSystemService(Context.TETHERING_SERVICE); 
            if(intent.getAction().equals("com.tyd.intent.internet.share.open")) {
            //这里写入的系统属性,1代表是打开了usb共享
    			   SystemProperties.set("persist.sys.bnd.system.bnd.usb_state","1");
                    BluetoothAdapter btadapter =BluetoothAdapter.getDefaultAdapter();
                   ConnectivityManager mCm =(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                   android.os.SystemProperties.set("persist.sys.internet_share","1");
                   mTetheringManager.setUsbTethering(true);
                    if (btadapter != null) 
    				try{
                    if(!btadapter.isEnabled())btadapter.enable();
                        //mCm.startTethering(TETHERING_BLUETOOTH,true, new ConnectivityManager.OnStartTetheringCallback(){});
                        //mCm.startTethering(TETHERING_ETHERNET,true, new ConnectivityManager.OnStartTetheringCallback(){});
                     }catch (Exception e){
                       Log.i("yantao","startTethering error="+e);
                     }
               }
               if (intent.getAction().equals("com.tyd.intent.internet.share.close")){
    			   SystemProperties.set("persist.sys.bnd.system.bnd.usb_state","0");
                    android.os.SystemProperties.set("persist.sys.internet_share","0");
                    mTetheringManager.stopAllTethering();
               }
               //end
                updateRotation(true);
                mDefaultDisplayRotation.updateOrientationListener();
            }
        };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
  • 相关阅读:
    关于setInteval定时器在不同浏览器下表现差异
    语雀停服8小时,P0级事故,故障原因和补偿来了。
    kindediter富文本内容导出html文件
    document.body.clientHeight获取可视区域高度为0问题解决
    Acwing 842. 排列数字
    关于yarn安装和运行的错误
    2.HTML中常用浏览器
    Leetcode—2520.统计能整除数字的位数【简单】
    .NET/JAVA/GO 固定时间窗口算法实现(无锁线程安全)
    使用原生div制作table表格
  • 原文地址:https://blog.csdn.net/wzx311/article/details/132969035