2013-05-28 63 views
19

我的情況是,手機和平板電腦的邏輯是一樣的。但是佈局略有不同。我試着用下面的代碼如何以編程方式在Android中查找平板電腦或手機?

public static boolean findoutDeviceType(Context context) 
    { 
     return (context.getResources().getConfiguration().screenLayout & 
         Configuration.SCREENLAYOUT_SIZE_MASK)>= 
          Configuration.SCREENLAYOUT_SIZE_LARGE; 
    } 

三星拉環10" 具有1280 * 800的分辨率和S3擁有1270 * 720的分辨率和該代碼返回的大小XLARGE兩個Tab和電話爲其檢驗的標準是> 960 * 720

我已經測試將在RES佈局文件夾佈局,佈局加大和佈局,XLARGE各自的UI。但這並沒有影響反正在。同時檢查它無論如何,即使我將用戶界面置於不同的佈局文件夾中,我也必須在課程中檢查它們文件來設置相應的ContentView。

還有其他方法可以找到它嗎?

+1

檢查:[this](http://stackoverflow.com/questions/7251131/how-to-determine-the-target-device-programmatically-in-android),[this](http:// stackoverflow。 com/questions/9884517 /如何知道是否它的平板電腦或手機在Android程序),[this](http://stackoverflow.com/questions/11330363/how-to -detect-device-is-android-phone-or-android-tablet),[this](http://www.androidsnippets.com/how-to-detect-tablet-device) –

+0

可能的重複[確定是否設備是智能手機還是平板電腦?](http://stackoverflow.com/questions/9279111/determine-if-the-device-is-a-smartphone-or-tablet) –

回答

14

試試這個

public boolean isTablet(Context context) { 
     boolean xlarge = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == 4); 
     boolean large = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE); 
     return (xlarge || large); 
    } 

它將如果您使用的是平板電腦返回true。已檢查了三星Galaxy Tab 7" 和三星Galaxy S3。

+7

檢查兩個設備_IS NOT_足夠好的檢查。對此方法非常謹慎,因爲它不可靠。 – stevebot

+0

立足於設備尺寸是確定設備的最糟糕的主意。我不知道爲什麼這是正確的答案。 –

1

試試看看這個代碼。你可以在屏幕英寸大小的基礎上,你可以得到平板電腦或Android設備

String inputSystem; 
    inputSystem = android.os.Build.ID; 
    Log.d("hai",inputSystem); 
    Display display = getWindowManager().getDefaultDisplay(); 
    int width = display.getWidth(); // deprecated 
    int height = display.getHeight(); // deprecated 
    Log.d("hai",width+""); 
    Log.d("hai",height+""); 
    DisplayMetrics dm = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(dm); 
    double x = Math.pow(width/dm.xdpi,2); 
    double y = Math.pow(height/dm.ydpi,2); 
    double screenInches = Math.sqrt(x+y); 
    Log.d("hai","Screen inches : " + screenInches+""); 
+0

是的,但如果只有這兩個設備(說三星S3和三星10「平板電腦),我們可以比較,但我怎麼辦其他設備也.......有各種設備的各種分辨率的大小,S4設備的屏幕更大。 – VIGNESH

+0

但Android設備大小不像平板電腦大小,所以你只能得到這一個是Android移動設備或平板電腦。 –

2

例如,你可以設置一些RES值的文件夾:

RES /價值觀XLARGE RES /價值觀大 RES /價值觀sw600dp

等等,那麼你可以聲明爲每一個布爾值:

<resources> 
<bool name="isXLarge">true</bool> 
    </resources> 

<resources> 
<bool name="isLarge">true</bool> 
    </resources> 

您可以通過

boolean xlargeValue = getResources().getBoolean(R.bool.isXlarge); 
    boolean largevalue = getResources().getBoolean(R.bool.isLarge); 
    boolean tabletValue = getResources().getBoolean(R.bool.sw620dp): 
36

獲得價值這個主題是在Android培訓討論:

http://developer.android.com/training/multiscreen/screensizes.html#TaskUseSWQuali

如果你讀了整個主題,他們解釋如何設置在特定值文件中的布爾值(如res/values-sw600dp/):

<resources> 
    <bool name="isTablet">true</bool> 
</resources> 

因爲sw600dp限定符僅適用於Android 3.2以上的平臺。如果你想確保這種技術適用於所有平臺(3.2之前),在res/values-xlarge文件夾中創建相同的文件:

<resources> 
    <bool name="isTablet">true</bool> 
</resources> 

然後,在「標準」值文件(如res/values/),您設置的布爾假:

<resources> 
    <bool name="isTablet">false</bool> 
</resources> 
然後在你的活動

,你可以得到這個值,並檢查您是否在平板大小的設備上運行:

boolean tabletSize = getResources().getBoolean(R.bool.isTablet); 

這不是我的邏輯,信用度爲ol_v_er,這個簡單易行的方法。我只是複製它。

您可以查看原單答案here

一些額外的信息

你現在有標誌表明您的應用程序是在手機或平板電腦上運行。

我已經創建了兩個程序包來處理用戶界面和它的功能,

com.phone 
com.tablet 

你改變運行您的需要包裝

boolean tabletSize = getResources().getBoolean(R.bool.isTablet); 
if (tabletSize) { 
    // do something 
    //Start activity for tablet 
} else { 
    // do something else 
    //Start activity for phone  
} 

Refer

注意:我認爲10英寸和7英寸屏幕應用都採用res/values-sw600dp/的資源。但更具體的我想對於10英寸的平板電腦屏幕中,我們可以使用res/values-sw720dp/

<resources> 
    <bool name="isTablet">true</bool> 
</resources> 
+2

複製粘貼時應引用源代碼:http:// stackoverflow。com/a/9308284 – Patrick

+0

@Patrick我接受這是一個複製的方法 – edwin

3

試試這個代碼,您的應用程序工作裝置的手機或平板電腦輕鬆地精的OnCreate調用()方法中

isTabletDevice(活動)

private static boolean isTabletDevice(Context activityContext) { 

    boolean device_large = ((activityContext.getResources().getConfiguration().screenLayout & 
      Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE) 
    DisplayMetrics metrics = new DisplayMetrics(); 
    Activity activity = (Activity) activityContext; 
    activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); 
    if (device_large) { 
     //Tablet 
     if (metrics.densityDpi == DisplayMetrics.DENSITY_DEFAULT){    
      return true; 
     }else if(metrics.densityDpi == DisplayMetrics.DENSITY_MEDIUM){ 
      return true;  
     }else if(metrics.densityDpi == DisplayMetrics.DENSITY_TV){ 
      return true;  
     }else if(metrics.densityDpi == DisplayMetrics.DENSITY_HIGH){ 
      return true;  
     }else if(metrics.densityDpi == DisplayMetrics.DENSITY_280){ 
      return true;  
     }else if(metrics.densityDpi == DisplayMetrics.DENSITY_XHIGH) { 
      return true; 
     }else if(metrics.densityDpi == DisplayMetrics.DENSITY_400) { 
      return true; 
     }else if(metrics.densityDpi == DisplayMetrics.DENSITY_XXHIGH) { 
      return true; 
     }else if(metrics.densityDpi == DisplayMetrics.DENSITY_560) { 
      return true; 
     }else if(metrics.densityDpi == DisplayMetrics.DENSITY_XXXHIGH) { 
      return true; 
     }    
    }else{ 
     //Mobile 
     } 
    return false; 
} 
0

這是工作得很好我的應用程序:

private boolean isPhoneDevice(){ 

    return getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY); 

} 
+1

這隻會檢查設備是否可以用作電話。定義:「該設備具有支持數據通信的電話無線電。」一些平板電腦和具有非常大的sc phones的手機將在這方面迴歸真實。 –

1

使用不同的資源文件,而不是試圖以編程方式確定它這將是對於大多數情況已足夠,並且是documentation推薦的。

enter image description here

見我的答案更全面here

相關問題