AsyncTaskを開始していて、画面を回転させると再起動するため、回転を防止したいアクティビティが1つあります。
この動作を「ユーザーが狂ったように自分の携帯電話を振っている場合でも、画面を回転させないでください」と伝える方法はありますか?
追加する
Android:screenOrientation="portrait"
または
Android:screenOrientation="landscape"
マニフェストの<activity>
要素に追加すれば完了です。
以下のロジックに従って画面の自動回転を防ぐことができますwhileあなたのAsyncTask
は実行中です:
getRequestedOrientation()
を使用して、現在の画面の向きをアクティビティ内に保存します。setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR)
を使用して自動画面方向を無効にします。AsyncTask
を実行または実行します。AsyncTask
の最後に setRequestedOrientation(oldOrientation)
を使って以前のオリエンテーションステータスを復元します。Activity
内でAsyncTask
(UIスレッド上で動作する)プロパティにアクセスするにはいくつかの方法があります。 AsyncTask
を内部クラスとして実装することも、Handler
クラスを突くメッセージ Activiy
を使うこともできます。
マニフェストファイルで、画面の回転をロックしたい各アクティビティに対して、水平モードでロックしたい場合は、以下を追加します。
<activity
...
...
Android:screenOrientation="landscape">
または、縦モードでロックしたい場合は、
<activity
...
...
Android:screenOrientation="portrait">
私がこれをすることを見つけた最も簡単な方法は置くことでした
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
直後のonCreate内
setContentView(R.layout.activity_main);
そう...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
AndroidManifestに入るのではなく、次のようにします。
screenOrientation = getResources().getConfiguration().orientation;
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
... AsyncTask
screenOrientation = getResources().getConfiguration().orientation;
@Override
protected void onPostExecute(String things) {
context.setRequestedOrientation(PlayListFragment.screenOrientation);
or
context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
}
唯一の欠点は、APIレベル18以上が必要なことです。だから基本的にこれは槍の先端です。
Activity.Java
@Override
public void onConfigurationChanged(Configuration newConfig) {
try {
super.onConfigurationChanged(newConfig);
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
// land
} else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
// port
}
} catch (Exception ex) {
}
AndroidManifest.xml
<application Android:icon="@drawable/icon" Android:label="@string/app_name">
<activity Android:name="QRCodeActivity" Android:label="@string/app_name"
Android:screenOrientation="landscape" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
AndroidManifest.xmlのACTIVITYにある次の属性だけが必要です。
Android:configChanges="orientation"
したがって、完全なアクティビティノードは次のようになります。
<activity Android:name="Activity1"
Android:icon="@drawable/icon"
Android:label="App Name"
Android:excludeFromRecents="true"
Android:configChanges="orientation">
<intent-filter>
<action Android:name="Android.intent.action.MAIN"/>
<category Android:name="Android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
以下をAndroidManifest.xmlに追加します
[[app> 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>
追加:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
...
...
...
}
Android Developer Tools (ADT)および Eclipse を使用している場合は、AndroidManifest.xml - >アプリケーションに移動できますタブ - >下に移動してあなたの活動を選択してください。最後に、好みの向きを選択してください。あなたは多くのオプションのうちの1つを選択することができます。
AsyncTaskを使用する代わりに、アクティビティが変更されてもデータを安全に保つには、AsyncTaskLoaderを使用します。これは、画面の回転を防ぐよりも優れた方法です。
Manifest.xmlファイルに次のコードを追加する必要があります。回転してはいけないアクティビティ、そのアクティビティにこの要素を追加する
Android:screenOrientation="portrait"
それから回転しません。
画面の回転を防ぐには、マニフェストに次の行を追加するだけです。
<activity
Android:name=".YourActivity"
Android:screenOrientation="portrait" />
これは私のために働きます。
あなたはこのように試すことができます
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.itclanbd.spaceusers">
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE"/>
<application
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:roundIcon="@mipmap/ic_launcher_round"
Android:supportsRtl="true"
Android:theme="@style/AppTheme">
<activity Android:name=".Login_Activity"
Android:screenOrientation="portrait">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>