4

私は以下を解決する必要があります:私はそれを持ってActivityandroid:screenOrientation="portrait"ます。これActivityが表示されているときにデバイスを横向きに回転させると、別のデバイスを開始する必要があります。また、デバイスを縦向きに回転させるとfinish()、横向きのアクティビティを実行する必要があります。でこれを実行しようとしましたBroadcastReceiverが、この特別なアクティビティは、のためにブロードキャストを受信しませんandroid:screenOrientation="portrait"。どんな助けでも大歓迎です。

ありがとう。

4

7 に答える 7

8

電話の向きを取得するが、画面の向きを縦向きに修正するというフィリップのソリューションは、私にとって完璧です。

android:screenOrientation = "portrait"によってマニフェストで自動方向切り替えが無効になっている場合でも、SensorManagerクラスを使用してAndroidデバイスの方向を取得できます。

このコードを参照してください(Philippによる、上記のリンクを参照):

SensorManager sensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);
    sensorManager.registerListener(new SensorEventListener() {
        int orientation=-1;;

        @Override
        public void onSensorChanged(SensorEvent event) {
            if (event.values[1]<6.5 && event.values[1]>-6.5) {
                if (orientation!=1) {
                    Log.d("Sensor", "Landscape");
                }
                orientation=1;
            } else {
                if (orientation!=0) {
                    Log.d("Sensor", "Portrait");
                }
                orientation=0;
            }
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
            // TODO Auto-generated method stub

        }
    }, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
于 2014-03-28T09:03:48.837 に答える
5

android:screenOrientation ="portrait"または"landscape"がmenifestファイルに設定されている場合、それを実行したい場合は、リスナーはまだ起動されません。プログラムでur onConfigurationChanged()でポートレートのみのモードを処理してみてください。ここで、uも開始できます。再び活動。

于 2012-09-10T11:35:35.410 に答える
1

あなたはいつでもセンサーを使ってあなたの向きを知ることができます。

public static final int PORTRAIT        = 0;
public static final int PORTRAIT_REV    = 2;
public static final int LANDSCAPE       = 1;
public static final int LANDSCAPE_REV   = 3;

private final SensorEventListener mListener = new SensorEventListener() {

   public void onSensorChanged(SensorEvent event) {


            azimuth = event.values[0];
            pitch   = event.values[1];
            roll    = event.values[2];

            {
                if (pitch < -45 && pitch > -135) {
                    orient = PORTRAIT;
                } else if (pitch > 45 && pitch < 135) {
                    orient = PORTRAIT_REV;
                } else if (roll > 45) {
                    orient = LANDSCAPE;
                } else if (roll < -45) {
                    orient = LANDSCAPE_REV;
                }

            }

           // if(orient!=lastOrient && !orientChanging)
           // {
           //   orientChangeStart = System.currentTimeMillis();
           //   orientChanging = true;
           // }
}
于 2012-09-09T09:35:18.130 に答える
1

少し苦労した後、私が見つけた最善の方法は、次のようにOrientationEventListenerを使用することでした。

private void addOrientationListener()
    {
        OrientationEventListener listener=new OrientationEventListener(getActivity(), SensorManager.SENSOR_DELAY_UI)
        {
            public void onOrientationChanged(int orientation) {

                if( (orientation>=230 && orientation<=290) || (orientation>=70 && orientation<=90))
                {
                    isLandscape=true;
                }
                else if(orientation==-1){
                    //KEEP THE CURRENT SATTE
                }
                else
                {
                    isLandscape=false;
                }
            }
        };
        if(listener.canDetectOrientation())
            listener.enable();
    }

OnPause()でdisable()を呼び出す必要があります

于 2015-06-29T06:27:05.563 に答える
0

あなたはいくつかの方法でそれを行うことができます、1つは他の投稿で議論されているようにブロードキャストメッセージを聞いています、そして他のオプションは次のとおりです。

android:configChanges="orientation"方向の変更を制御できるアクティビティのマニフェストにを設定します。そうすることで、onConfigurationChanged()メソッドをオーバーライドして、新しいアクティビティアクティビティを開始できます。

于 2012-09-10T12:49:41.593 に答える
0

Orientation Listenerを使用しましたか?それがまさにあなたが必要としているものであるかどうかはわかりませんが、方向が前後に変化しているときにあなたが知りたいと思っていることを集めています:

http://developer.android.com/reference/android/view/OrientationListener.html

于 2012-09-05T21:00:11.470 に答える
0

回転を検出できると仮定すると、使用する必要のあるクラスはOrientationEventListenerです。を使用して画面を特定の方向に強制するandroid:screenOrientation="portrait"と、これらのイベントは発生しません。

代わりに、2つのlayout.xmlファイルを作成し、構成修飾子を使用してどちらを表示するかを決定することをお勧めします。(http://developer.android.com/guide/practices/screens_support.html

res/layout-land/my_layout.xml
res/layout-port/my_layout.xml

次に、を使用しOrientationEventListenerて、画面が回転したことを検出します。画面を横向きから縦向きに回転させると、finish();好きな機能を呼び出すことができます。

頑張ってください!

于 2012-09-05T21:35:13.237 に答える