前言
1.小米vr正式在插入手機(jī)后,會(huì)自動(dòng)啟動(dòng)小米VR APP,然后因?yàn)樾∶坠俜揭呀?jīng)關(guān)閉了小米VR的生態(tài),你面對(duì)的只是一個(gè)空蕩蕩的vr界面,以及商店里那些已經(jīng)老舊的軟件(大多已經(jīng)不再更新,服務(wù)器關(guān)閉,不能使用)
看著外面的第三方APP比如gizmoVR瀏覽器,看著外面的VR虛擬應(yīng)用,比如全景圖片共享平臺(tái),沒有一個(gè)能在小米VRAPP里打開,僅僅是因?yàn)樗麄儧]有和小米合作
然而我們就束手待斃嗎?
當(dāng)然不是,需要實(shí)現(xiàn)的是在已經(jīng)啟動(dòng)小米VR的情況下,仍然有切換其他VR APP的能力
比如你自己開發(fā)了一個(gè)小米vR應(yīng)用,但是菜單里沒有顯示,那你就直接adb命令啟動(dòng),都一樣
2.另一個(gè)問題是,使用vr瀏覽器輸入文字十分麻煩,即使使用藍(lán)牙手柄,也需要一個(gè)個(gè)點(diǎn)確認(rèn),能否直接從電腦鍵盤上輸入文字直接到vr設(shè)備中呢?
當(dāng)然可以的,這個(gè)已經(jīng)解決了
3.另外一個(gè)問題是,對(duì)于一些放入手機(jī)的VR設(shè)備,如果沒有藍(lán)牙手柄怎么辦?
問題是你的電腦和手機(jī)有藍(lán)牙啊,手機(jī)的功能不僅有陀螺儀,藍(lán)牙,還有震動(dòng)等等功能,你藍(lán)牙手柄能干的我手機(jī)能干,你藍(lán)牙手柄不能干的我照樣干,我是手機(jī)我牛逼,隨便找另外一部手機(jī)模擬出來不就好了
使用手機(jī)模擬體感藍(lán)牙手柄不過分吧?
當(dāng)然,這個(gè)暫定開發(fā),現(xiàn)在僅僅實(shí)現(xiàn)的是用模擬藍(lán)牙手柄的確認(rèn)功能,以及文字傳輸功能
對(duì)于一些看電影的來說,使用頭戴盯住一些界面看一會(huì)兒來實(shí)現(xiàn)確認(rèn)功能實(shí)際上是非常煩人的
原理
功能看似很多,實(shí)際上原理很簡(jiǎn)單
就是利用電腦,使用wifi用adb命令控制手機(jī)而已
讓我們看看這幾個(gè)adb命令主角
1.adb命令,向手機(jī)輸入文字
比如:
adb shell input text ‘123’
注意!當(dāng)字符串中含有“&”這樣的特殊字符時(shí),例如hello & world這個(gè)時(shí)候,傳輸就會(huì)到這個(gè)&這里終止,如果想要繼續(xù)傳輸?shù)脑?,就需要進(jìn)行轉(zhuǎn)義處理,即:adb shell input text “hello & world”
還有一點(diǎn)就是esc的····小寫符號(hào)的特殊性,以及‘“”’需要進(jìn)行轉(zhuǎn)義處理才能正確傳輸
2.adb命令,啟動(dòng)手機(jī)app
比如:
adb shell am start -n 應(yīng)用包名/應(yīng)用主Activity名
adb shell am start -n com.GizmoVR.Virtual.Reality.Videos/com.gizmo.tools.CustomUnityActivity
3.adb命令關(guān)閉手機(jī)app
比如:
adb shell am force-stop 包名
adb shell am force-stop com.GizmoVR.Virtual.Reality.Videos
4.adb命令點(diǎn)擊手機(jī)位置
adb shell input tap 600 800
當(dāng)然,還需要電腦鍵盤的監(jiān)聽以及adb命令的傳送,這些都有介紹
電腦鍵盤監(jiān)聽可見
https://blog.csdn.net/lidashent/article/details/121892655
流程
如果你的手機(jī)已經(jīng)插入了小米VR正式版的VR盒子
想要使用其他應(yīng)用,進(jìn)入小米的官方VR界面后(手機(jī)插入VR盒子,頭已經(jīng)戴上小米VR,不能摘下)
想要切換到其他應(yīng)用,比如外面安裝的gizmoVR瀏覽器, 你可以使用adb命令切換到其他應(yīng)用
首先你的手機(jī)放入小米VR盒子之前,電腦需要使用adb命令連接手機(jī)
比如:
電腦和手機(jī)放在同一局域網(wǎng)下,adb連接命令,這里的手機(jī)ip根據(jù)實(shí)際情況填寫,查看設(shè)置里的wifi信息可以看到本機(jī)局域網(wǎng)ip
adb connect 192.168.2.105
基于此,連接成功后使用adb的其他命令可以隨意開啟和切換小米VR之外的應(yīng)用,而不用摘下已經(jīng)戴著的VR眼鏡
當(dāng)然需要的信息是需要開啟的應(yīng)用的包名和主activity名
如何得到這個(gè)應(yīng)用的包名和它的主Activtty名字呢?
使用手機(jī)上的mt管理器
先提取已經(jīng)安裝的應(yīng)用的安裝包,
然后點(diǎn)擊得到的應(yīng)用包查看,
進(jìn)入AndroidManifest.xml文件中
選擇反編譯
打開AndroidManifest.xml,“package=”之后的就是命令需要的package,“android.intent.action.MAIN” action 所在的activity就是命令需要的launch activity
使用搜索過濾功能,可以快速定位主Acitivity
切換應(yīng)用的adb命令
比如gizmoVR瀏覽器的切換命令
格式為:
adb shell am start -n 應(yīng)用包名/應(yīng)用主Activity名
adb shell am start -n com.GizmoVR.Virtual.Reality.Videos/com.gizmo.tools.CustomUnityActivity
這樣,不論你現(xiàn)在開啟的是什么應(yīng)用,只需要使用此命令就能迅速切換到GizmoVR瀏覽器了,即使是你戴著小米VR的情況下也能在VR中使用這個(gè)外部的app
關(guān)閉外部APP的命令
只需要 adb shell am force-stop 應(yīng)用包名 就可以了
比如:
adb shell am force-stop com.GizmoVR.Virtual.Reality.Videos
問題解決
但是問題是我已經(jīng)戴上小米VR了,我還需要摘下頭戴輸命令?
當(dāng)然不需要,使用python封裝這些命令,然后判斷鍵盤按鍵鍵就能使用了
比如需要輸入文字,則檢測(cè)鍵盤按鍵,將按鍵輸入的文字使用adb命令傳送給手機(jī)
比如點(diǎn)擊位置等等
比如使用鍵盤上的閑置按鍵就能方便的控制應(yīng)用的切換,比如tab,esc,上下左右按鍵等等很合理吧,同理更多
python腳本
實(shí)現(xiàn)的功能如下:
1,按動(dòng)鍵盤按鍵,將電腦鍵盤上的文字傳送給手機(jī)
2.模擬藍(lán)牙手柄的確認(rèn)功能,通過鍵盤的上下左右控制觸發(fā)
3.切換其他vrapp,使用esc按鍵啟動(dòng)gizmoVR軟件,至于為什么不用abc等等按鍵,那個(gè)用來傳輸文字了
4.關(guān)閉其他app,使用tab按鍵關(guān)閉gizmoVR軟件,為什么不用abc等按鍵同理
按鍵盤esc自動(dòng)打開手機(jī)上的gizmoVR軟件,按tab自動(dòng)關(guān)閉,這樣戴著頭盔也能無限切換外部的vr應(yīng)用了
同樣也能切換外部愛奇藝vr等等
import cv2
import os
adbPath = "C:\\Users\\Administrator.DESKTOP-KMH7HN6\\Downloads\\Compressed\\platform-tools-windows\\platform-tools\\adb.exe"
path = r"C:\Users\Administrator.DESKTOP-KMH7HN6\Downloads\pictures\2056968.jpg"
myIp = '192.168.2.105'
def doCmd(myCmd):
cmdCommand = adbPath + " " + myCmd
print(cmdCommand)
backInfo = os.popen(cmdCommand).read()
print(backInfo)
def openGizmoVR():
doCmd("connect " + myIp)
doCmd("shell am start -n com.GizmoVR.Virtual.Reality.Videos/com.gizmo.tools.CustomUnityActivity")
def closeGizemovR():
doCmd("connect " + myIp)
doCmd("shell am force-stop com.GizmoVR.Virtual.Reality.Videos")
def inputText(a):
doCmd("connect " + myIp)
doCmd("shell input text {}".format(a))
def clickScreen():
doCmd("connect " + myIp)
doCmd("shell input tap 600 800")
a = cv2.imread(path)
cv2.imshow('a', a)
cv2.waitKey(0)
inputTextBuff = ""
while (1):
k = cv2.waitKey() & 0xFF
print(k)
# ascll碼上常用標(biāo)識(shí)符截止位
if k >= 33:
if k == 96:
charChange = "\\'"
elif k == 38:
charChange = "\\&"
else:
charChange = chr(k)
inputTextBuff = inputTextBuff + charChange
print(inputTextBuff)
# enter按鍵ascll碼
elif k == 13 and len(inputTextBuff) > 0:
inputText(inputTextBuff)
inputTextBuff = ""
# 上下左右按鍵ascll碼
elif k == 0:
clickScreen()
# esc按鍵ascll碼
elif k == 27:
openGizmoVR()
# tab按鍵ascll碼
elif k == 9:
closeGizemovR()
adb常識(shí)
//在屏幕上做劃屏操作,前四個(gè)數(shù)為坐標(biāo)點(diǎn),后面是滑動(dòng)的時(shí)間(單位毫秒)
adb shell input swipe 50 250 250 250 500
//在 100 100 位置長(zhǎng)按 1000毫秒
adb shell input swipe 100 100 100 100 1000
直接觸發(fā)手機(jī)的響應(yīng)操作事件代碼
格式
adb shell input keyevent 代碼
比如 查看后臺(tái)菜單
adb shell input keyevent 82
其他代碼
0 --> “KEYCODE_UNKNOWN”
1 --> “KEYCODE_MENU”
2 --> “KEYCODE_SOFT_RIGHT”
3 --> “KEYCODE_HOME”
4 --> “KEYCODE_BACK”
5 --> “KEYCODE_CALL”
6 --> “KEYCODE_ENDCALL”
7 --> “KEYCODE_0”
8 --> “KEYCODE_1”
9 --> “KEYCODE_2”
10 --> “KEYCODE_3”
11 --> “KEYCODE_4”
12 --> “KEYCODE_5”
13 --> “KEYCODE_6”
14 --> “KEYCODE_7”
15 --> “KEYCODE_8”
16 --> “KEYCODE_9”
17 --> “KEYCODE_STAR”
18 --> “KEYCODE_POUND”
19 --> “KEYCODE_DPAD_UP”
20 --> “KEYCODE_DPAD_DOWN”
21 --> “KEYCODE_DPAD_LEFT”
22 --> “KEYCODE_DPAD_RIGHT”
23 --> “KEYCODE_DPAD_CENTER”
24 --> “KEYCODE_VOLUME_UP”
25 --> “KEYCODE_VOLUME_DOWN”
26 --> “KEYCODE_POWER”
27 --> “KEYCODE_CAMERA”
28 --> “KEYCODE_CLEAR”
29 --> “KEYCODE_A”
30 --> “KEYCODE_B”
31 --> “KEYCODE_C”
32 --> “KEYCODE_D”
33 --> “KEYCODE_E”
34 --> “KEYCODE_F”
35 --> “KEYCODE_G”
36 --> “KEYCODE_H”
37 --> “KEYCODE_I”
38 --> “KEYCODE_J”
39 --> “KEYCODE_K”
40 --> “KEYCODE_L”
41 --> “KEYCODE_M”
42 --> “KEYCODE_N”
43 --> “KEYCODE_O”
44 --> “KEYCODE_P”
45 --> “KEYCODE_Q”
46 --> “KEYCODE_R”
47 --> “KEYCODE_S”
48 --> “KEYCODE_T”
49 --> “KEYCODE_U”
50 --> “KEYCODE_V”
51 --> “KEYCODE_W”
52 --> “KEYCODE_X”
53 --> “KEYCODE_Y”
54 --> “KEYCODE_Z”
55 --> “KEYCODE_COMMA”
56 --> “KEYCODE_PERIOD”
57 --> “KEYCODE_ALT_LEFT”
58 --> “KEYCODE_ALT_RIGHT”
59 --> “KEYCODE_SHIFT_LEFT”
60 --> “KEYCODE_SHIFT_RIGHT”
61 --> “KEYCODE_TAB”
62 --> “KEYCODE_SPACE”
63 --> “KEYCODE_SYM”
64 --> “KEYCODE_EXPLORER”
65 --> “KEYCODE_ENVELOPE”
66 --> “KEYCODE_ENTER”
67 --> “KEYCODE_DEL”
68 --> “KEYCODE_GRAVE”
69 --> “KEYCODE_MINUS”
70 --> “KEYCODE_EQUALS”
71 --> “KEYCODE_LEFT_BRACKET”
72 --> “KEYCODE_RIGHT_BRACKET”
73 --> “KEYCODE_BACKSLASH”
74 --> “KEYCODE_SEMICOLON”
75 --> “KEYCODE_APOSTROPHE”
76 --> “KEYCODE_SLASH”
77 --> “KEYCODE_AT”
78 --> “KEYCODE_NUM”
79 --> “KEYCODE_HEADSETHOOK”
80 --> “KEYCODE_FOCUS”
81 --> “KEYCODE_PLUS”
82 --> “KEYCODE_MENU”
83 --> “KEYCODE_NOTIFICATION”
84 --> “KEYCODE_SEARCH”
85 --> “TAG_LAST_KEYCODE”
KEYCODE_CALL 撥號(hào)鍵 5
KEYCODE_ENDCALL 掛機(jī)鍵 6
KEYCODE_HOME 按鍵Home 3
KEYCODE_MENU 菜單鍵 82
KEYCODE_BACK 返回鍵 4
KEYCODE_SEARCH 搜索鍵 84
KEYCODE_CAMERA 拍照鍵 27
KEYCODE_FOCUS 拍照對(duì)焦鍵 80
KEYCODE_POWER 電源鍵 26
KEYCODE_NOTIFICATION 通知鍵 83
KEYCODE_MUTE 話筒靜音鍵 91
KEYCODE_VOLUME_MUTE 揚(yáng)聲器靜音鍵 164
KEYCODE_VOLUME_UP 音量增加鍵 24
KEYCODE_VOLUME_DOWN 音量減小鍵 25
KEYCODE_ENTER 回車鍵 66
KEYCODE_ESCAPE ESC鍵 111
KEYCODE_DPAD_CENTER 導(dǎo)航鍵 確定鍵 23
KEYCODE_DPAD_UP 導(dǎo)航鍵 向上 19
KEYCODE_DPAD_DOWN 導(dǎo)航鍵 向下 20
KEYCODE_DPAD_LEFT 導(dǎo)航鍵 向左 21
KEYCODE_DPAD_RIGHT 導(dǎo)航鍵 向右 22
KEYCODE_MOVE_HOME 光標(biāo)移動(dòng)到開始鍵 122
KEYCODE_MOVE_END 光標(biāo)移動(dòng)到末尾鍵 123
KEYCODE_PAGE_UP 向上翻頁(yè)鍵 92
KEYCODE_PAGE_DOWN 向下翻頁(yè)鍵 93
KEYCODE_DEL 退格鍵 67
KEYCODE_FORWARD_DEL 刪除鍵 112
KEYCODE_INSERT 插入鍵 124
KEYCODE_TAB Tab鍵 61
KEYCODE_NUM_LOCK 小鍵盤鎖 143
KEYCODE_CAPS_LOCK 大寫鎖定鍵 115
KEYCODE_BREAK Break/Pause鍵 121
KEYCODE_SCROLL_LOCK 滾動(dòng)鎖定鍵 116
KEYCODE_ZOOM_IN 放大鍵 168
KEYCODE_ZOOM_OUT 縮小鍵 169
KEYCODE_0 按鍵’0’ 7
KEYCODE_1 按鍵’1’ 8
KEYCODE_2 按鍵’2’ 9
KEYCODE_3 按鍵’3’ 10
KEYCODE_4 按鍵’4’ 11
KEYCODE_5 按鍵’5’ 12
KEYCODE_6 按鍵’6’ 13
KEYCODE_7 按鍵’7’ 14
KEYCODE_8 按鍵’8’ 15
KEYCODE_9 按鍵’9’ 16
KEYCODE_A 按鍵’A’ 29
KEYCODE_B 按鍵’B’ 30
KEYCODE_C 按鍵’C’ 31
KEYCODE_D 按鍵’D’ 32
KEYCODE_E 按鍵’E’ 33
KEYCODE_F 按鍵’F’ 34
KEYCODE_G 按鍵’G’ 35
KEYCODE_H 按鍵’H’ 36
KEYCODE_I 按鍵’I’ 37
KEYCODE_J 按鍵’J’ 38
KEYCODE_K 按鍵’K’ 39
KEYCODE_L 按鍵’L’ 40
KEYCODE_M 按鍵’M’ 41
KEYCODE_N 按鍵’N’ 42
KEYCODE_O 按鍵’O’ 43
KEYCODE_P 按鍵’P’ 44
KEYCODE_Q 按鍵’Q’ 45
KEYCODE_R 按鍵’R’ 46
KEYCODE_S 按鍵’S’ 47
KEYCODE_T 按鍵’T’ 48
KEYCODE_U 按鍵’U’ 49
KEYCODE_V 按鍵’V’ 50
KEYCODE_W 按鍵’W’ 51
KEYCODE_X 按鍵’X’ 52
KEYCODE_Y 按鍵’Y’ 53
KEYCODE_Z 按鍵’Z’ 54
KEYCODE_PLUS 按鍵’+’
KEYCODE_MINUS 按鍵’-’
KEYCODE_STAR 按鍵’*’
KEYCODE_SLASH 按鍵’/’
KEYCODE_EQUALS 按鍵’=’
KEYCODE_AT 按鍵’@’
KEYCODE_POUND 按鍵’#’
KEYCODE_APOSTROPHE 按鍵’’’ (單引號(hào))
KEYCODE_BACKSLASH 按鍵’’
KEYCODE_COMMA 按鍵’,’
KEYCODE_PERIOD 按鍵’.’
KEYCODE_LEFT_BRACKET 按鍵’[’
KEYCODE_RIGHT_BRACKET 按鍵’]’
KEYCODE_SEMICOLON 按鍵’;’
KEYCODE_GRAVE 按鍵’`’
KEYCODE_SPACE 空格鍵文章來源:http://www.zghlxwxcb.cn/news/detail-462809.html
KEYCODE_NUMPAD_0 小鍵盤按鍵’0’
KEYCODE_NUMPAD_1 小鍵盤按鍵’1’
KEYCODE_NUMPAD_2 小鍵盤按鍵’2’
KEYCODE_NUMPAD_3 小鍵盤按鍵’3’
KEYCODE_NUMPAD_4 小鍵盤按鍵’4’
KEYCODE_NUMPAD_5 小鍵盤按鍵’5’
KEYCODE_NUMPAD_6 小鍵盤按鍵’6’
KEYCODE_NUMPAD_7 小鍵盤按鍵’7’
KEYCODE_NUMPAD_8 小鍵盤按鍵’8’
KEYCODE_NUMPAD_9 小鍵盤按鍵’9’
KEYCODE_NUMPAD_ADD 小鍵盤按鍵’+’
KEYCODE_NUMPAD_SUBTRACT 小鍵盤按鍵’-’
KEYCODE_NUMPAD_MULTIPLY 小鍵盤按鍵’*’
KEYCODE_NUMPAD_DIVIDE 小鍵盤按鍵’/’
KEYCODE_NUMPAD_EQUALS 小鍵盤按鍵’=’
KEYCODE_NUMPAD_COMMA 小鍵盤按鍵’,’
KEYCODE_NUMPAD_DOT 小鍵盤按鍵’.’
KEYCODE_NUMPAD_LEFT_PAREN 小鍵盤按鍵’(’
KEYCODE_NUMPAD_RIGHT_PAREN 小鍵盤按鍵’)’
KEYCODE_NUMPAD_ENTER 小鍵盤按鍵回車文章來源地址http://www.zghlxwxcb.cn/news/detail-462809.html
到了這里,關(guān)于常識(shí)——(adb)小米VR正式版使用第三方APP,電腦充當(dāng)手機(jī)的藍(lán)牙手柄,實(shí)現(xiàn)確認(rèn)功能,從電腦鍵盤向手機(jī)輸入文字的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!