기기가 스마트 폰 또는 태블릿인지 확인 하시겠습니까? [복제]
이 질문에는 이미 답변이 있습니다.
- 태블릿 또는 전화-Android 30 답변
스마트 폰 또는 태블릿인지 확인하기 위해 기기에 대한 정보를 얻고 싶습니다. 내가 어떻게 해?
장치 유형에 따라 리소스와 다른 웹 페이지를 표시하고 싶습니다.
String s="Debug-infos:";
s += "\n OS Version: " + System.getProperty("os.version") + "(" + android.os.Build.VERSION.INCREMENTAL + ")";
s += "\n OS API Level: " + android.os.Build.VERSION.SDK;
s += "\n Device: " + android.os.Build.DEVICE;
s += "\n Model (and Product): " + android.os.Build.MODEL + " ("+ android.os.Build.PRODUCT + ")";
그러나 내 경우에는 쓸모가없는 것 같습니다.
이 솔루션은 지금 저에게 효과적입니다.
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width = metrics.widthPixels;
int height = metrics.heightPixels;
if (SharedCode.width > 1023 || SharedCode.height > 1023){
//code for big screen (like tablet)
}else{
//code for small screen (like smartphone)
}
이 주제는 Android 교육에서 논의됩니다.
전체 주제를 읽으면 특정 값 파일에서 부울 값을 설정하는 방법 (res / values-sw600dp / attr.xml)을 설명합니다.
<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 /)에서 부울을 false로 설정하십시오.
<resources>
<bool name="isTablet">false</bool>
</resources>
그런 다음 활동 에서이 값을 가져 와서 태블릿 크기 장치에서 실행 중인지 확인할 수 있습니다.
boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
if (tabletSize) {
// do something
} else {
// do something else
}
태블릿에 6.5 인치 이상의 화면이 있다고 생각합니다. 위의 Nolf의 답변을 기반으로 계산하는 방법입니다.
DisplayMetrics metrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
float yInches= metrics.heightPixels/metrics.ydpi;
float xInches= metrics.widthPixels/metrics.xdpi;
double diagonalInches = Math.sqrt(xInches*xInches + yInches*yInches);
if (diagonalInches>=6.5){
// 6.5inch device or bigger
}else{
// smaller device
}
'모바일 / 전화'를 정의 할 때 '태블릿'으로 정의 될 수없는 장치에서 전화를 걸 수 있는지 알고 싶다고 가정합니다. 이를 확인하는 방법은 다음과 같습니다. 센서, 화면 크기 등을 기반으로 무언가를 알고 싶다면 이것은 실제로 다른 질문입니다.
또한 화면 해상도를 사용하는 동안 또는 리소스 관리가 큰 대 xlarge를 사용하는 동안 과거의 새로운 '모바일'장치에는 큰 화면과 고해상도가 제공되어 원하는 경우이 줄을 흐리게하는 경우가 있습니다. 전화 통화 기능과 전화 통화 기능 없음을 알고 싶다면 아래가 '최고'입니다.
TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
if(manager.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE){
return "Tablet";
}else{
return "Mobile";
}
나는 Ol_v_er의 솔루션을 좋아하지만 간단합니다. 그러나 항상 그렇게 간단하지는 않습니다. 새로운 장치와 디스플레이가 끊임없이 나오는 것이 실제 화면 크기를 알아내는 데 조금 더 세분화되고 싶습니다. . 내가 발견 한 다른 솔루션 여기서 요한은 태블릿 크기를 지정하는 대신 부울의, 문자열 리소스를 사용합니다. 따라서 /res/values-sw600dp/screen.xml 파일에 true를 넣는 대신 (여기서는 레이아웃이 작은 태블릿 용이라고 가정) 다음과 같이 입력하십시오.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="screen_type">7-inch-tablet</string>
</resources>
다음과 같이 참조하고 결과에 따라 필요한 것을 수행하십시오.
String screenType = getResources().getString(R.string.screen_type);
if (screenType.equals("7-inch-tablet")) {
// do something
} else {
// do something else
}
프로그래밍 방식 으로 7 인치 및 10 인치 태블릿 감지에 대한 Sean O'Toole의 대답 도 내가 찾고있는 것입니다. 여기에 나와있는 답변으로 원하는만큼 구체적으로 답변 할 수 없는지 확인해보십시오. 그는 실제로 다루고있는 것을 파악하기 위해 다른 메트릭을 계산하는 방법을 설명하는 훌륭한 일을합니다.
최신 정보
Google I / O 2013 앱 소스 코드를 살펴보면 기기가 태블릿인지 아닌지를 식별하는 데 사용되는 다음을 가로 질러 추가했기 때문에 추가 할 것이라고 생각했습니다. 위의 내용은 조금 더 "제어"할 수 있지만 태블릿인지 알고 싶다면 다음과 같이 간단합니다.
public static boolean isTablet(Context context) {
return (context.getResources().getConfiguration().screenLayout
& Configuration.SCREENLAYOUT_SIZE_MASK)
>= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
태블릿은 일반적으로 스마트 폰보다 크기가 크고 저해상도 태블릿은 고해상도 스마트 폰과 동일한 수의 픽셀을 가질 수 있으므로이를 해결하는 한 가지 방법은 장치의 물리적 크기 (해상도가 아님)를 계산하는 것입니다.
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
float yInches= metrics.heightPixels/metrics.ydpi;
float xInches= metrics.widthPixels/metrics.xdpi;
if (yInches> smallestTabletSize|| xInches > smallestTabletSize)
{
//We are on a
}
내가 찾은 가장 좋은 옵션은 덜 침입 적입니다 .XML에서 태그 매개 변수를 설정하는 것입니다.
전화 XML 레이아웃
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:tag="phone"/>
타블렛 XML 레이아웃
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:tag="tablet">
...
</RelativeLayout>
그런 다음 활동 클래스에서 이것을 호출하십시오.
View viewPager = findViewById(R.id.pager);
Log.d(getClass().getSimpleName(), String.valueOf(viewPager.getTag()));
그것이 당신을 위해 작동하기를 바랍니다.
모든 앱에서이 방법을 사용하며 성공적으로 작동합니다.
public static boolean isTablet(Context ctx){
return (ctx.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
내가 사용하는 솔루션은 두 가지 레이아웃을 정의하는 것입니다. 레이아웃 폴더가 예를 들어 layout-sw600dp로 설정된 하나는 태블릿 사용자에게 메뉴 버튼을 제공하고 전화 사용자에게는 숨길 수 있습니다. 그렇게하면 기존 앱에 ActionBar를 구현하지 않아도됩니다 (아직) ...
자세한 내용은 이 게시물을 참조하십시오 .
Re : 전화가 아닌 전화에서 전화를 보내는 방법에 대한 위의 접선 : 내가 아는 한 전화에만 15 자리 IMEI (International Mobile Station Equipment Identity)가 있으므로 다음 코드는 전화를 결정적으로 구분합니다. 비 전화 :
TelephonyManager manager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
String deviceInfo = "";
deviceInfo += manager.getDeviceId(); // the IMEI
Log.d(TAG, "IMEI or unique ID is " + deviceInfo);
if (manager.getDeviceId() == null) {
Log.d(TAG, "This device is NOT a phone");
} else {
Log.d(TAG, "This device is a phone.");
}
Nook 에뮬레이터에서 getPhoneType ()은 어떤 이유로 "GSM"의 phoneType을 반환하므로 전화 유형을 확인하는 것이 신뢰할 수 없다는 것을 알았습니다. 마찬가지로 getNetworkType ()은 비행기 모드의 전화기에 대해 0을 반환합니다. 실제로 비행기 모드는 getLine1Number () 및 getSim * 메소드도 널을 리턴하게합니다. 그러나 비행기 모드에서도 전화의 IMEI는 유지됩니다.
참고 URL : https://stackoverflow.com/questions/9279111/determine-if-the-device-is-a-smartphone-or-tablet
'Programing' 카테고리의 다른 글
web.config에서 연결 문자열 읽기 (0) | 2020.04.06 |
---|---|
PG :: ConnectionBad-서버에 연결할 수 없습니다 : 연결이 거부되었습니다 (0) | 2020.04.06 |
파이썬 다중 반환 값 무시 (0) | 2020.04.06 |
jQuery AJAX 호출 결과의 브라우저 캐싱 방지 (0) | 2020.04.06 |
리눅스 커널은 어떻게 테스트됩니까? (0) | 2020.04.06 |