При использовании кода ниже я получаю сообщение Couldn't use the admin app due to a checksum error. Contact your IT department
. В основном у вас есть два устройства Lollipop для Android. Одно устройство не предусмотрено (Factory reset), а другое - это приложение для программирования. Приложение для программирования отправляет NFC-команду на непроизведенное устройство, чтобы сообщить ему, чтобы начать подготовку с использованием данных, которые вы передаете ему. Требуется три поля (APK Location, контрольная сумма файла APK и имя пакета) в соответствии с DevicePolicyManager. MIME_TYPE_PROVISIONING_NFC.
APK загружается. Я проверяю журналы своего сервера, и он явно приходит с устройства (AndroidDownloadManager
находится в пользовательском агенте).
В соответствии с DevicePolicyManager. EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM это контрольная сумма SHA-1 файла. Контрольная сумма не соответствует. Я пробовал много разных форматов этой контрольной суммы (hex, hex с пробелами, прописными/строчными буквами, base64, text), и я предполагаю, что это возможно, я пропустил тест.
К сожалению, источник Android Lollipop пока недоступен, иначе я бы проверял там.
Как это исправить? Любые мысли?
public class ProvisionerActivity extends Activity implements CreateNdefMessageCallback {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NfcAdapter mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
mNfcAdapter.setNdefPushMessageCallback(this, this);
}
@Override
public NdefMessage createNdefMessage(NfcEvent event) {
try {
Properties p = new Properties();
p.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, "com.example.deviceownertest");
p.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION, "http://example.com/DeviceOwnerTest.apk");
p.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM, "19138948d8a607617971af724ffd08dd7eab771b");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
OutputStream out = new ObjectOutputStream(bos);
p.store(out, "");
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);
}
}
}
Примечание.. Используется последний Android L Developer Preview. Я думаю, вполне возможно, что эта функция еще не закончена.
Обновление: Фактический выпуск действует так же.
APK: https://storage.googleapis.com/randy/DeviceOwnerCheck.apk
Контрольная сумма: FRaAsqdPSjp9nC5hKIU/ElPv + e4
Результат: Использование этого URL-адреса, и эта контрольная сумма дает ошибку и даже не попадает на экран устройства шифрования.С >
Я также разместил два приложения для GitHub. Один отправляет данные NFC в положение. Другой - это просто приложение, чтобы проверить, является ли приложение администратором устройства или владельцем устройства. Надеюсь, кто-то найдет это полезным. Вам нужно будет изменить URL-адрес и контрольную сумму, если вы хотите самостоятельно создать DeviceOwnerCheck.