android 12动态开关USB网络共享

文章讲述了如何在Android应用中使用广播机制来检测设备状态变化,如USB共享的开启和关闭,并管理Tethering功能。涉及到了IntentFilter、BroadcastReceiver以及系统属性的设置。

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

这个是采用发送广播的形式,自己写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;

然后要去使用,
先去注册

    // 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);

然后去注册的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();
        }
    };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值