gpt4 book ai didi

android - 显示对话框时尝试锁定屏幕旋转

转载 作者:行者123 更新时间:2023-11-30 04:46:00 43 4
gpt4 key购买 nike

我试图在应用程序启动对话框时将屏幕锁定在用户所处的任何方向,然后在对话框关闭时将其解锁。这是我的锁定和解锁代码:

   // Sets screen rotation as fixed to current rotation setting
private void mLockScreenRotation() {
Log.d("####################", "screen orientation is " + mContext.getResources().getConfiguration().orientation);
// Stop the screen orientation changing during an event
if (mContext.getResources().getConfiguration().orientation == 1)
((Activity) mContext).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
else ((Activity) mContext).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// switch (mContext.getResources().getConfiguration().orientation)
// {
// case Configuration.ORIENTATION_PORTRAIT:
// ((Activity) mContext).setRequestedOrientation(
// ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// break;
// case Configuration.ORIENTATION_LANDSCAPE:
// ((Activity) mContext).setRequestedOrientation(
// ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// break;
// }
}

// allow screen rotations again
private void mUnLockScreenRotation() {
this.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
mIsScreenRotationLocked = false;
}

我在启动任何对话框时调用 mLockScreenRotation(),并在我的处理程序和 DialogInterface.OnClickListener 中调用 mUnlockScreenRotation()。

有时我的屏幕保持锁定状态,但并不一致。为什么或如何处理这个问题的任何建议或想法?

在此先感谢您的帮助!

修改:我锁定屏幕的代码:

 public void displayProgressDialog(){        mLockScreenRotation();        // Get local handle on class progress dialog for optimization purposes        ProgressDialog temp = mProgressDialog = new ProgressDialog(this);        // Get message string (for some reason this dialog can't handle res IDs for messages)        String message = getString(R.string.downloading);        // Set some paramaters        temp.setIndeterminate(true);        temp.setTitle(R.string.weather_data);        temp.setMessage(message);        temp.setCancelable(false);        temp.getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,                 WindowManager.LayoutParams.MEMORY_TYPE_PUSH_BUFFERS /*WindowManager.LayoutParams.FLAG_BLUR_BEHIND*/);         temp.show();    }    public void displayLocationSearchDialog(){        mLockScreenRotation();        // Get local handle on class progress dialog for optimization purposes        ProgressDialog temp = mCoordinateSearchDialog = new ProgressDialog(this);        // Get message string (for some reason this dialog can't handle res IDs for messages)        String message = getString(R.string.searching);        // Set some paramaters        temp.setIndeterminate(true);        temp.setTitle(R.string.location_search);        temp.setMessage(message);        temp.setCancelable(false);        temp.getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,                 WindowManager.LayoutParams.FLAG_BLUR_BEHIND);        temp.show();    }    public void showDatafeedFailedDialog(){        mLockScreenRotation();        new AlertDialog.Builder(this)            .setTitle(R.string.network_error)            .setMessage(R.string.weather_data_failed)            .setPositiveButton(R.string.try_again, mTryAgainListener)            .setNegativeButton(R.string.dismiss, null)            .create()            .show();    }    public void showCoordinateSearchFailedDialog(){        mLockScreenRotation();        new AlertDialog.Builder(this)        .setTitle(R.string.network_error)        .setMessage(R.string.location_search_failed)        .setPositiveButton(R.string.try_again, mCoordTryAgainListener)        .setNegativeButton(R.string.dismiss, null)        .create()        .show();    }    private void showGpsAlertDialog(){        mLockScreenRotation();        new AlertDialog.Builder(this)            .setTitle(R.string.gps_error)            .setMessage(R.string.gps_error_details)            .setNeutralButton(R.string.dismiss, null)            .setPositiveButton(R.string.go_to_settings, mToSettingsListener)            .create()            .show();    }    private void showGpsSearchingDialog(){        mLockScreenRotation();        ProgressDialog temp = mGpsSearchAlertDialog = new ProgressDialog(this);        String message = getString(R.string.location_services_details);        String btnText = getString(R.string.cancel);        temp.setIndeterminate(true);        temp.setTitle(R.string.location_services);        temp.setMessage(message);        temp.setButton(btnText, mCancelGpsSearchListener);        temp.setCancelable(true);        temp.getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,                 WindowManager.LayoutParams.FLAG_BLUR_BEHIND);        temp.show();    }    private void showGpsTimeoutAlertDialog(){        mLockScreenRotation();        new AlertDialog.Builder(this)        .setTitle(R.string.gps_error)        .setMessage(R.string.gps_timeout_message)        .setPositiveButton(R.string.try_again, mGpsTimeoutListener)        .setNegativeButton(R.string.dismiss, mGpsTimeoutListener)  // check this line with free if still no good        .create()        .show();    }    private void showWeatherAlertDialog(){        Log.d("############", "weather alert dialog");        mLockScreenRotation();        String message = null;        if(mWD.getWarningTypes() == null) return;        int cnt = 0;        int size = mWD.getWarningTypes().size() - 1;        for(String warningType : mWD.getWarningTypes()){            if(cnt == 0) message = warningType;            else if(cnt == size) message += " and " + warningType;            else message += ", " + warningType;            cnt++;        }        new AlertDialog.Builder(this)            .setTitle(R.string.watches_and_warnings)            .setMessage(message)            .setPositiveButton(R.string.go_to_accuweather, mToAlertWebListener)            .setNeutralButton(R.string.dismiss, null)            .create()            .show();    }    private void showNeedLocationAlertDialog() {        mLockScreenRotation();        new AlertDialog.Builder(this).setTitle(R.string.error).setMessage(        R.string.add_location).setNeutralButton(R.string.dismiss, null)        .setPositiveButton(R.string.okay, mToLocationSearchListener)        .create().show();    }    private void showConnectivityAlertDialog() {        mLockScreenRotation();        new AlertDialog.Builder(this).setTitle(R.string.network_error)        .setMessage(R.string.no_connection).setNeutralButton(        R.string.dismiss, null).create().show();    }    private void showCurrentUrlInBrowser(){        // Show current conditions web page        if(mWD.getURL() == null || mWD.getURL().length() 

最佳答案

这是一个糟糕的解决方案,但它确实有效。在 LG GT540(Android 2.3.7) 和 Asus Transformer(Android 3.2) 上测试:

private void stopRotate()
{
if(getResources().getConfiguration().orientation == 1)
{
if( display.getOrientation() == 1 || display.getOrientation() == 2)
setRequestedOrientation(9);
else
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else
{
if( display.getOrientation() == 2 || display.getOrientation() == 3)
setRequestedOrientation(8);
else
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}

private void startRotate()
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}

关于android - 显示对话框时尝试锁定屏幕旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4946936/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com