5

ウィキペディアのページを読めるアプリを作っています。

電話を縦向きから横向きに、またはその逆に回転させるたびにアイコンを表示したい。ユーザーが必要に応じて画面の向きをロックできるようにします。そうでない場合は、センサーデータに従って画面の向きをロックします。これは、GooglePlayの一部のアプリによって実装されている機能です。たとえば-Pocket

これを行うには、私はオーバーライドしました

public void onConfigurationChanged(Configuration newConfig)

ここで、(orientation_dirは共有設定に保存されている方向の値であり、コードをデバッグしたので正しい)を使用してロックされた構成を設定している場合。

if(orientation_dir == Configuration.ORIENTATION_LANDSCAPE)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
        }
        else if(orientation_dir == Configuration.ORIENTATION_PORTRAIT)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
        }

次に、向きは正しく設定されますが、電話が回転したときにonConfigurationChanged()メソッドは呼び出されません。

このように向きを設定すると

if(orientation_dir == Configuration.ORIENTATION_LANDSCAPE)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
        else if(orientation_dir == Configuration.ORIENTATION_PORTRAIT)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}

その場合、目的の方向が設定されません。電話はセンサーデータに従って向きをリセットします。

設定が間違っているのではないかと思ったので、メソッドでスーパーを呼び出さなくても試しましたが、「スーパーが呼び出されません」という例外が発生します。

私は過去2日間試していますが、この問題の解決策はありません。

4

2 に答える 2

5

通常onConfigurationChanged()、イベントは構成の変更が発生した場合にのみ発生します。アプリでは、方向変更イベントは、画面が自由に回転できる場合にのみ発生します。画面の向きをロックしている場合、画面の向きイベントは発生しません。onConfigurationChanged()デバイスの回転を担当するセンサーをリッスンしませんが、適切なイベントが発生した場合にのみ起動します。

したがって、本当に必要なのは、にアクセスしてSensorManagerを添付することSensorListenerです。これは、デバイスの実際の向きを聞く方法です。

SensorManagerこれは、電話の向きで機能を示す非常に優れたデモです。

http://www.workingfromhere.com/blog/2009/03/30/orientation-sensor-tips-in-android/

更新: 方向センサーは、開発者にとって作業を容易にするための複合センサーです。電話には実際には存在しません。加速度計センサーと磁場センサーを組み合わせた非常に端正なセンサーです。また、OrientationSensor は現在、ドキュメント ( http://developer.android.com/guide/topics/sensors/sensors_position.html ) に従って廃止されています。

Androidの向きセンサーの代替手段は何ですか? を参照してください。サンプル使用のため。

あまりテストしていないため、修正が必要になる場合があります。

于 2012-07-19T07:37:24.983 に答える
0

onConfigurationChanged- 向きの変化をアクティビティに知らせる通知です。

そのメソッドで方向を変更または修正しようとしないでください。向きを横向きまたは縦向きに設定すると、アクティビティの向きが変わらないため、新しい向きの変更通知を受け取ることはありません。向きが変わったときに表示する予定のウィジェットのイベント ハンドラーで、向きを設定する必要があるかもしれません。

于 2012-07-19T06:52:53.870 に答える