簡體   English   中英

如何通過亞行解鎖安卓手機

[英]How to unlock android phone through ADB

我的屏幕壞了,我想解鎖我的手機,這樣我就可以通過 Kies 訪問它來備份我的照片。

我通過 Android 設備管理器設置了一個簡單的密碼來鎖定手機(希望在我鎖定后有一個解鎖選項)並嘗試了各種方法來解鎖它,例如:

adb shell input text 1234

因為我不知道鎖屏是什么樣子,所以我不確定解鎖它的正確輸入。

我知道電話已經打開並且它響應 adb。 我還可以通過 Eclipse 在其上運行應用程序。 這是一款搭載 Android 5.0 的三星 Galaxy S5。

如果您必須在輸入密碼后單擊確定,此命令將解鎖您的手機:

adb shell input text XXXX && adb shell input keyevent 66

在哪里

  • XXXX是您的密碼。
  • 66OK按鈕的鍵碼。
  • adb shell input text XXXX將輸入您的密碼。
  • adb shell input keyevent 66會模擬點擊OK按鈕

此命令可幫助您使用 ADB 解鎖手機

adb shell input keyevent 82 # unlock

在 Nexus 5 中測試:

adb shell input keyevent 26 #Pressing the lock button
adb shell input touchscreen swipe 930 880 930 380 #Swipe UP
adb shell input text XXXX #Entering your passcode
adb shell input keyevent 66 #Pressing Enter

為我工作。

如果您在手機上啟用了 USB 調試/ADB,並且您的 PC 被授權在手機上進行調試,那么您可以嘗試以下工具之一:

scrcpy

scrcpy 通過 adb 連接到您的設備並執行一個臨時應用程序以將屏幕內容流式傳輸到您的 PC,您就可以遠程控制您的設備。 它適用於 GNU/Linux、Windows 和 macOS。

維索爾

Vysor 是一個 chrome 網絡應用程序,它通過 adb 連接到您的設備並安裝一個配套應用程序以將您的屏幕內容流式傳輸到 PC。 然后,您可以使用鼠標遠程控制您的設備。

猴子遙控器

MonkeyRemote 是我在發現 Vysor 之前自己編寫的遠程控制工具。 它還通過 adb 連接並讓您通過鼠標控制您的設備,但與 Vysor 相比,流式屏幕內容更新速度非常慢(每秒約 1 幀)。 好處是不需要安裝配套的應用程序。

另一種方式僅供您參考。

使用USB OTG線連接USB鼠標,點擊鼠標即可觸摸屏幕!

下面的命令在屏幕打開和關閉時都有效

要鎖定屏幕:

adb shell input keyevent 82 && adb shell input keyevent 26 && adb shell input keyevent 26

鎖定屏幕並將其關閉

adb shell input keyevent 82 && adb shell input keyevent 26

無需通過即可解鎖屏幕

adb shell input keyevent 82 && adb shell input keyevent 66

解鎖已通過 1234 的屏幕

adb shell input keyevent 82 && adb shell input text 1234 && adb shell input keyevent 66

如果設備被黑屏鎖定,請運行以下命令:

  1. adb shell input keyevent 26 - 這將打開屏幕
  2. adb shell input keyevent 82 - 這將解鎖並要求輸入密碼
  3. adb shell input text xxxx && adb shell input keyevent 66 - 這將輸入您的密碼並按回車鍵,將設備解鎖到主屏幕

如果您安裝並連接了 MyPhoneExplorer(不確定這是必須的,碰巧我已經設置了),您可以使用它來通過計算機鼠標控制屏幕。 它通過 ADB 連接,您的普通 USB 電纜就足夠了。

我發現即使沒有重新啟動也可以工作的另一個解決方案是更新 settings.db 和 locksettings.db 中的表,但我必須切換到 root 才能打開 settings.db:

 adb shell
 su
 sqlite3 /data/data/com.android.providers.settings/databases/settings.db
 update secure set value=1 where name='lockscreen.disabled';
 .quit
 sqlite3 /data/system/locksettings.db
 update locksettings set value=0 where name='lock_pattern_autlock';
 update locksettings set value=1 where name='lockscreen.disabled';
 .quit

讓我編輯表格的來源

我想分享我的方法,首先我讓華為登高 p7 並且我的觸摸屏停止處理觸摸,所以上述解決方案都沒有幫助我解鎖手機,自從我找到了一個更好的聰明方法來做到這一點可以看到屏幕,因此我認為我的顯示器是 1080 x 1920 像素,因此我必須使用帶有 (x,y) 的鍵盤在我的 photoshop 上模擬繪圖,所以我可以嘗試input mouse tap命令。

模擬截圖

由於我在圖片中看到了密碼鎖定,因此我獲得了屏幕上所有數字的所有 (x,y) 以模擬觸摸和解鎖我的屏幕,並且必須備份我的數據,因此如果我的密碼是 123我做了以下所有命令

adb shell input mouse tap 100 1150
adb shell input mouse tap 500 1150
adb shell input mouse tap 900 1150

然后我的手機剛剛解鎖,我希望它有幫助。

如果您想在不觸摸手機的情況下打開手機,這里是方法

腳步

  1. 確保你已經在 pc 和 android 中完成了adb 設置
  2. 打開cmd (命令提示符)
  3. 輸入adb devices以確認您的手機是否准備就緒
  4. 如果它顯示類似
List of devices attached
059c97f4        device

然后輸入以下命令

adb shell input keyevent 26 && adb shell input swipe 600 600 0 0 && adb shell input text <pass> && adb shell input keyevent 66

將您的密碼輸入<pass>並完成。 您的手機有望打開

我發現了一個特殊情況,其中滑動(ADB shell 輸入觸摸屏滑動...)來解鎖主屏幕不起作用。 更確切地說是 Acer Z160 和 Acer S57。 手機已經成為歷史,但我們的開發人員仍然需要考慮它們。 是解決我的問題的代碼源。 我已經讓我的應用程序從設備開始。 在“onCreate”函數中,我臨時更改了鎖類型。

此外,以防萬一谷歌驅動器對 zip 文件執行某些操作,我將在下面發布該代碼的片段。

安卓清單:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.example.gresanuemanuelvasi.test_wakeup">
        <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
        <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <receiver android:name=".ServiceStarter" android:enabled="true" android:exported="false" android:permission="android.permission.RECEIVE_BOOT_COMPLETED"
                android:directBootAware="true" tools:targetApi="n">
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED"/>
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </receiver>
        </application>
    </manifest>

    class ServiceStarter: BroadcastReceiver() {
        @SuppressLint("CommitPrefEdits")
        override fun onReceive(context: Context?, intent: Intent?) {
            Log.d("EMY_","Calling onReceive")
             context?.let {
                 Log.i("EMY_", "Received action: ${intent!!.getAction()}, user unlocked: " + UserManagerCompat.isUserUnlocked(context))

                 val sp =it.getSharedPreferences("EMY_", Context.MODE_PRIVATE)
                 sp.edit().putString(MainActivity.MY_KEY, "M-am activat asa cum trebuie!")

                 if (intent!!.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
                     val i = Intent(it, MainActivity::class.java)
                     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                     it.startActivity(i)
                 }
            }
        }
    }

class MainActivity : AppCompatActivity() {

    companion object {
        const val MY_KEY="MY_KEY"
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val kgm = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
        val kgl = kgm.newKeyguardLock(MainActivity::class.java.simpleName)
        if (kgm.inKeyguardRestrictedInputMode()) {
            kgl.disableKeyguard()
        }

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(arrayOf(Manifest.permission.RECEIVE_BOOT_COMPLETED), 1234)
        }
        else
        {
            afisareRezultat()
        }
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {

        if(1234 == requestCode )
        {
            afisareRezultat()
        }

        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    }

    private fun afisareRezultat() {
        Log.d("EMY_","Calling afisareRezultat")
        val sp = getSharedPreferences("EMY_", Context.MODE_PRIVATE);
        val raspuns = sp.getString(MY_KEY, "Doesn't exists")
        Log.d("EMY_", "AM primit: ${raspuns}")
        sp.edit().remove(MY_KEY).apply()
    }
}

@Yogeesh Seralathan 稍微修改了答案。 他的回答完美無缺,只需立即運行這些命令。

adb shell input keyevent 26 && adb shell input keyevent 82 && adb shell input text XXXX && adb shell input keyevent 66

// 或者
adb shell input keyevent 26 && adb shell input touchscreen swipe 930 880 930 380 && adb shell input text XXXX && adb shell input keyevent 66

在哪里:
input Keyevent 26表示按下電源按鈕。
input touchscreen swipe 930 880 930 380表示向上滑動。
input text XXXX表示您輸入的密碼。
input keyevent 66表示 Enter key Pressed。

基於@Bhaskar 的回答和其他人,這里有一個完整的解鎖命令(在 Pixel 3 上測試):

adb shell input keyevent 26 && adb shell input keyevent 82 && adb shell input text <password> && adb shell input keyevent 66

滑動解鎖(適用於 Pixel 3a):

adb shell input keyevent 26 && adb shell input touchscreen swipe 2 4400 500 2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM