Androidデュアルスクリーン各画面の解像度と画面の方向を取得


デュアルスクリーンのAPKを作って、解像度はいつも間違っていて、私のこちらは1920*1080を獲得しましたが、ハードウェア自体は1366*768です.
私は底を振って、底は鍋を振ってくれて、半月も続いて、本当に我慢できません.私は時間をかけてこれを研究することにしました.
Android APIのソースコードをかき集めると、確かに各画面の解像度を取得する方法があり、サブ画面の解像度はメイン画面の方法で取得できません.
ソースを見せて
  @Override
    public void onClick(View v) {
        Context context = v.getContext();
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        final Display display = (Display) v.getTag();
        Resources r = context.getResources();
        AlertDialog alert = builder
                .setTitle(r.getString(
                        R.string.presentation_alert_info_text, display.getDisplayId()))
                .setMessage(display.toString())
                .setNeutralButton(R.string.presentation_alert_dismiss_text,
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.dismiss();
                            }
                        })
                .create();
        alert.show();
    }

これはボタンをクリックして窓を弾いて画面の関連する情報を表示して、中
final Display display = (Display) v.getTag();

 
まず画面を取得する方法を見てみましょう
   DisplayManager mDisplayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
            Display[] displays = mDisplayManager.getDisplays();
            MyLog.diff("33333=====       ====" + displays.length);
            int screenNum = displays.length;
            if (screenNum < 2) { //    
                return;
            }

ここを見て、分かったはずなのに、思い切って追いかけて、サイズを探して、解像度をModeにカプセル化して、
Display display = displays[1];  //0    ,1     
int width = display.getMode().getPhysicalWidth();
int height = display.getMode().getPhysicalHeight();

この呼び出し方法は、システムバージョンによって変更されます.
Android 5.0にはgetModel()はありません.このメソッドでは、getWidth()を直接呼び出すことができます.メソッド、
Android 7.0は、直接displayを取ることができます.getModel().getPhysicalWidth();   
画面の方向を取得
getProperties(String info)を呼び出します.この方法では,上の2つの定数値を伝達するとパラメータが得られる.
ただし、メイン画面は0,90180270を返します.
サブスクリーンは0,1,2,3,4を返します.
0は0度に対応
1対応は90
2対応は180
3対応は270
4対応しているのはメイン画面と同じ角度で、残りは、メイン画面の方向を判断すればいいので、単独で処理します.
           
    public static final String PROOERTY_INFO = "persist.sys.displayrot";   //        
    public static final String PROOERTY_OTHER_INFO = "persist.orientation.vhinit";   //        

    //           0:       1:    
    public static final String JUJLE_ETH_LINE_DEV_ORDER = "cat /sys/class/net/eth0/carrier";

    //         SystemProperties     
    public static String getProperty(String key, String defaultValue) {
        String value = defaultValue;
        try {
            Class> c = Class.forName("android.os.SystemProperties");
            Method get = c.getMethod("get", String.class, String.class);
            value = (String) (get.invoke(c, key, defaultValue));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            return value;
        }
    }

ここにサブ画面の方向を判断するコードを貼ると、メイン画面は不要になります.
 /**
     * 

* 1 * -1 * 0 * * @return */ public int getScreenRoate() { int screenRoate = 0; String roate = RootCmd.getProperty(RootCmd.PROOERTY_OTHER_INFO, "0"); screenRoate = Integer.parseInt(roate); /** * 0 0 * 1 90 * 2 180 * 3 270 * 4 */ if (screenRoate == 0 || screenRoate == 2) { // screenRoate = 1; } else if (screenRoate == 1 || screenRoate == 3) { // screenRoate = -1; } else if (screenRoate == 4) { // int mainWidth = SharedPerManager.getScreenWidth(); int mainHeight = SharedPerManager.getScreenHeight(); if (mainWidth > mainHeight) { // screenRoate = 1; } else if (mainWidth < mainHeight) { // screenRoate = -1; } else if (mainWidth == mainHeight) { // screenRoate = 0; } } return screenRoate; }


 
ソースコードを見るのではなく、本当にこの方法があることを知らないで、みんなに分かち合います.