【问题标题】:Device Owner on Android 5.0 (and others) whitout rooted devices, device provisioning by NFCAndroid 5.0(和其他)设备所有者,无根设备,NFC 设备配置
【发布时间】:2014-11-13 10:07:54
【问题描述】:

我需要知道如何在 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 是什么以及它是如何工作的,但我不明白如何使用它来解决这个问题。

【问题讨论】:

标签: android nfc android-5.0-lollipop provisioning


【解决方案1】:

创建一个 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 触发应用程序和触摸以进行光束传输。

您的应用程序将被下载并以设备所有者身份安装。

【讨论】:

  • 是的,这个作品,我试过了,很好。这就是我所需要的,在这几天里,我尝试了其他有 NFC 和没有 NFC 的方法。我刚刚找到了一种无需 root 且不使用 NFC 标签的方法,然后我去测试它
  • @alex_au 你能分享一下你找到的新方法吗,谢谢
  • 是的,您必须以新的意图复制 TAG_DISCOVERED 操作,并在其中添加附加内容:NfcAdapter.EXTRA_TAGNfcAdapter.EXTRA_NDEF_MESSAGESNfcAdapter.EXTRA_ID,具有正确的值,我创建了这个意图指的是发现新标签时android发送的意图,我用正确的数据填充它们。
  • 另一种开发解决方案是使用adb shell dpm。无需 root、NFC 甚至两台设备。
  • 嗨@Sunil Jain,您的校验和是正确的。在您的保管箱网址中,将 dl=0 替换为 dl=1,然后重试。 :)
【解决方案2】:

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

【讨论】:

  • 最好在这里描述解决方案并注明出处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 2016-04-03
  • 2015-07-27
  • 2015-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多