wake-up-neo.com

Verhindern Sie die Drehung des Bildschirms auf Android

Ich habe eine meiner Aktivitäten, die ich am Rotieren hindern möchte, da ich eine AsyncTask starte und sie durch Drehen des Bildschirms neu gestartet wird.

Gibt es eine Möglichkeit, diese Aktivität mitzuteilen: "DREHEN SIE NICHT den Bildschirm, auch wenn der Benutzer sein Telefon wie verrückt schüttelt"?

300
Sephy

Hinzufügen

Android:screenOrientation="portrait" 

oder

 Android:screenOrientation="landscape" 

zum <activity> Element/e im Manifest und fertig.

439
lbedogni

Sie können der folgenden Logik folgen, um zu verhindern, dass der Bildschirm automatisch gedreht wird , während Ihr AsyncTask ausgeführt wird:

  1. Speichern Sie Ihre aktuelle Bildschirmausrichtung in Ihrer Aktivität mit getRequestedOrientation() .
  2. Deaktivieren Sie die automatische Bildschirmausrichtung mit setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR) .
  3. Führen Sie Ihr AsyncTask aus.
  4. Am Ende von AsyncTask stellen Sie mit setRequestedOrientation(oldOrientation) Ihren vorherigen Orientierungsstatus wieder her.

Beachten Sie, dass es mehrere Möglichkeiten gibt, auf die Eigenschaften von Activity (die in einem UI-Thread ausgeführt werden) in einem AsyncTask zuzugreifen. Sie können Ihre AsyncTask als innere Klasse implementieren, oder Sie können message Handler verwenden, das Ihre Activiy -Klasse anstößt.

124
Emre Yazici

Fügen Sie in Ihrer Manifest-Datei für jede Aktivität, für die Sie die Bildschirmdrehung sperren möchten, Folgendes hinzu: Wenn Sie sie im horizontalen Modus sperren möchten:

<activity
        ...
        ...
        Android:screenOrientation="landscape">

oder wenn Sie es im vertikalen Modus sperren möchten:

<activity
            ...
            ...
            Android:screenOrientation="portrait">
26
Sara

Der einfachste Weg, dies zu tun, war zu sagen

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

in onCreate gleich danach

setContentView(R.layout.activity_main);

damit...

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
23
Paul Alexander

Anstatt in das AndroidManifest zu wechseln, können Sie Folgendes tun:

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);
}

Der einzige Nachteil hierbei ist, dass API-Level 18 oder höher erforderlich ist. Das ist also im Grunde die Spitze des Speers.

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>
5
Li Che

Das folgende Attribut für ACTIVITY in AndroidManifest.xml ist alles, was Sie benötigen:

Android:configChanges="orientation"

Der vollständige Aktivitätsknoten wäre also:

<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>
2
Ben

Fügen Sie Ihrem AndroidManifest.xml Folgendes hinzu

[app> src> main> AndroidManifest.xml]

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

Beispiel:

<?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>
1
andrewoodleyjr

Hinzufügen:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
        ...
        ...
        ...
}
1
Anas

Wenn Sie Android Developer Tools (ADT) und Eclipse verwenden, können Sie zu Ihrer AndroidManifest.xml -> -Anwendung gehen tab -> gehe runter und wähle deine Aktivität aus. Schließlich wählen Sie Ihre bevorzugte Ausrichtung. Sie können eine der vielen Optionen auswählen.

0
Husam

Verwenden Sie AsyncTaskLoader, um Ihre Daten zu schützen, auch wenn sich die Aktivität ändert, anstatt AsyncTask, um Apps zu erstellen, anstatt die Bildschirmdrehung zu verhindern.

0
Bbake Waikhom

Sie müssen den folgenden Code in die Datei manifest.xml einfügen. Die Aktivität, für die es nicht gedreht werden soll, fügt in dieser Aktivität dieses Element hinzu

Android:screenOrientation="portrait"

Dann dreht es sich nicht.

0
Simon Chius

Verhindern Sie die Drehung des Bildschirms. Fügen Sie einfach die folgende Zeile in Ihre Manifeste ein.

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

Das funktioniert bei mir.

0
DEVSHK

Sie können auf diese Weise versuchen

<?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>
0