J'ai deux applications pour tablettes Android et téléphones Android. Pour l'application de la tablette, j'ai défini Android:minSdkVersion="11"
. Mais de nos jours, les téléphones Android comme Galaxy S3 ont la version Android 4.0.4 afin que les utilisateurs de S3 puissent télécharger mon application pour tablette depuis Google Play Store. Je souhaite avertir les utilisateurs de téléphones de télécharger l'application du téléphone lorsqu'ils installent l'application de la tablette. Vice versa, pour les utilisateurs de tablettes, télécharge l’application pour tablette lorsqu'ils exécutent une application pour téléphone.
Existe-t-il un moyen simple de détecter le type d'appareil?
J'ai trouvé la solution sur ce link .
Dans votre fichier manifeste, vous pouvez déclarer la fonctionnalité d'écran pour le combiné et les tablettes, puis Google Play décide des autorisations de téléchargement pour le téléphone et la tablette.
Utilisez ceci:
public static boolean isTablet(Context context) {
return (context.getResources().getConfiguration().screenLayout
& Configuration.SCREENLAYOUT_SIZE_MASK)
>= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
qui retournera true si le périphérique fonctionne sur un grand écran.
Vous pouvez aussi essayer ceci
Ajouter boolean paramètre dans le fichier de ressources.
dans le fichier res/values / dimen.xml, ajoutez cette ligne
<bool name="isTab">false</bool>
dans le fichier res/values-sw600dp/dimen.xml, ajoutez cette ligne:
<bool name="isTab">true</bool>
alors dans votre fichier Java, obtenez cette valeur:
if(getResources().getBoolean(R.bool.isTab)) {
System.out.println("tablet");
} else {
System.out.println("mobile");
}
Cet extrait de code indiquera si le type de périphérique est 7 "pouces ou plus et résolution Mdpi ou supérieure. Vous pouvez modifier l'implémentation selon vos besoins.
private static boolean isTabletDevice(Context activityContext) {
boolean device_large = ((activityContext.getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK) ==
Configuration.SCREENLAYOUT_SIZE_LARGE);
if (device_large) {
DisplayMetrics metrics = new DisplayMetrics();
Activity activity = (Activity) activityContext;
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
if (metrics.densityDpi == DisplayMetrics.DENSITY_DEFAULT
|| metrics.densityDpi == DisplayMetrics.DENSITY_HIGH
|| metrics.densityDpi == DisplayMetrics.DENSITY_MEDIUM
|| metrics.densityDpi == DisplayMetrics.DENSITY_TV
|| metrics.densityDpi == DisplayMetrics.DENSITY_XHIGH) {
AppInstance.getLogger().logD("DeviceHelper","IsTabletDevice-True");
return true;
}
}
AppInstance.getLogger().logD("DeviceHelper","IsTabletDevice-False");
return false;
}
Nous avons eu un problème similaire avec notre application qui devrait basculer en fonction du type d'appareil - Tab/Phone. IOS nous a parfaitement fourni le type d'appareil, mais la même idée ne fonctionnait pas avec Android. la méthode résolution/DPI a échoué avec des petits onglets de résolution, des téléphones haute résolution. après beaucoup de cheveux déchirés et se cogner la tête contre le mur, nous avons essayé une idée étrange et cela a fonctionné exceptionnellement bien, cela ne dépend pas des résolutions. cela devrait vous aider aussi.
dans la classe Main, écrivez ceci et vous devriez obtenir le type de votre périphérique null pour TAB et mobile pour Phone.
String ua=new WebView(this).getSettings().getUserAgentString();
if(ua.contains("Mobile")){
//Your code for Mobile
}else{
//Your code for TAB
}
Utilisez les fonctionnalités de Google Play Store et activez uniquement le téléchargement de votre application pour tablette sur les tablettes et de l'application pour téléphone sur les téléphones.
Si l'utilisateur installe alors la mauvaise application, il doit l'avoir installé en utilisant une autre méthode.
Utilisez le code suivant pour identifier le type de périphérique.
private boolean isTabletDevice() {
if (Android.os.Build.VERSION.SDK_INT >= 11) { // honeycomb
// test screen size, use reflection because isLayoutSizeAtLeast is only available since 11
Configuration con = getResources().getConfiguration();
try {
Method mIsLayoutSizeAtLeast = con.getClass().getMethod("isLayoutSizeAtLeast");
Boolean r = (Boolean) mIsLayoutSizeAtLeast.invoke(con, 0x00000004); // Configuration.SCREENLAYOUT_SIZE_XLARGE
return r;
} catch (Exception x) {
return false;
}
}
return false;
}