是否可以从命令行激活“USB系列”Android设置? -- settings 领域 和 adb 领域 和 shell 领域 和 command-line 领域 和 bash 领域 android 相关 的问题

Is it possible to activate the “USB Tethering” Android setting from the command line?


24
vote

问题

中文

我想在Bash脚本中激活"USB系列" ,因此有可能使用 adb shell 来运行命令行以更改一些Android设置?

edit1

以下命令打开所需的设置,但不单独更改任何内容:

  am start -n com.android.settings/.TetherSettings   

我发现

tethersettings 动作名称
  aapt dump xmltree com.android.settings.apk AndroidManifest.xml | less +/ether   

相关,但相对的它是它可以从命令行禁用USB系列?

英文原文

I would like to activate "USB tethering" from within a bash script, so is there any possibility to run a command line with adb shell to change some Android settings ?

Edit1:

The following command open the needed settings but don't change anything alone :

am start -n com.android.settings/.TetherSettings 

I've found TetherSettings action name from

aapt dump xmltree com.android.settings.apk AndroidManifest.xml | less +/ether 

Related, but the opposite Is it possible to disable USB tethering from command line?

              
   
   

回答列表

1
 
vote
vote
最佳答案
 

如果您的android版本 svc 内置实用程序,请运行此命令:

  adb shell svc usb setFunctions rndis   

这将使USB系列能够实现。要查看其他USB功能可用,请执行以下操作:

  adb shell svc usb   
 

If your Android version has svc inbuilt utility, run this command:

adb shell svc usb setFunctions rndis 

This would enable USB tethering. To see what other USB functions are available, run:

adb shell svc usb 
 
 
17
 
vote

以root运行以下命令应启用USB系列:

  • service call connectivity 32 i32 1 在冰淇淋夹层上(4.0)
  • service call connectivity 33 i32 1 在果冻bean上(4.1到4.3)
  • service call connectivity 34 i32 1 在kitkat(4.4)
  • service call connectivity 30 i32 1 在lollipop(5.0)
  • service call connectivity 31 i32 1 在lollipop(5.1)上根据一个答案
  • service call connectivity 30 i32 1 在marshmallow(6.0)上,未经测试
  • service call connectivity 41 i32 1 在三星棉花糖(6.0)
  • service call connectivity 33 i32 1 在nougat(7.0)
  • service call connectivity 39 i32 1 在三星nougat(7.0)

在命令中看到的第一个数字是 setUsbTethering() 方法在 service call connectivity 33 i32 10 (这取决于android版本,不存在于gingerbread上)。

(提示:要检查此文件是否有特定的Android版本,请选择相应的分支。)

所以这个命令所做的是呼叫 service call connectivity 33 i32 11 并通过1(启用USB系列)或0(禁用它)。

有关详细信息,请参阅关于堆栈溢出的相关问题。


如果您将USB系列作为USB反向系数设置的一部分, service call connectivity 33 i32 12 应该超过 service call connectivity 33 i32 13 接口设置。

 

Running the following command as root should enable USB tethering:

  • service call connectivity 32 i32 1 on Ice Cream Sandwich (4.0)
  • service call connectivity 33 i32 1 on Jelly Bean (4.1 to 4.3)
  • service call connectivity 34 i32 1 on KitKat (4.4)
  • service call connectivity 30 i32 1 on Lollipop (5.0)
  • service call connectivity 31 i32 1 on Lollipop (5.1) according to an answer by Firelord
  • service call connectivity 30 i32 1 on Marshmallow (6.0), untested
  • service call connectivity 41 i32 1 on Samsung Marshmallow (6.0)
  • service call connectivity 33 i32 1 on Nougat (7.0)
  • service call connectivity 39 i32 1 on Samsung Nougat (7.0)

The first number you see in the commands is the setUsbTethering() method's number in IConnectivityManager.aidl (this depends on the Android version and doesn't exist on Gingerbread).

(Tip: to check this file for a particular Android version, select the appropriate branch.)

So what this command does is call setUsbTethering() and pass either 1 (enable USB tethering) or 0 (to disable it).

For more information, see this related question on Stack Overflow.


If you're enabling USB tethering as part of a USB reverse tethering setup, setprop sys.usb.config rndis,adb should be more than enough to get the rndis0 interface set up.

 
 
         
         
7
 
vote

使用 service call connectivity 33 i32 14 使用 abcdefghijklmn14,获取坐标以使能系列和替换为

  service call connectivity 33 i32 15  

或使用 service call connectivity 33 i32 16 导航以启用无线电。只是看看,

  service call connectivity 33 i32 17  

再次限制了特定的设备。

 

There is a pretty bad method using adb shell input tap, Get the coordinates for enable tethering and substitute

adb shell input tap <x> <y> 

Or navigate to enable radio using adb shell input keyevent. Just have a look at,

adb shell input  

Again this confines to a particular device.

 
 
       
       
6
 
vote

尝试 service call connectivity 33 i32 18 命令下面:

  service call connectivity 33 i32 19  
 

Try the setprop command below:

setprop sys.usb.config rndis,adb 
 
 
 
 
2
 
vote

修改以使用Windows Timeout命令而不是睡眠,唤醒屏幕,只需按下一次。在手机上启用了两次WiFi系列。

  service call connectivity 34 i32 10  
 

Modified to use windows timeout command instead of sleep, wake screen first, and only press down once. Twice down enabled wifi tethering on my phone.

adb shell input keyevent KEYCODE_WAKEUP && adb shell am start -n com.android.settings/.TetherSettings && adb shell input keyevent KEYCODE_DPAD_DOWN && adb shell input keyevent KEYCODE_ENTER && timeout 2 && adb shell input keyevent KEYCODE_BACK 
 
 
1
 
vote

service call connectivity 34 i32 11 方法在我的三星设备上不适用于我。但是,我认为如何通过直接配置网络接口来完成它。以下是一个脚本,可以为USB系列设置Linux机器和USB连接的rooted Android设备。这不会设置DNS或NAT伪装,但足以使设备在192.168.42.129中可访问:

  service call connectivity 34 i32 12  

要启用转发(即通过Android设备从PC连接到Internet),请参阅我的问题并在这里回答。

 

The service method did not work for me on my Samsung device. I figured out how to do it by configuring the network interface directly, though. Here is a script that sets up a Linux machine and a USB-connected rooted Android device for USB tethering. This does not set up DNS or NAT masquerading, but is sufficient to make the device accessible at 192.168.42.129:

#!/bin/bash set -euo pipefail  # Set up USB tethering for an Android device. # Usage: adb-usb-tether [USB-VENDOR USB-PRODUCT] # If USB vendor/product is unspecified, use first USB network interface. # On the Android side, tethering is enabled via adb shell.  if [[ $# -eq 2 ]] then     any=false     vendor=$1     product=$2 else     any=true fi  function find_if() {     local path if     for path in /sys/class/net/*     do         if=$(basename "$path")         if [[ "$(readlink "$path")" == */usb* ]]         then             local ifproduct ifvendor             ifproduct=$(cat "$(realpath "$path")/../../../idProduct")             ifvendor=$(cat "$(realpath "$path")/../../../idVendor")             if $any || [[ "$ifproduct" == "$product" && "$ifvendor" == "$vendor" ]]             then                 echo "Found interface: $if" 1>&2                 echo "$if"                 return             fi         fi     done }  function adb_shell() {     adb shell "$(printf " %q" "$@")" }  function adb_su() {     local quoted     quoted="$(printf " %q" "$@")"     adb shell su -c "$(printf %q "$quoted")" }  if=$(find_if) if [[ -z "$if" ]] then     echo "Requesting interface:" 1>&2     adb_su setprop sys.usb.config rndis,adb     echo " >> OK" 1>&2 fi  while [[ -z "$if" ]] do     echo "Waiting for network device..." 1>&2     sleep 1     if=$(find_if) done  while ! ( ip link | grep -qF "$if" ) do     echo "Waiting for interface..." 1>&2     sleep 1 done  function configure_net() {     local name="$1"     local if="$2"     local ip="$3"     local table="$4"     local cmdq="$5" # Query command     local cmdx="$6" # Configuration command      if ! ( "$cmdq" ip addr show dev "$if" | grep -qF 192.168.42."$ip" )     then         echo "Configuring $name interface address:" 1>&2         "$cmdx" ip addr add 192.168.42."$ip"/24 dev "$if"         echo " >> OK" 1>&2     fi      if ( "$cmdq" ip addr show dev "$if" | grep -qF 'state DOWN' )     then         echo "Bringing $name interface up:" 1>&2         "$cmdx" ip link set dev "$if" up         sleep 1         echo " >> OK" 1>&2     fi      if ! ( "$cmdq" ip route show table "$table" | grep -qF "192.168.42.0/24 dev $if" )     then         echo "Configuring $name route:" 1>&2         "$cmdx" ip route add table "$table" 192.168.42.0/24 dev "$if"         echo " >> OK" 1>&2     fi }  configure_net local  "$if"   128 main  command   sudo configure_net device rndis0  129 local adb_shell adb_su 

To enable forwarding (i.e. connect to the Internet from the PC via the Android device), see my question and answer here.

 
 
1
 
vote

这是设备独立的(切换USB系列)

  service call connectivity 34 i32 13  
 

this is device independent (toggles USB tethering)

adb shell am start -n com.android.settings/.TetherSettings && adb shell input keyevent 20 && adb shell input keyevent 20 && adb shell input keyevent KEYCODE_ENTER && sleep 2 && adb shell input keyevent 4 
 
 

相关问题

3  有没有办法自动更改SMTP服务器?  ( Is there a way to automatically change smtp server ) 
我有一个ntlworld.com的朋友电子邮件地址。对于Desktop Setup,SMTP服务器是SMTP.ntlworld.com,但这仅接受Virgin Media(Who购买NTL)作为ISP服务的IP地址的电子邮件。当在3G时,它们可以使用网络提供商的SMTP服务器。 因此,在不在WiFi上时有一种方法可以...

13  增加振动强度  ( Increase vibrate strength ) 
我的星系Nexus的振动强度令人难以置信。当我在口袋里有手机时,我根本不感觉到来电的振动,这会击败其目的。由于此,我错过了一个以上的重要电话。 有没有办法提高力量?我在设置中没有找到任何相关的东西。 ...

12  短信和电子邮件的不同通知声音?  ( Different notification sounds for sms and email ) 
是否有一种方法可以使用不同的声音文本警报和电子邮件警报?我找不到这个设置。我在HTC Hero,Android 2.1 ...

0  完全禁用音频插孔作为媒体输出  ( Completely disable audio jack as a media output ) 
我买了3.5毫米。灰尘插头千斤顶和我正在使用它的按钮,但是Android将其视为耳机,并始终将音频路由到它不是电话扬声器,也不是蓝牙。我需要将其完全禁用作为媒体输出。请告知或指导在哪里询问。 StackOverflow,Super用户,XDA,Android Central或Reddit。我的手机植根了,准备好了任何...

4  更改现有帐户的电子邮件SMTP设置  ( Changing email smtp settings for existing account ) 
设置新电子邮件帐户时,很容易输入各种SMTP设置。但我似乎无法在我现有的电子邮件帐户上更改现有设置。电子邮件似乎没有"改变" 能力。 我正在使用运行Android 4.3的Galaxy S3 谢谢, Gary ...

0  如何启用Google键盘?  ( How to enable google keyboard ) 
以下此建议我已禁用 Google Keyboard 应用程序。我的整个系统崩溃了,然后重新启动,我无法在应用程序列表中看到该应用程序,所以我可以重新恢复它。 如何恢复 Google Keyboard ,因此它将在 Settings > Apps > All 中再次启动它? ...

11  如何关掉智能锁定。  ( How do i turn off smart lock ) 
我试图保护我的电话。我打开了模式。然后思考额外的安全性,我会打开智能锁。注意模式锁定已消失。我想觉得我可以把手机放在咖啡桌上,走开。 ...

2  有没有办法让我的HTC-Incredible手机使用光学操纵杆按钮醒来?  ( Is there a way to make my htc incredible phone use the optical joystick button t ) 
我仍然从我的ipod调整到HTC令人难以置信的手机。 对我来说非常非直观的一件事是在我想要"唤醒手机" 后按电源按钮。我只是习惯于在iPhone底部使用大按钮,因为这一切地通过意外地全部击中"光学操纵杆" 按钮。 是否有任何方法可以配置按钮,以便光学操纵杆按钮可以将手机拉出睡眠模式? ...

2  Macrodroid要求“申请推出/关闭”可访问性允许  ( Macrodroid asks for application launched closed accessibility permission const ) 
我在非rooted android 8.1 oreo with macrodroid pro v3.24.1。在我收到替换手机并重新安装麦克罗大米后,它不断要求辅助功能权限:应用程序启动/关闭。 有三种可用性权限: macrodroid 宏rodroid指纹手势检测器 Macrodroid音量按钮监视器 我...

3  编辑与设备/ SIM关联的电话号码  ( Edit phone number associated with device sim ) 
在我的设备上,当我通过 Settings &gt来检查电话号码时; About Phone &gt; Status &gt; SIM Status ,电话号码不正确。当我拿出一份新合同时,我搬了我的号码,所以我猜这是最初与SIM相关的数字。有没有办法改变这个? 编辑:设备是一个运行m 6.0.1的Nexus ...

2  如何将Android显示亮度设置为0%  ( How to fix setting android display brightness to 0 ) 
我有一个Windows手机(HTC倾斜2)并将Android放在它上(仅在SD卡上)。当我弄乱一些东西时,我不小心将Android的显示亮度设置为0%。所以现在没有任何东西会在我的屏幕上出现。我可以在没有干净的安卓安装的情况下解决这个问题吗? ...

0  如何禁用数据使用周期的autoreet  ( How to disable data usage cycles autoreset ) 
我正在使用预付卡,没有计费周期。 如何禁用数据使用跟踪器自动重置? ...

2  如何始终在数据上创建设置快捷方式?  ( How can i create a settings shortcut for always on data ) 
我在大多数时间都有大部分时间设置到关闭电池的移动数据,但我发现需要在一段时间内每次切换它 - 使用pandora,奇数大文件到/ offopbox等。 这个问题:我可以轻松开/关图标(非常喜欢由HTC预加载的WiFi或4G小部件),所以我不必每次都经过设置菜单? App Recs或How-TOS赞赏。 我有一个ev...

7  我想要一个我可以锁定在DNS设置中的智能手机。是Android“这是”  ( I want a smart phone that i can lock in dns settings is android the one ) 
是关于互联网boss 。我希望能够锁定或密码保护DNS设置,以便Opendns,因此我可以拥有一个安全的智能手机,我的孩子可以使用,无需担心访问PR0N或其他任何东西。任何人都知道这是否可能?我不想使用另一种内容过滤方法。 ...

7  如何在Galaxy S7上“忘记”超出范围的Wi-Fi网络?  ( How do i forget an out of range wi fi network on a galaxy s7 ) 
我想删除不再在范围内的旧保存网络。我可以忘记可见的网络,但远程网络在任何地方都不可见,所以我不能做标准的长点=&gt; "忘记网络" 动作。 在内置Wi-Fi应用程序的"更多" 菜单下没有"已保存的网络" 或"管理网络" 选项。 我已经尝试了一个第三方应用程序 wifi manager ,网络中可见但报告忘记错误: ...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.