2016-10-20 8 views
17

क्या डिवाइस प्रकार (फोन, टैबलेट, घड़ी, टीवी, ऑटो, पीसी) का सटीक पता लगाने का कोई तरीका है?एंड्रॉइड डिवाइस प्रकार का सही ढंग से पता लगाएं

अभी, मुझे यह पता लगाने का एक तरीका मिला है कि ऐप एक टीवी (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_CAR) पर एक टीवी (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION), या घड़ी (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_WATCH) पर चल रहा है या नहीं। क्या यह सही है? क्या एक कार से जुड़ा एक फोन फोन के रूप में या "एंड्रॉइड ऑटो" के रूप में दिखाई देता है?

फ़ोन, टैबलेट या कंप्यूटर के बीच अंतर करने के लिए मैं न्यूनतम स्क्रीन आकार (उदाहरण के लिए टैबलेट या लैपटॉप के रूप में अर्हता प्राप्त करने के लिए 600 डीपी) की जांच कर सकता हूं।

समस्या अब टैबलेट और लैपटॉप के बीच अंतर करना है। क्या आपको कोई विचार है?

पुनश्च: मैं इस एक संवेदनशील यूआई बनाने के लिए नहीं पूछ रहा हूँ, यह एक खाता

उत्तर

1

चेक इस वर्ग के लिए डिवाइस प्रबंधन से संबंधित एक सवाल है। https://developer.android.com/reference/android/os/Build.html

String manufacturer = Build.MANUFACTURER 
String model = Build.MODEL 

आप अगर अपने फोन, टैब या Build.MODEL

+0

दुर्भाग्य से इस पद्धति नहीं इस संदर्भ में लागू हो, के बाद से मैं के साथ इसे मैन्युअल रूप से टाइप है हर डिवाइस मॉडल संबद्ध करने के लिए आवश्यकता होगी है। मुझे आज एक काम करने की ज़रूरत है जो कल काम करेगी और कल काम करेगी ... मुझे लगता है कि यह अस्तित्व में नहीं है :( – Spotlight

2

से टीवी आप इस कोड आवेदन बड़ी स्क्रीन या नहीं पर चल रहा है का उपयोग कर पता लगा सकते हैं पता कर सकते हैं।

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

यह link आपके लिए भी सहायक होगा।

स्क्रीन की चौड़ाई प्राप्त करें और इस ब्रेक-पॉइंट्स के साथ जांचें।

/* गोली (पोर्ट्रेट और लैंडस्केप) ----------- */

min-device-width : 768px 
max-device-width : 1024px 

/डेस्कटॉप और लैपटॉप * ----------- */

min-width : 1224px 
+0

टैबलेट और कंप्यूटर के बीच अंतर कैसे करें? दोनों की एक बड़ी स्क्रीन है – Spotlight

+0

लैपटॉप की तुलना में अधिक पिक्सल वाली टैबलेट हैं और किसी भी तरह, स्क्रीन का आकार लैपटॉप से ​​एक टैबलेट को अलग नहीं करता – Spotlight

1

डिवाइस का नाम, आईडी, ऊंचाई और चौड़ाई प्राप्त करने के लिए निम्नलिखित स्थिर विधियों का उपयोग करें। अधिक जानकारी के लिए इस link पर जाएं। परियोजना में सभी सामान्य फीचर शामिल हैं जो मूल एंड्रॉइड एप्लिकेशन चाहते हैं।

 public static String getDeviceName() { 
     String manufacturer = Build.MANUFACTURER; 
     String model = Build.MODEL; 
     if (model.startsWith(manufacturer)) { 
      return capitalize(model); 
     } else { 
      return capitalize(manufacturer) + " " + model; 
     } 
    } 

    public static String getDeviceID(Context context) { 
     TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
     return telephonyManager.getDeviceId(); 
    } 

    public static int getDeviceHeight(Context mContext) { 
     DisplayMetrics displaymetrics = new DisplayMetrics(); 
     ((Activity) mContext).getWindowManager().getDefaultDisplay() 
       .getMetrics(displaymetrics); 
     return displaymetrics.heightPixels; 
    } 

    public static int getDeviceWidth(Context mContext) { 
     DisplayMetrics displaymetrics = new DisplayMetrics(); 
     ((Activity) mContext).getWindowManager().getDefaultDisplay() 
       .getMetrics(displaymetrics); 
     return displaymetrics.widthPixels; 
    } 
+0

यह मेरे प्रश्न का उत्तर नहीं देता है: डिवाइस प्रकार (यानी फोन, टैबलेट, टीवी, कार, घड़ी या कंप्यूटर) कैसे प्राप्त करें? – Spotlight

3

एक फोन और एक टैबलेट या कंप्यूटर मैं कम से कम स्क्रीन आकार के लिए जाँच कर सकते हैं के बीच अंतर करने के लिए (600dp talet या उदाहरण के लिए लैपटॉप के रूप में अर्हता प्राप्त करने के)।

ऐसा करने का एक बेहतर तरीका है और यह मूल्यों का उपयोग कर रहा है। उदाहरण के लिए, यदि आपके पास 2 प्रकार के डिवाइस हैं (फ़ोन और टैबलेट कहें), तो मूल्यों के लिए दो फ़ोल्डर भी बनाएं। फ़ोल्डर

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

और अपने में बड़े मूल्यों-:

<resources> 
    <bool name="isLarge">true</bool> 
</resources> 
फिर अपनी गतिविधि में

: तो फिर मान फ़ोल्डर के लिए इस ऐड

boolean isLarge = getResources().getBoolean(R.bool.isLarge); 
if (isLarge) { 
    // do something 
} else { 
    // do something else 
} 

इस का उपयोग करना, आप के लिए एक ही बात कर सकते हैं फोन, sw-600dp, sw-720dp और आदि। मुझे यकीन नहीं है कि आप इसे टीवी और आदि के लिए उपयोग कर सकते हैं, लेकिन मुझे लगता है कि यह कोशिश करने लायक है।

+0

कैसे करें एक टैबलेट और कंप्यूटर के बीच अंतर करें? उनके पास एक बड़ी स्क्रीन है – Spotlight

1

इस लिंक देखें,

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

यहाँ

नीचे मैं गोली या एंड्रॉयड टीवी की जाँच के लिए कोड डाल, कृपया जाँच, यह टैबलेट के लिए

काम करता होगा

private boolean checkIsTablet() { 
    boolean isTablet; 
    Display display = ((Activity) this.mContext).getWindowManager().getDefaultDisplay(); 
    DisplayMetrics metrics = new DisplayMetrics(); 
    display.getMetrics(metrics); 

    float widthInches = metrics.widthPixels/metrics.xdpi; 
    float heightInches = metrics.heightPixels/metrics.ydpi; 
    double diagonalInches = Math.sqrt(Math.pow(widthInches, 2) + Math.pow(heightInches, 2)); 
    if (diagonalInches >= 7.0) { 
    isTablet = true; 
    } 

return isTablet; 
} 

या

public static boolean checkIsTablet(Context ctx){  
return (ctx.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE; 
} 
टीवी

@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) 
private boolean checkIsTelevision() { 
    boolean isAndroidTV; 
    int uiMode = mContext.getResources().getConfiguration().uiMode; 
    if ((uiMode & Configuration.UI_MODE_TYPE_MASK) == Configuration.UI_MODE_TYPE_TELEVISION) { 
    isAndroidTV = true; 
} 

यह काम करता है, मज़ा आएगा के लिए

...

+0

टैबलेट और लैपटॉप से ​​अलग कैसे करें? एक बड़ी स्क्रीन किसी भी डिवाइस को टैबलेट नहीं बनाती है – Spotlight

1

जांच टेबलेट डिवाइस है।

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; 
} 

आप एमुलेटर की जांच करना चाहते हैं।

public static boolean isEmulator() { 
return Build.FINGERPRINT.startsWith("generic") 
     || Build.FINGERPRINT.startsWith("unknown") 
     || Build.MODEL.contains("google_sdk") 
     || Build.MODEL.contains("Emulator") 
     || Build.MODEL.contains("Android SDK built for x86") 
     || Build.MANUFACTURER.contains("Genymotion") 
     || (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic")) 
     || "google_sdk".equals(Build.PRODUCT); 

}

चेक एंड्रॉयड टीवी

public static final String TAG = "DeviceTypeRuntimeCheck"; 

    UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE); 
    if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) { 
     Log.d(TAG, "Running on a TV Device") 
    } else { 
     Log.d(TAG, "Running on a non-TV Device") 
} 
+0

टैबलेट और लैपटॉप से ​​अलग कैसे करें? एक बड़ी स्क्रीन किसी भी डिवाइस को एक टैबलेट नहीं बनाता है – Spotlight

संबंधित मुद्दे