Android 安卓5.0(及其他)上的设备所有者,无根设备,NFC提供设备

Android 安卓5.0(及其他)上的设备所有者,无根设备,NFC提供设备,android,nfc,android-5.0-lollipop,provisioning,Android,Nfc,Android 5.0 Lollipop,Provisioning,我需要知道如何在Android 5.0、4.4和4.3(?)中将我的应用程序设置为设备所有者。我已经为根设备()成功地尝试了该方法。我在android 5.0和4.4.2 emulator以及CyanoGen AOSP 4.4.4(所有根设备)中看到了这一点。但我必须在其他非根设备上尝试这一点,在Android 5.0开发者API中,您可以阅读这一点 “要部署和激活设备所有者,您必须执行NFC数据访问 当设备处于运行状态时,从编程应用程序传输到设备 这是一种无远见的状态。” 但我不明白这意味着什

我需要知道如何在Android 5.0、4.4和4.3(?)中将我的应用程序设置为设备所有者。我已经为根设备()成功地尝试了该方法。我在android 5.0和4.4.2 emulator以及CyanoGen AOSP 4.4.4(所有根设备)中看到了这一点。但我必须在其他非根设备上尝试这一点,在Android 5.0开发者API中,您可以阅读这一点

“要部署和激活设备所有者,您必须执行NFC数据访问 当设备处于运行状态时,从编程应用程序传输到设备 这是一种无远见的状态。”

但我不明白这意味着什么,或者更确切地说,我必须做什么。有人能帮我吗,或者告诉我该怎么做


另外,我知道什么是NFC以及它是如何工作的,但我不知道如何使用它来解决这个问题。

创建一个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触发器应用程序
现在上传你的应用程序apk,你想让它成为谷歌硬盘或dropbox上的设备所有者

取一个新的设备,或将要将应用程序设置为设备所有者的设备重置为出厂设置

重新启动设备,在第一个屏幕上显示包含NFC触发器应用程序的设备,并触摸光束传输


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

如果需要,还可以使用adb设置设备所有者,如下所述:

See.TK我以前试过很多次,但我的设备的nfc芯片出现了一些问题。我更换了设备,现在可以正常工作了。这对我有帮助是的,这项工作,我试过了,很好。这就是我所需要的,在这几天里,我尝试了NFC和非NFC的其他方法。我刚刚找到了一个不使用根和NFC标记的方法来进行配置,然后我开始测试that@alex_au请分享您发现的新方法,谢谢。是的,当然,您必须以新的意图复制TAG_DISCOVERED操作,并在此添加额外内容:
NfcAdapter.EXTRA_TAG
NfcAdapter.EXTRA_NDEF_MESSAGES
NfcAdapter.EXTRA_ID
,使用正确的值,我创建了这个意图,引用android在发现新标签时发送的意图,并用正确的数据填充它们。另一个开发解决方案是使用。不需要root、NFC甚至两个设备。嗨@Sunil Jain,你的校验和是正确的。在您的dropbox url中,将dl=0替换为dl=1,然后重试。:)最好在这里描述解决方案并将其归因于原始来源。