【问题标题】:Android NFC device owner provisioning: send custom properties. Is it possible?Android NFC 设备所有者配置:发送自定义属性。可能吗?
【发布时间】:2016-06-25 23:59:41
【问题描述】:

我目前正在开发一个应用程序并遇到以下问题。

在使用 NFC 进行设备所有者配置时,我想发送一个字符串,供新的设备所有者应用使用。

我知道用于设备所有者配置的标准 MIME 属性,发现 here

这是一个可以让您更好地了解我的问题的 sn-p。注意“myCustomValue”属性。

Properties properties = new Properties();
properties.put("myCustomValue", value);
properties.put(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, "com.example.some.app");
try {                    
    properties.store(stream, "NFC Provisioning");            
    ndefMessage = new NdefMessage(new NdefRecord[{NdefRecord.createMime(DevicePolicyManager.MIME_TYPE_PROVISIONING_NFC, stream.toByteArray())});
} catch (IOException e) {                         

}

这个sn-p在里面

public NdefMessage createNdefMessage(NfcEvent event)

你可以找到一个模板here

如果可能的话,我也想知道如何在配置的应用程序启动后立即检索该字符串值。

【问题讨论】:

    标签: java android provisioning nfs


    【解决方案1】:

    下面的代码应该是您正在寻找的。为简洁起见,我只设置了包名加上两个将发送到您的 DeviceAdminReceiver 的字符串。

    @Override
    public NdefMessage createNdefMessage(NfcEvent event) {
        try {
            Properties p = new Properties();
    
            p.setProperty(
                    DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME,
                    "com.example.some.app");
    
            Properties extras = new Properties();
            extras.setProperty("Key1", "TestString1");
            extras.setProperty("Key2", "TestString2");
            StringWriter sw = new StringWriter();
            try{
                extras.store(sw, "admin extras bundle");
                p.put(DevicePolicyManager.EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE,
                        sw.toString());
                Log.d(TAG, "Admin extras bundle=" + p.get(
                        DevicePolicyManager.EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE));
            } catch (IOException e) {
                Log.e(TAG, "Unable to build admin extras bundle");
            }
    
            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);
        }
    }
    

    下一个 sn-p 将进入您的 DeviceAdminReceiver 以接收“Admin Extras”...如果您不覆盖 onReceive,则需要 onProfileProvisioningComplete用在其中处理的 EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE 覆盖。

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "onReceive " + intent.getAction());
        if (ACTION_PROFILE_PROVISIONING_COMPLETE.equals(intent.getAction())) {
            PersistableBundle extras = intent.getParcelableExtra(
                    EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE);
            Log.d(TAG, "onReceive Extras:" + extras.getString("Key1") + " / "  + extras.getString("Key2"));
        }
    }
    

    【讨论】:

      【解决方案2】:

      onProfileProvisioningComplete 将像这样被覆盖。

      @Override
      public void onProfileProvisioningComplete(final Context context, final Intent intent)
      {
          final PersistableBundle extras = intent.getParcelableExtra(DevicePolicyManager.EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE);
          Log.d(TAG, "onProfileProvisioningComplete Extras:" + extras.getString("Key1") + " / " + extras.getString("Key2"));
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多