Android 5.0(和其他设备)上的设备所有者使用root设备,通过NFC设备配置

时间:2014-11-13 10:07:55

标签: android nfc android-5.0-lollipop provisioning

我需要知道如何在Android 5.0,4.4和4.3(?)中将我的应用程序设置为设备所有者。我已经成功地尝试了根设备(described in there)的方法。我看到它在android 5.0和4.4.2模拟器以及CyanoGen AOSP 4.4.4(所有有根设备)中都很有效。但是我必须在其他非root设备上尝试这个,在Android 5.0 Developer API中你可以阅读这个

  

"要部署和激活设备所有者,您必须执行NFC数据   在设备进入时从编程应用程序转移到设备   它没有设想的状态。"

但我不明白这意味着什么,或者更好,我要做什么。有人可以帮助我,还是向我解释要做的一步?

PS。我知道NFC是什么以及它是如何工作的但是我不能理解如何使用这个问题。

2 个答案:

答案 0 :(得分:24)

创建一个NFC触发器应用程序并将其安装在具有NFC的设备上(除了您要将您的应用设备作为设备所有者的设备之外)。

以下是NFC触发器的代码

public class MainActivity extends Activity implements CreateNdefMessageCallback {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
        nfcAdapter.setNdefPushMessageCallback(this, this);
    }

    @Override
    public NdefMessage createNdefMessage(NfcEvent event) {
        try {
            Properties p = new Properties();

            p.setProperty(
                    DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME,
                    "apk package name");
            p.setProperty(
                    DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION,
                    "app download url");
            p.setProperty(
                    DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM,
                    "apk checksum");
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            OutputStream out = new ObjectOutputStream(bos);
            p.store(out, "");
            final byte[] bytes = bos.toByteArray();

            NdefMessage msg = new NdefMessage(NdefRecord.createMime(
                    DevicePolicyManager.MIME_TYPE_PROVISIONING_NFC, bytes));
            return msg;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

对于校验和运行命令

  

cat your_device_owner_app_name.apk | openssl dgst -binary -sha1 | openssl base64 | tr'+ /'' - _'| tr -d'='

  • 将生成的校验和粘贴到NFC触发器代码中。
  • 在设备上编译并运行NFC触发器应用程序。

现在上传你想要在google drive或dropbox上作为设备所有者制作的应用程序apk。

使用新设备或出厂设置重置要将应用程序设置为设备所有者的设备。

重新启动设备,并在第一个屏幕上为您的设备带来NFC触发应用程序和触摸光束传输。

您的应用程序将被下载,并将作为设备所有者安装。

答案 1 :(得分:1)

如果需要,也可以使用adb设置设备所有者,如下所述: http://sdgsystems.com/blog/implementing-kiosk-mode-android-part-3-android-lollipop