我有一个我想阻止旋转的活动,因为我正在启动一个AsyncTask,屏幕旋转使它重新启动。

有没有办法告诉这个活动“即使用户像疯了一样摇晃他的手机也不要旋转屏幕”?


当前回答

您必须在manifest.xml文件中添加以下代码。 它不应该旋转的活动,在该活动中添加此元素

android:screenOrientation="portrait"

那么它就不会旋转。

其他回答

你可以按照下面的逻辑来防止AsyncTask运行时屏幕自动旋转:

使用getRequestedOrientation()在活动中存储当前屏幕方向。 使用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR)禁用自动屏幕朝向。 运行/执行AsyncTask。 在AsyncTask结束时,使用setRequestedOrientation(oldOrientation)恢复你之前的方向状态。

请注意,有几种方法可以访问AsyncTask中的Activity(运行在UI线程上)属性。你可以实现你的AsyncTask作为一个内部类,或者你可以使用消息处理程序戳你的活动类。

使用AsyncTaskLoader来保持你的数据安全,即使活动发生变化,而不是使用AsyncTask,这是一个更好的方式来构建应用程序,而不是阻止屏幕旋转。

您必须在manifest.xml文件中添加以下代码。 它不应该旋转的活动,在该活动中添加此元素

android:screenOrientation="portrait"

那么它就不会旋转。

防止屏幕旋转只需在清单中添加以下一行。

<activity
        android:name=".YourActivity"
        android:screenOrientation="portrait" />

这对我很有用。

将以下内容添加到您的AndroidManifest.xml

[应用程序> src > main > AndroidManifest.xml]

<activity android:name=".MainActivity"
          android:configChanges="orientation"
          android:screenOrientation="portrait"/>

例子:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xxx.zzzzzz.yyyyy">

   <uses-permission android:name="A-PERMISSION" />

   <application>
      <activity android:name=".MainActivity"
                android:screenOrientation="portrait"
                android:configChanges="orientation">
      </activity>
   </application>

</manifest>