Metodo NdefRecord.createTextRecord ("en", "string") che non funziona al di sotto del livello API 21

Questo codice funziona bene quando lo uso su un dispositivo con Android Lollipop (5.x) o Marshmallow (6.0):

@TargetApi(Build.VERSION_CODES.LOLLIPOP) public NdefMessage createNdfMessage(String content) { NdefRecord record = NdefRecord.createTextRecord("en", content); NdefMessage msg = new NdefMessage(new NdefRecord[]{record}); return msg; } 

Ma quando provo questo su un dispositivo con Android 4.2.2 (livello API 17), la mia applicazione si blocca. Come posso utilizzare questo codice per creare un record di text sui livelli di API sotto i 21 (il livello di API in cui è NdefRecord.createTextRecord reso disponibile il metodo NdefRecord.createTextRecord )?

  • Firebase + Android - Notifiche ChildAdded - Come get solo New Childs?
  • 5.1 Crash - Il colore primario di un TaskDescription dovrebbe essere opaco
  • Valore restituito di Android in AsyncTask onPostExecute utilizzando l'interface
  • Come utilizzare AsyncTask per Jsoup Parser?
  • La fatturazione Google in-App, IllegalArgumentException: l'intento di servizio deve essere esplicito, dopo l'aggiornamento a Android L Dev Preview
  • Collegamento di Android NDK
  • Selettore Android e colore del text
  • Android: preferenza di dimensione del font di applicazione
  • Avvio di Google Open Oldsense di Google OpenSSL
  • Non è ansible determinare se l'archivio Google Play è installato o less sul dispositivo Android
  • Android: Includi eseguibile eseguibile binario in AOSP build
  • onActivityResult è tornato da una camera, Intent null
  • 2 Solutions collect form web for “Metodo NdefRecord.createTextRecord ("en", "string") che non funziona al di sotto del livello API 21”

    Il metodo NdefRecord.createTextRecord() stato introdotto nel livello API 21. Di conseguenza, non è disponibile su piattaforms al di sotto di tale livello API. Tuttavia, è ansible assemblare facilmente il record di text da soli. Il payload di un record di text è costituito da un byte di stato, un field di codice di lingua e un field di text:

     + ------------- + --------------- + ------------------- ------- +
     |  Byte di stato  Codice linguaggio  Testo |
     |  (1 byte) |  (n byte) |  (m byte) |
     + ------------- + --------------- + ------------------- ------- +
    
    • Il byte di stato indica la codifica dei caratteri del field di text ( 0 = UTF-8, 1 = UTF-16) nel bit 7 e la lunghezza n del codice di lingua nei bit 5..0. Il bit 6 deve essere sempre zero.
    • Il codice linguaggio archiviato contiene un codice linguaggio IANA codificato in US-ASCII (ad es. "En").

    È ansible creare il record di text utilizzando questo metodo:

     public static NdefRecord createTextRecord(String language, String text) { byte[] languageBytes; byte[] textBytes; try { languageBytes = language.getBytes("US-ASCII"); textBytes = text.getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { throw new AssertionError(e); } byte[] recordPayload = new byte[1 + (languageBytes.length & 0x03F) + textBytes.length]; recordPayload[0] = (byte)(languageBytes.length & 0x03F); System.arrayscopy(languageBytes, 0, recordPayload, 1, languageBytes.length & 0x03F); System.arrayscopy(textBytes, 0, recordPayload, 1 + (languageBytes.length & 0x03F), textBytes.length); return new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, null, recordPayload); } NdefRecord r = createTextRecord("en", content); 

    Sì, createTextRecord viene introdotto in API 21, quindi non puoi chiamarlo nelle versioni precedenti. https://developer.android.com/reference/android/nfc/NdefRecord.html

    Controllare se il livello API è di 21 prima di call createTextRecord.

     public NdfeMessage create(String content){ int currentapiVersion = android.os.Build.VERSION.SDK_INT; if (currentapiVersion >= android.os.Build.VERSION_CODES.LOLLIPOP){ NdefRecord record = NdefRecord.createTextRecord("en", content); NdefMessage msg = new NdefMessage(new NdefRecord[]{record}); return msg; } else{ return null; } } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.