태그 보관물: tablet

tablet

태블릿 또는 전화-Android 방법이 있습니까? 기울기 기능과 새 태블릿 (변압기)에

사용자가 태블릿이나 휴대 전화를 사용 중인지 확인할 수있는 방법이 있습니까? 기울기 기능과 새 태블릿 (변압기)에 문제가 있습니다



답변

앞에서 언급했듯이 기기가 태블릿인지 휴대 전화인지 확인하고 싶지 않지만 기기의 기능에 대해 알고 싶은 경우,

대부분의 경우 태블릿과 휴대폰의 차이점은 화면 크기이므로 다른 레이아웃 파일을 사용하려는 이유입니다. 이 파일들은 res/layout-<qualifiers>디렉토리에 저장됩니다 . res/values-<same qualifiers>각 레이아웃에 대해 directoy 에 XML 파일을 작성하고 int / bool / string 자원을 배치하여 사용하는 레이아웃을 구별 할 수 있습니다.

예:

파일 res/values/screen.xml( res/layout/핸드셋 용 레이아웃 파일이 포함되어 있다고 가정 )

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="screen_type">phone</string>
</resources>

파일 res/values-sw600dp/screen.xml( res/layout-sw600dp/Nexus 7과 같은 소형 태블릿 용 레이아웃 파일이 포함되어 있다고 가정 )

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="screen_type">7-inch-tablet</string>
</resources>

파일 res/values-sw720dp/screen.xml( res/layout-sw720dp/Nexus 10과 같은 대형 태블릿의 레이아웃 파일이 포함되어 있다고 가정 ) :

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="screen_type">10-inch-tablet</string>
</resources>

이제 R.string.screen_type상수 를 통해 화면 유형에 액세스 할 수 있습니다 .


답변

장치가 태블릿인지 여부를 감지하려면 다음 코드를 사용하십시오.

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

LARGE 및 XLARGE 화면 크기는 제조업체가 사용하는 눈과의 거리 (따라서 태블릿 개념)에 따라 결정됩니다.

추가 정보 : http://groups.google.com/group/android-developers/browse_thread/thread/d6323d81f226f93f


답변

이 게시물은 많은 도움이되었습니다.

불행히도 나는 나를 도운 모든 답을 평가하는 데 필요한 명성을 얻지 못했습니다.

장치가 태블릿인지 전화인지 확인해야 화면의 논리를 구현할 수있었습니다. 그리고 내 분석에서 태블릿은 MDPI에서 시작하여 7 인치 (Xlarge) 이상이어야합니다.

이 게시물을 기반으로 작성된 코드는 다음과 같습니다.

/**
 * Checks if the device is a tablet or a phone
 *
 * @param activityContext
 *            The Activity Context.
 * @return Returns true if the device is a Tablet
 */
public static boolean isTabletDevice(Context activityContext) {
    // Verifies if the Generalized Size of the device is XLARGE to be
    // considered a Tablet
    boolean xlarge = ((activityContext.getResources().getConfiguration().screenLayout &
                        Configuration.SCREENLAYOUT_SIZE_MASK) ==
                        Configuration.SCREENLAYOUT_SIZE_XLARGE);

    // If XLarge, checks if the Generalized Density is at least MDPI
    // (160dpi)
    if (xlarge) {
        DisplayMetrics metrics = new DisplayMetrics();
        Activity activity = (Activity) activityContext;
        activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);

        // MDPI=160, DEFAULT=160, DENSITY_HIGH=240, DENSITY_MEDIUM=160,
        // DENSITY_TV=213, DENSITY_XHIGH=320
        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) {

            // Yes, this is a tablet!
            return true;
        }
    }

    // No, this is not a tablet!
    return false;
}

답변

화면 대각선의 크기를 계산하여 장치가 휴대 전화인지 태블릿인지를 결정하는 데 사용하는 것이 어떻습니까?

private boolean isTablet()
{
    Display display = getWindowManager().getDefaultDisplay();
    DisplayMetrics displayMetrics = new DisplayMetrics();
    display.getMetrics(displayMetrics);

    int width = displayMetrics.widthPixels / displayMetrics.densityDpi;
    int height = displayMetrics.heightPixels / displayMetrics.densityDpi;

    double screenDiagonal = Math.sqrt( width * width + height * height );
    return (screenDiagonal >= 9.0 );
}

물론 임계 값이 9 인치 이하이어야하는지 논쟁 할 수 있습니다.


답변

다른 점이 없다. 차이점이라고 생각하는 것을 정의하고 확인하십시오. 은하 탭은 전화입니까? 아니면 태블릿? 그리고 왜?

찾고자하는 특정 기능과 해당 코드를 정의해야합니다.

‘기울기’를 찾고있는 것 같습니다. 나는 이것이 가속도계와 같다고 생각합니다 (단어입니까?). 다음을 사용하여 장치가 장치를 지원하는지 확인할 수 있습니다.

public class Accel extends Activity implements SensorListener {
...
  SensorManager sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
  boolean accelSupported = sensorMgr.registerListener(this,
        SENSOR_ACCELEROMETER,
        SENSOR_DELAY_UI);
...
}

( http://stuffthathappens.com/blog/2009/03/15/android-accelerometer/ 에서 테스트했습니다.)


답변

‘모바일 / 전화’를 정의 할 때 ‘태블릿’으로 정의 될 수없는 장치에서 전화를 걸 수 있는지 알고 싶다고 가정합니다. 이를 확인하는 방법은 다음과 같습니다. 센서, 화면 크기 등을 기반으로 무언가를 알고 싶다면 이것은 실제로 다른 질문입니다.

또한 화면 해상도를 사용하는 동안 또는 리소스 관리가 큰 대 xlarge를 사용하는 동안 과거의 새로운 ‘모바일’장치에는 큰 화면과 고해상도가 제공되어 원하는 경우이 줄을 흐리게하는 경우가 있습니다. 전화 통화 기능과 전화 통화 기능 없음을 알고 싶다면 아래가 ‘최고’입니다.

TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
if(manager.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE){
    return "Tablet";
}else{
    return "Mobile";
}

답변

Robert Dale Johnson III와 Helton Isac을 기반 으로이 코드를 생각해 냈습니다.

public static boolean isTablet(Context context) {
    TelephonyManager manager =
        (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
    if (manager.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE) {
        //Tablet
        return true;
    } else {
        //Mobile
        return false;
    }
}

public static boolean isTabletDevice(Context activityContext) {
    // Verifies if the Generalized Size of the device is XLARGE to be
    // considered a Tablet
    boolean xlarge =
         ((activityContext.getResources().getConfiguration().screenLayout &
           Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE);

    // If XLarge, checks if the Generalized Density is at least MDPI (160dpi)
    if (xlarge) {
        DisplayMetrics metrics = new DisplayMetrics();
        Activity activity = (Activity) activityContext;
        activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);

        // MDPI=160, DEFAULT=160, DENSITY_HIGH=240, DENSITY_MEDIUM=160,
        // DENSITY_TV=213, DENSITY_XHIGH=320
        if (metrics.densityDpi == DisplayMetrics.DENSITY_DEFAULT
                  || metrics.densityDpi == DisplayMetrics.DENSITY_HIGH
                  || metrics.densityDpi == DisplayMetrics.DENSITY_MEDIUM
                  || metrics.densityDpi == DisplayMetrics.DENSITY_XHIGH) {

             // Yes, this is a tablet!
             return true;
        }
    }

    // No, this is not a tablet!
    return false;
}

따라서 코드에서 다음과 같은 필터를 만드십시오.

if(isTabletDevice(Utilities.this) && isTablet(Utilities.this)){
    //Tablet
} else {
    //Phone
}