Android: Tạm thời vô hiệu hóa thay đổi hướng trong một Hoạt động


116

Hoạt động chính của tôi có một số mã làm cho một số thay đổi cơ sở dữ liệu không nên bị gián đoạn. Tôi đang thực hiện một công việc nặng nhọc trong một luồng khác và sử dụng hộp thoại tiến trình mà tôi đặt là không thể hủy được. Tuy nhiên, tôi nhận thấy rằng nếu tôi xoay điện thoại của mình, nó sẽ khởi động lại hoạt động thực sự không tốt cho quá trình đang chạy và tôi nhận được Force Close.

Những gì tôi muốn làm là lập trình vô hiệu hóa các thay đổi hướng màn hình cho đến khi quá trình của tôi hoàn tất, tại đó các thay đổi định hướng được bật.


Vì dường như không ai đề cập đến phần này, nên bạn sẽ muốn nhập android.content.pm.ActivityInfo để sử dụng mã định danh ActivityInfo.
zsalwasser


1
Tham khảo: stackoverflow.com/a/32885911/2673792 để có giải pháp tốt nhất
Sudhir Sinha

Câu trả lời:


165

Như Chris đã giải thích trong phần tự trả lời , gọi

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

và sau đó

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

thực sự hoạt động như sự quyến rũ ... trên các thiết bị thực!

Đừng nghĩ rằng nó bị hỏng khi thử nghiệm trên trình giả lập, phím tắt ctrl + F11 LUÔN LUÔN thay đổi hướng màn hình mà không cần mô phỏng cảm biến di chuyển.

EDIT: đây không phải là câu trả lời tốt nhất có thể. Như đã giải thích trong các ý kiến, có vấn đề với phương pháp này. Câu trả lời thực sự là đây .


Tôi không thể xác định vị trí các hằng số đó. Cảm ơn vì điều đó.
Christopher Perry

41
Có một vấn đề với các phương thức này ... Có vẻ như nếu bạn gọi setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); khi thiết bị không sử dụng hướng mặc định, thì hướng hoạt động sẽ ngay lập tức được thay đổi (bị phá hủy và được tạo lại) thành hướng mặc định của thiết bị. Ví dụ: trên điện thoại, nếu bạn giữ nó theo hướng ngang, thì hoạt động được chuyển sang dọc và trở lại ngang khi kích hoạt lại cảm biến. Vấn đề tương tự ngược lại với Archos A5 IT: sử dụng nó trong chân dung sẽ khiến hoạt động được chuyển sang ngang và quay lại dọc.
Kevin Gaudin

1
Câu trả lời thực sự cho câu hỏi ban đầu là ở đó: stackoverflow.com/questions/3821423/ Khăn
Kevin Gaudin

2
Điều này đã không làm việc cho tôi. Cái này hoạt động được: stackoverflow.com/a/10488012/1369016 Tôi đã phải gọi setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); hoặc setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); dựa trên hướng hiện tại được truy xuất từ ​​getResource (). getConfiguration (). direction.
Tiago

ActivityInfo.SCREEN_ORIENTATION_SENSORkhông tôn trọng khóa định hướng gốc của Android. Đặt lại định hướng để ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIEDlàm.
tvkanters

43

Không có câu trả lời nào khác thực hiện thủ thuật hoàn hảo cho tôi, nhưng đây là những gì tôi tìm thấy.

Khóa hướng đến hiện tại ...

if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Khi thay đổi hướng nên được cho phép một lần nữa, đặt lại về mặc định ...

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

9
Vấn đề với điều này là Configuration.ORIENTATION_PORTRAITsẽ được trả về ở cả hai chế độ ngang (tức là 'bình thường' và đảo ngược). Vì vậy, nếu điện thoại nằm ở hướng ngang và bạn đặt nó vào ActivityInfo.SCREEN_ORIENTATION_LANDSCAPEthì nó sẽ lộn ngược. Trong API 9, ActivityInfo giới thiệu SCREEN_ORIENTATION_REVERSE_LANDSCAPEkhông đổi, nhưng tôi không thấy cách nào để phát hiện hướng đó thông qua Configurationlớp.
Błażej Czapp

1
Điều này đã làm việc. Câu trả lời cho mối quan tâm trên nằm trong câu trả lời này. stackoverflow.com/a/10453034/1223436
Zack

Làm việc như một cơ duyên cho nhu cầu của tôi nữa, cảm ơn tuyệt vời
user2029541

39

Đây là một giải pháp hoàn chỉnh và cập nhật hơn, hoạt động cho API 8+, hoạt động cho chế độ dọc và ngang ngược và hoạt động trên tab Galaxy nơi định hướng "tự nhiên" là ngang (gọi activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)để mở khóa hướng):

@SuppressWarnings("deprecation")
@SuppressLint("NewApi")
public static void lockActivityOrientation(Activity activity) {
    Display display = activity.getWindowManager().getDefaultDisplay();
    int rotation = display.getRotation();
    int height;
    int width;
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
        height = display.getHeight();
        width = display.getWidth();
    } else {
        Point size = new Point();
        display.getSize(size);
        height = size.y;
        width = size.x;
    }
    switch (rotation) {
    case Surface.ROTATION_90:
        if (width > height)
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        else
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
        break;
    case Surface.ROTATION_180:
        if (height > width)
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
        else
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
        break;          
    case Surface.ROTATION_270:
        if (width > height)
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
        else
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        break;
    default :
        if (height > width)
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        else
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }
}

Làm việc tuyệt vời cho tôi với máy tính bảng và điện thoại.
ScruffyFox

Câu trả lời đúng duy nhất hoạt động trên tất cả các loại thiết bị cho tôi.
amdev

Chắc chắn là câu trả lời tốt nhất! Bạn có thể thực hiện phương pháp này staticvà thêm Activity activitydưới dạng tham số.
caw

18

Để quản lý các chế độ định hướng ngược, tôi đã sử dụng mã đó để sửa hướng hoạt động:

int rotation = getWindowManager().getDefaultDisplay().getRotation();

    switch(rotation) {
    case Surface.ROTATION_180:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
        break;
    case Surface.ROTATION_270:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);         
        break;
    case  Surface.ROTATION_0:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        break;
    case Surface.ROTATION_90:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        break;
    }

Và để cho phép một lần nữa định hướng:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

17

Sử dụng setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);để khóa hướng hiện tại cho dù đó là phong cảnh hay chân dung.

Sử dụng setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);để mở khóa định hướng.


Giải pháp tốt nhất cho một khóa tạm thời ngắn. Không gây rối với định hướng hiện tại của cảm biến.
Ngày

2
hoạt động trên Build.VERSION.SDK_INT> = 18, câu trả lời đầy đủ hơn được đưa ra bởi tdjprog trong trang này stackoverflow.com/a/41812971/5235263
bastami82

14

Tôi tìm thấy câu trả lời. Để thực hiện việc này, trong một Hoạt động bạn có thể gọi setRequestedOrientation(int)với một trong các giá trị được chỉ định ở đây: http://developer.android.com/reference/android/R.attr.html#screenOrientation

Trước khi tôi khởi động chủ đề của mình, tôi đã gọi setRequestedOrientation(OFF)(OFF = nosensor) và khi chủ đề hoàn thành, tôi đã gọi setRequestedOrientation(ON)(ON = cảm biến). Hoạt động như một lá bùa.


11

Cảm ơn tất cả. Tôi đã sửa đổi giải pháp của Pilot_51, để đảm bảo tôi đã khôi phục lại trạng thái trước đó. Tôi cũng đã đưa ra một thay đổi để hỗ trợ các màn hình không phải là phong cảnh và không chân dung (nhưng chưa thử nghiệm nó trên một màn hình như vậy).

prevOrientation = getRequestedOrientation();
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
}

Sau đó để khôi phục nó

setRequestedOrientation(prevOrientation);

Thứ tốt - không chắc tại sao bạn không sử dụng switchmặc dù.

Quên dọn dẹp và thay đổi công tắc sau khi tôi thêm tùy chọn thứ ba.
ProjectJTHERman

tôi thấy điều này hoạt động mà không cần phải có cấu hình hiện tại nếu bạn không có quyền truy cập vào đối tượng hoạt động mà chỉ có ngữ cảnh ActivityInfo.SCREEN_ORIENTATION_NOSENSOR | ActivityInfo.SCREEN_ORIENTATION_UNSPECifyED
tối đa

8
protected void setLockScreenOrientation(boolean lock) {
    if (Build.VERSION.SDK_INT >= 18) {
        setRequestedOrientation(lock?ActivityInfo.SCREEN_ORIENTATION_LOCKED:ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
        return;
    }

    if (lock) {
        switch (getWindowManager().getDefaultDisplay().getRotation()) {
            case 0: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); break; // value 1
            case 2: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); break; // value 9
            case 1: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); break; // value 0
            case 3: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); break; // value 8
        }
    } else
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR); // value 10
}

Bạn có thể vui lòng thêm một số lời giải thích cho câu trả lời của bạn?
slfan

khi bạn có một số công việc ở chế độ nền, chỉ cần gọi setLockScreenOrientation (true) để khóa hướng và ngăn hủy hoạt động hiện tại để tạo lại nó. khi bạn đảm bảo rằng các công việc này kết thúc, hãy gọi setLockScreenOrientation (false).
tdjprog

2
đây là câu trả lời tốt nhất
Fakher

7

Đây là một giải pháp hoạt động mọi lúc và bảo toàn hướng hiện tại ( Activity.Info.SCREEN_ORIENTATION_PORTRAITví dụ sử dụng các bộ thành 0 °, nhưng người dùng có thể có hướng 180 ° như hướng hiện tại).

// Scope: Activity

private void _lockOrientation() {
    if (super.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT);
    } else {
        super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE);
    }
}

private void _unlockOrientation() {
    super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}

2
Đáng nói: Chỉ API 18+
Dmitry Zaytsev

1

chỉ sử dụng ActivityInfo.SCREEN_ORIENTATION_USERnếu bạn muốn xoay màn hình nếu nó được bật trên thiết bị.


1

Điều này làm việc hoàn hảo cho tôi. Nó giải quyết vấn đề với "định hướng tự nhiên" khác nhau của máy tính bảng / điện thoại;)

int rotation = getWindowManager().getDefaultDisplay().getRotation();

        Configuration config = getResources().getConfiguration();
        int naturalOrientation;

        if (((rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) &&
                config.orientation == Configuration.ORIENTATION_LANDSCAPE)
                || ((rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) &&
                config.orientation == Configuration.ORIENTATION_PORTRAIT)) {
            naturalOrientation = Configuration.ORIENTATION_LANDSCAPE;
        } else {
            naturalOrientation = Configuration.ORIENTATION_PORTRAIT;
        }

        // because getRotation() gives "rotation from natural orientation" of device (different on phone and tablet)
        // we need to update rotation variable if natural orienation isn't 0 (mainly tablets)
        if (naturalOrientation == Configuration.ORIENTATION_LANDSCAPE)
            rotation = ++rotation % 4;

        switch (rotation) {
            case Surface.ROTATION_0: //0
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                break;
            case Surface.ROTATION_90: //1
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                break;
            case Surface.ROTATION_180: //2
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
                break;
            case Surface.ROTATION_270: //3
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
                break;
        }
    } else {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
    }

0

Tôi đã đưa ra một giải pháp phụ thuộc vào vòng quay màn hình và sau đó quyết định hướng của thiết bị. Từ việc biết định hướng, chúng ta có thể khóa định hướng và giải phóng nó sau này khi cần. Giải pháp này cũng có thể xác định nếu thiết bị ở chế độ nằm ngang .

private void lockOrientation(){
    switch (((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation()) {


        // Portrait
        case Surface.ROTATION_0:
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            break;


        //Landscape     
        case Surface.ROTATION_90: 
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            break;


        // Reversed landscape
        case Surface.ROTATION_270:
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);             
            break;
    }
}

Sau đó, nếu chúng ta cần giải phóng định hướng, chúng ta có thể gọi phương thức này:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

0

Tôi nghĩ rằng mã này dễ đọc hơn.

private void keepOrientation() {

    int orientation = getResources().getConfiguration().orientation;
    int rotation = getWindowManager().getDefaultDisplay().getRotation();

    switch (rotation) {
        case Surface.ROTATION_0:
            if (orientation == Configuration.ORIENTATION_PORTRAIT) {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            } else {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            }
            break;
        case Surface.ROTATION_90:
            if (orientation == Configuration.ORIENTATION_PORTRAIT) {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
            } else {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            }
            break;
        case Surface.ROTATION_180:
            if (orientation == Configuration.ORIENTATION_PORTRAIT) {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
            } else {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
            }
            break;
        default:
            if (orientation == Configuration.ORIENTATION_PORTRAIT) {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            } else {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
            }
    }
}

0

Tôi đã tìm thấy một sự kết hợp của các giá trị xoay / định hướng hiện có là cần thiết để bao gồm bốn khả năng; có các giá trị dọc / ngang và hướng tự nhiên của thiết bị. Giả sử hướng tự nhiên của thiết bị sẽ có giá trị xoay là 0 độ khi màn hình ở hướng "dọc" theo chiều dọc hoặc tự nhiên. Tương tự, sẽ có giá trị xoay 90 độ khi ở chế độ ngang hoặc dọc (chú ý nó ngược với hướng @ 0 độ). Vì vậy, các giá trị xoay không phải là 0 hoặc 90 độ sẽ ngụ ý định hướng "Đảo ngược". Ok, đây là một số mã:

public enum eScreenOrientation 
{
PORTRAIT (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT),
LANDSCAPE (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE),
PORTRAIT_REVERSE (ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT),
LANDSCAPE_REVERSE (ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE),
UNSPECIFIED_ORIENTATION (ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

    public final int activityInfoValue;

    eScreenOrientation ( int orientation )
    {
        activityInfoValue = orientation;
    }
}



public eScreenOrientation currentScreenOrientation ( )
{
    final int rotation = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();

    final int orientation = getResources().getConfiguration().orientation;
    switch ( orientation ) 
    {
    case Configuration.ORIENTATION_PORTRAIT:
        if ( rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90 )
            return eScreenOrientation.PORTRAIT;
        else
            return eScreenOrientation.PORTRAIT_REVERSE;
    case Configuration.ORIENTATION_LANDSCAPE:
        if ( rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90 )
            return eScreenOrientation.LANDSCAPE;
        else
            return eScreenOrientation.LANDSCAPE_REVERSE;
    default:
        return eScreenOrientation.UNSPECIFIED_ORIENTATION;
    }
}

public void lockScreenOrientation ( )
    throws UnsupportedDisplayException
{
    eScreenOrientation currentOrientation = currentScreenOrientation( );
    if ( currentOrientation == eScreenOrientation.UNSPECIFIED_ORIENTATION )
        throw new UnsupportedDisplayException("Unable to lock screen - unspecified orientation");
    else
        setRequestedOrientation( currentOrientation.activityInfoValue );
}

public void unlockScreenOrientation (  )
{
    setRequestedOrientation( ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED );
}

0

Tôi không thích hầu hết các câu trả lời ở đây, vì trong phần mở khóa, họ đã đặt nó thành UNSPECifyED trái ngược với trạng thái trước đó. ProjectJTHERman đã tính đến nó, điều này thật tuyệt, nhưng tôi thích mã khóa của Roy. Vì vậy, đề nghị của tôi sẽ là một kết hợp của cả hai:

private int prevOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;

private void unlockOrientation() {
    setRequestedOrientation(prevOrientation);
}

@SuppressWarnings("deprecation")
@SuppressLint("NewApi")
private void lockOrientation() {
    prevOrientation = getRequestedOrientation();
    Display display = getWindowManager().getDefaultDisplay();
    int rotation = display.getRotation();
    int height;
    int width;
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
        height = display.getHeight();
        width = display.getWidth();
    } else {
        Point size = new Point();
        display.getSize(size);
        height = size.y;
        width = size.x;
    }
    switch (rotation) {
        case Surface.ROTATION_90:
            if (width > height)
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            else
                setRequestedOrientation(9/* reversePortait */);
            break;
        case Surface.ROTATION_180:
            if (height > width)
                setRequestedOrientation(9/* reversePortait */);
            else
                setRequestedOrientation(8/* reverseLandscape */);
            break;
        case Surface.ROTATION_270:
            if (width > height)
                setRequestedOrientation(8/* reverseLandscape */);
            else
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            break;
        default :
            if (height > width)
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            else
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }
}

0

Bạn có thể dùng

public void swapOrientaionLockState(){
    try{
        if (Settings.System.getInt(mContext.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION) == 1) {
            Display defaultDisplay = ((WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
            Settings.System.putInt(mContext.getContentResolver(), Settings.System.USER_ROTATION, defaultDisplay.getRotation());
            Settings.System.putInt(mContext.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0);
        } else {
            Settings.System.putInt(mContext.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 1);
        }

        Settings.System.putInt(mContext.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, !orientationIsLocked() ? 1 : 0);

    } catch (Settings.SettingNotFoundException e){
        e.printStackTrace();
    }
}

public boolean orientationIsLocked(){
    if(canModifiSetting(mContext)){
        try {
            return Settings.System.getInt(mContext.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION) == 0;
        } catch (Settings.SettingNotFoundException e) {
            e.printStackTrace();
        }
    }
    return false;
}

public static boolean canModifiSetting(Context context){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        return Settings.System.canWrite(context);
    } else {
        return true;
    }
}

-1

sử dụng dòng mã đó

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  

trong hoạt động của bạn phương pháp oncreate

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.