android - Android 5.0(和其他)上的设备所有者没有 root 设备,通过 NFC 进行设备配置

标签 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设备)中运行良好。但我必须需要在其他非 root 设备上尝试这个,在 Android 5.0 Developer API 中你可以阅读这个

"To deploy and activate a device owner, you must perform an NFC data transfer from a programming app to the device while the device is in its unprovisioned state."

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

附言。我知道 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 触发应用。

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

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

重新启动设备并在第一个屏幕上打开包含 NFC 触发应用程序的设备并触摸以进行光束传输。

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

关于android - Android 5.0(和其他)上的设备所有者没有 root 设备,通过 NFC 进行设备配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26906210/

相关文章:

android - 如何在 notifyChange 后更改 Loader<Cursor> 中的查询

Android Lollipop 网络 API 和 OkHttp

android - MediaSession 在锁定屏幕上不显示背景

android - 在 api21 上添加 PersistentPreferredActivity

java - NFC 权限错误

android - 在 Android 中使用电子邮件链接通过 Firebase 进行身份验证 : UNAUTHORIZED_DOMAIN error

Java 格式长

android - ACRA 集成和 Google 云端硬盘

android - 如何使用自定义广告系列归因(不是网址)设置谷歌分析

用于 NFC 的 Android 的 ForegroundDispatch