2

ネイティブ経由で画面の回転を検出したい。

たとえば、タッチ イベントが発生したときは、/dev/input/event* イベント デバイスを介して検出できます。

これは可能ですか?

つまり、Javaを使用せずに。ネイティブメソッドを使用するだけです。

WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
Display disp = wm.getDefaultDisplay();

int rotation = disp.getRotation(); // Android 2.2
Log.i( "Rotation", "rotation : " + rotation );

switch ( rotation )
{
    case Surface.ROTATION_0: 
        Log.i( "Roation", "Portrait : 0" ); 
        break;

    case Surface.ROTATION_90:
        Log.i( "Roation", "Landscape : 90" );
        break;

    case Surface.ROTATION_180:
        Log.i( "Roation", "Portrait : 180" );
        break;

    case Surface.ROTATION_270:
        Log.i( "Roation", "Landscape : 270" );
        break;
}
4

1 に答える 1

4

NativeActivity インフラストラクチャを使用している場合 (質問からは明らかではありません)、onConfigurationChangedstructANativeActivityCallbacksにコールバックがあり、オブジェクトの一部として利用できます。これは、構造内でANativeActivity指され、へのパラメーターです。あなたの。activityandroid_appandroid_main

起動時にコールバックを関数にリセットするだけです。

void OnConfig(ANativeActivity *ac)
{
    //...
}

state->activity->callbacks->onConfigurationChanged = OnConfig;

実際に NativeActivity を使用している場合は、質問にnative-activityだけでなくをタグ付けしてくださいandroid-ndk。追加のタグを保証するのに十分な環境の違いがあります。

于 2012-10-20T14:59:36.340 に答える