簡體   English   中英

使用adb shell dpm set-device-owner的無根設備(Android L)(無NFC)上的設備所有者

[英]Device owner on a nonrooted device (Android L), without NFC, using adb shell, dpm set-device-owner

這里的最終目的是在“ kiosk mod”中安裝一個設備。

他們 說,您既不需要NFC也無需扎根,即可使應用程序成為設備所有者 我還沒有看到這種方法的完整示例,但請嘗試:

adb shell dpm set-device-owner <package>/.<ReceiverImplementation>

應該做...所以我這樣做,並得到:

java.lang.SecurityException: 
Neither user 2000 nor current process has android.permission.BIND_DEVICE_ADMIN.

因此,以下代碼返回false。

((DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE))
   .isDeviceOwnerApp(getApplicationContext().getPackageName())

此STO問題提出了類似的問題,但未指定實際失敗。

清單文件和其他來源的主要靈感來自此google示例

<manifest
    package="com.example.android.deviceowner"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1"
    android:versionName="1.0">

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

        <activity
            android:name=".MainActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

        <receiver
            android:name=".DeviceOwnerReceiver"
            android:description="@string/app_name"
            android:label="@string/app_name"
            android:permission="android.permission.BIND_DEVICE_ADMIN">
            <meta-data
                android:name="android.app.device_admin"
                android:resource="@xml/device_owner_receiver"/>
            <intent-filter>
                <action android:name="android.app.action.ACTION_DEVICE_ADMIN_ENABLED"/>
            </intent-filter>
        </receiver>

    </application>

</manifest>

我目前正在嘗試執行此操作的設備是LG G Pad。

您的清單文件似乎正確。 您應該知道,它可能來自執行此命令時的系統狀態。 成功運行dpm命令之前,應檢查許多點:

  • 確保您的應用已經安裝,就像其他休閑應用一樣
  • 在使用當前用戶之前,請確保尚未為當前用戶設置任何帳戶(確保在“設置”>“帳戶”中未設置任何帳戶)。
  • 不應已經注冊了現有的設備所有者

最好的做法(實際上是我在做實驗時所做的事情)是完全恢復出廠設置,並避免執行大多數配置步驟(強制步驟“配置Wi-Fi”和“名稱”除外),並且不要將任何關聯Google帳戶
設置后,您一定會處於干凈狀態。 然后,

  1. 激活調試
  2. 使用您的IDE安裝您的應用程序(或使用pm install ...)
  3. 運行命令adb shell dpm set-device-owner ...

我在博客上了一篇文章,解釋了其中的大多數步驟 ,請看一下它,這可能對您有用。

我不確定這是否會對您有所幫助,但是如果您不滿意,也許其他人會使用此解決方案。 我在Samsung Tab A上遇到了非常相似的問題。我無法為應用程序設置所有權。 始終在運行時:

adb shell dpm set-device-owner cy.com.myapp/.AdminReceiver

我得到:

java.lang.SecurityException: Neither user 2000 nor current process has 
com.sec.enterprise.permission.MDM_PROXY_ADMIN_INTERNAL.

經過長時間的搜索,我終於發現我需要在清單權限中添加Samsung的特殊權限:

<uses-permission android:name="com.samsung.accessory.permission.ACCESSORY_FRAMEWORK" />

做到了這一點,現在我的應用程序可以按需進入信息亭模式。 您可能正在尋找類似的問題-可能需要為LG設置一個或多個權限設置。 我的解決方案適用於無根設備(顯然沒有添加任何帳戶-恢復出廠設置后仍有效)。

暫無
暫無

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

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