Désactiver l'accélération matérielle, compatibilité descendante
J'ai un problème avec une fonction (setLayerType(LAYER_TYPE_NONE, null)
) disponible dans l'api >=11, et mon code devrait fonctionner sous android 1.6 (de l'API de niveau 4).
J'ai essayé d'utiliser la réflexion comme ceci:
try {
Method method = View.class.getMethod("setLayerType", Integer.TYPE, null);
method.invoke(LAYER_TYPE_NONE, null);
view.setLayerType(LAYER_TYPE_NONE, null);
} catch (Throwable e) {
Log.e("_________________test", "Function not found");
}
mais mon appli crash à vue.setLayerType avec java.lang.Exception verifyerror....
N'quelqu'un a une idée de comment puis-je contourner ce crash, et obtenir une compatibilité descendante avec cette fonction au niveau inférieur de l'api?
Grâce,
Arkde
OriginalL'auteur Aurelian Cotuna | 2012-03-27
Vous devez vous connecter pour publier un commentaire.
Juste enlever
et vous devriez être bien, pour des raisons de sécurité, Java/Android faudrait d'abord vérifier qu'il a au moins une photo de l'exécution d'une classe donnée avant de procéder et sur les anciens OS Android, il ne sait pas comment l'exécuter ".setLayerType(LAYER_TYPE_NONE, null);", ce serait jeter une Erreur de disque dur avant de tout code de cette classe pourrait être exécuté.
Depuis que vous avez exécuté le code à l'aide de réflexion, vous ne devriez pas avoir besoin de cette ligne de code, de toute façon.
OriginalL'auteur Kai
Cela devrait être utile: http://android-developers.blogspot.com/2009/04/backward-compatibility-for-android.html
Si elle a vraiment quelque chose à voir avec l'accélération matérielle, vous pouvez ajouter ce qui suit à votre manifeste:
src: http://developer.android.com/guide/topics/graphics/hardware-accel.html
android:hardwareAccelerated
est disponible à partir de l'api de niveau 11, je ne peux donc pas l'utiliserEt j'ai essayé sur l'API de 14 et 16 ans, n'a pas de travail à tous! 🙁
OriginalL'auteur Ferdau
Je ne pouvais pas le faire fonctionner avec votre code. Le problème que j'ai trouvé était sur le type de méthode de paramétrage. Aussi vous n'avez pas l'invocation de la méthode sur la vue que vous souhaitez définir l'accélération matérielle. C'était ma solution:
vous pouvez DÉSACTIVER mais vous ne pouvez pas allumer.
Comment faire pour l'Activer?
vous pouvez l'activer en appelant le:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
OriginalL'auteur ffleandro