Die Android-Zwischenablage stellt den zuvor kopierten MIME-Typ nicht bereit, wenn versucht wird, Daten daraus abzurufenAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Die Android-Zwischenablage stellt den zuvor kopierten MIME-Typ nicht bereit, wenn versucht wird, Daten daraus abzurufen

Post by Anonymous »

Die Android-Anwendung, die ich schreibe, verwendet die Zwischenablage, um das Kopieren/Einfügen von Informationen zwischen verschiedenen Dateien zu ermöglichen. Speicherorte in der App, aber aus bestimmten Gründen gibt die Zwischenablage die Daten nicht mit dem vorgesehenen MIME-Typ zurück, obwohl die Anwendung die Daten zuvor unter Angabe desselben MIME-Typs in die Zwischenablage kopiert hat:
Dies ist der Code, der die Daten in die Zwischenablage kopiert:

Code: Select all

    ...
String data = convertToJSON(object); // the data that I want to copy-paste (an object representad as text using JSON syntax)
String mimeType = "application/vnd.myapp.items+json";
ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.setPrimaryClip(new ClipData("items", new String[] { mimeType }, new ClipData.Item(data)));
...
Und das ist der Code, der genau dieselben Daten erneut aus der Zwischenablage abrufen soll:

Code: Select all

    ...
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = clipboard.getPrimaryClip();
if (clip != null && clip.getItemCount() > 0) {
ClipData.Item   clipItem = clip.getItemAt(0);
ClipDescription clipDesc = clip.getDescription();
String[] availableMimeTypes = clipDesc.filterMimeTypes("*/*");
if (availableMimeTypes != null) {
Collection availableMimeTypesList = Arrays.asList(availableMimeTypes);
Log.v(TAG, "got " + clipDesc.getMimeTypeCount() + " MIME-types: " + availableMimeTypesList);
if (availableMimeTypesList.contains("application/vnd.myapp.items+json")) {
// *** the above check always fails and the data is never retrieved :-( ***
String clipboardContent = clipItem.coerceToText(this).toString();
Object x = convertFromJSON(clipboardContent);
...
}
...
}
}
...
Aus irgendeinem (zumindest für mich) mysteriösen Grund ergibt das Protokoll, das alle verfügbaren MIME-Typen anzeigt, immer „got 1 MIME-types: [text/plain]“ als einzig verfügbaren, obwohl ich die Daten gerade als
kopiert habe

Code: Select all

"application/vnd.myapp.items+json"
vor wenigen Sekunden in die Zwischenablage verschoben. Irgendeine Idee, warum das so ist? Was stimmt mit dem obigen Code nicht? Was fehlt mir?
Zum Testen habe ich auch eine „Sanity Check“ hinzugefügt und direkt nach dem Hinzufügen meiner Daten zur Zwischenablage angezeigt, welche MIME-Versionen bereitgestellt werden. Außerdem wird nur Text/Plain angezeigt, obwohl ich gerade einen Clip mit dem MIME-Typ application/vnd.myapp.items+json hinzugefügt habe. Was ist hier los?
Ich bin zu 100 % sicher, dass genau dieser Code bereits in früheren Versionen (also Android-Versionen und AndroidStudio-Versionen) funktioniert hat, aber aus irgendeinem seltsamen Grund funktioniert er nicht mehr und ich bin verblüfft, warum das so ist. Irgendjemand eine Idee oder Erklärung?
Die aktuelle Ziel-API meiner Anwendung ist „33“.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post