2016-06-25 35 views
2

Ich entwickle gerade eine App und habe folgendes Problem.Android NFC-Gerätebesitzer-Bereitstellung: Senden Sie benutzerdefinierte Eigenschaften. Ist es möglich?

Bei der Verwendung von NFC für die Gerätebesitzer-Bereitstellung möchte ich eine Zeichenfolge senden, die von der neuen Gerätebesitzer-App verwendet wird.

Ich bin mir bewusst, der Standard-MIME-Eigenschaften für Gerätebesitzer Provisioning, gefunden here

Hier ist ein Ausschnitt, dass Sie eine bessere visuelle meiner Frage geben kann. Beachten Sie die Eigenschaft "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) {       

} 

Dieser Ausschnitt liegt innerhalb

public NdefMessage createNdefMessage(NfcEvent event) 

und Sie können eine Vorlage here

Falls dies möglich ist, habe ich auch wissen möchte zu finden, wie diese Zeichenfolge Wert abgerufen werden, sobald Die bereitgestellte App wurde gestartet.

Vielen Dank für Ihre Antworten im Voraus.

Antwort

5

Der folgende Code sollte das sein, wonach Sie suchen. Der Kürze halber habe ich nur den Paketnamen plus zwei Zeichenfolgen angegeben, die an Ihren DeviceAdminReceiver gesendet werden.

@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); 
    } 
} 

Der nächste Schnipsel in Ihrem DeviceAdminReceiver, um gehen, die „Admin Extras“ zu erhalten ... Wenn Sie OnReceive nicht außer Kraft setzen, onProfileProvisioningComplete müssen mit EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE dort behandeln außer Kraft gesetzt werden, stattdessen.

@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")); 
    } 
} 
0

onProfileProvisioningComplete wird wie folgt überschrieben.

@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")); 
}