Android presse-papiers de code qui fonctionne sur tous les niveaux de l'API
Le presse-papiers de code qui fonctionne pour API niveaux < 11 se bloque sur les appareils avec l'API niveaux >= 11.
Le presse-papiers code du travail pour les API de niveau >= 11 accidents sur les appareils avec l'API niveaux < 11.
Je ne peux pas compiler du code pour les deux versions, car ils ont contradictoires en matière d'importation.
On a besoin de:
import android.texte.ClipboardManager;
tandis que les autres besoins:
import android.contenu.ClipboardManager;
Il y a sûrement un moyen d'écrire du code qui fonctionne sur les deux côtés de l'API de niveau 11. Je ne peux pas le comprendre.
***Édité (Puisque je ne peux pas répondre à ma propre question) *******
J'ai trouvé le problème. Le message d'exception dit, "ne Peut pas créer de gestionnaire à l'intérieur d'un thread qui n'a pas appelé Looper.prepare()."
Apparemment je dois passer par le biais de certains plus cerceaux depuis que je suis à l'exécution de ce code à partir d'une tâche Asynchrone.
- Vous ne doit être en cours d'exécution de ce code dans le thread principal de l'application, tels que
onPostExecute()
de votreAsyncTask
.
Vous devez vous connecter pour publier un commentaire.
Cet exemple de projet fonctionne très bien sur des API niveaux avant et après le 11. Je viens de retesté sur Android 2.3 (Nexus One) et Android 4.0 (Nexus S).
Qui n'est pas surprenant. Si vous faites référence à des classes ou des méthodes qui n'existent pas dans les anciennes versions d'Android, vous obtiendrez un
VerifyError
ou similaire se bloque.Pas vraiment.
Qui fonctionne sur toutes les API niveaux.
Qui a été ajouté à l'API de Niveau 11. Si votre application ne fonctionnera que sur les API de Niveau 11 ou plus, l'utilisation de cette classe (signatures de méthode sont tout de même IIRC).
J'ai récemment été confronté à un problème similaire.
Voici comment j'ai géré ça.
Je ne suis pas entièrement sûr si le premier si le bloc est nécessaire. Mais je préfère ne pas prendre une chance 🙂
label
ici?label
champ est utilisée en grande partie par le gestionnaire de presse-papiers applications comme le titre de l'élément de Données est copiée. Pour plus d'informations, consulter: developer.android.com/reference/android/content/..., java.lang.CharSequence)Pour éviter l'exception
-> il suffit de créer le
ClipboardManager
fois au démarrage, par exemple dans votreonCreate()
méthode et l'utiliser à tout moment dans une fonction distincte.testé à travailler sur 2.3.3 et 4.0.3:
Écrire vous-même votre propre presse-papiers compat classe, par exemple: