1

すでにインストールされている他のアプリケーションの向きを変更するアプリケーションを作成しています。インストールされている他のアプリケーションの向きを読み取るのは、ApplicationInfoオブジェクトを介して簡単でしたが、変更する方法はありませんでした。

いくつかの研究開発の後、同様のタイプのアプリ(向きを変更する)もサービスを実行していることに気付きました。つまり、それらはオンザフライで向きを変更しますが、どのように正確にそれを行うのかわかりません。

たとえば、Smart Rotatorアプリのように、https://play.google.com/store/apps/details?id = net.xdevelop.rotator_t&hl = en

4

2 に答える 2

2

あなたが参照している他のアプリは、あなたが期待しているものとは異なる何かをします。これらは、デバイスの加速度計に基づいて画面の回転を可能にします。つまり、ユーザーがデバイスを回転させると、向きが変わります。これらは、アプリケーションに特定の方向を設定しません。横向きモードで自動回転を無効にすると、通常、向きは縦向きに戻ります。

私は以前にこれらの他のアプリケーションと同じことをしました。残念ながら、私が共有する立場にないのはプロプライエタリの商用コードです。

このアプローチには2つの要素があります。

  1. フォアグラウンドアプリケーションがターゲットアプリであるかどうかを検出する
  2. 表示方向のシステム全体の設定を変更します

明らかに、逆も行う必要があります。つまり、後で元に戻す必要があります。

SOの他の場所にピース1の例がいくつかあります。私の場合、フォアグラウンドアプリが何であるかを確認するために継続的にポーリングするサービスを作成しました(アプリの変更を通知する関連するシステムイベントがないため)。それは些細なことではありませんが、実行することはできます。

ピース2に関連する設定はですSettings.System.ACCELEROMETER_ROTATION。すべてのバージョンで通常のアプリの許可があればそれを書くことができると思います。そのためのコードスニペットは以下のとおりです。

        Settings.System.putInt(
             app.getContentResolver(),
             Settings.System.ACCELEROMETER_ROTATION,
             orientationEnabled ? 1 : 0
        );

システムの画面回転を無視するアプリケーションを作成することも可能であることに注意してください。つまり、設計された方向にロックされたままになります。しかし、それは一般的ではありません。

于 2013-01-31T21:53:51.400 に答える
1

これは、プロセス間通信によって行うことができます。いくつかのオプションがあります。

1- SharedPreferencesを使用できます。アプリケーションからのWORLD_READABLEプリファレンスを設定して、ターゲットアプリケーションからのすべての起動時に読み取られるようにします。これを見てください。

2-この設定をSDカード上のファイルに書き込んで、同じ方法で読み取ることができます。

3-ターゲットアプリケーションが実行されている場合(つまり、サービスなどがあり、プロセスが有効である場合)、インテントをブロードキャストして、ターゲットアプリケーションから受信できます。ここでは、このテーマに関する投稿を見つけることができます。

4- ...要するに、パラメータをターゲットアプリケーションに渡し、方向を次のように設定する必要があります。setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

于 2013-01-29T10:05:54.417 に答える