2

ユーザーがティーチングアプリケーションを開いたときにringvolumeを設定し0、ユーザーが終了したときに元のボリュームに戻したい。これを行うための最良の方法は何ですか?私は問題なく
ボリュームを設定でき ますそれをいつ復元するかを知るのは難しいです、私のアプリケーションには頻繁に使用される複数のアクティビティがあり、ボリュームをすべてに設定してすべてに復元することのパフォーマンスへの影響が心配ですそれもそうです面倒で労働集約的! 誰か提案はありますか?0
0onCreate()onStop()

補遺として、

私はその半分を行う方法を考えました。 ユーザーが次のアクティビティの新しいインテントを開いたときに
ブール値を作成します。これをこの変数を使用 して設定し、ユーザーが「離れる」か、単に「私のアクティビティ」 これは、すべてのでリンガーをサイレントに設定する必要があることを意味します 。他に解決策はありますか?leaving =true;
true
onPause()
onResume()

4

3 に答える 3

2

ここでの問題は、アプリの実行時に、アプリが常にアクティビティスタックの最上位にあるとは限らないことです。ユーザーが別のアプリに切り替えた場合、または何らかのアラームや電話がフォーカスを引き継いだ場合はどうなりますか?

これがあなたがやろうとしていることを達成するために私が行くいくつかの方法です(以下のコメントから拡張されています):

オプション1:

ミュートアクションがアプリのパフォーマンスに影響を与えない場合(私自身の経験から、影響はないと思います)、onResume ()onPause( )をオーバーロードする単一の抽象基本クラスを使用して、質問で提案したソリューションを単純化できます。ユーザーが作成済みのアクティビティに戻ったときにイベントを確実にキャプチャするには、次のようにします。

public abstract class TeachingAppActivity extends Activity {
    public void onResume() {
        super.onResume();
        // Perform mute action here...
    }

    public void onPause() {
        super.onPause();
        // Perform unmute action here...
    }
}

public class MyActivity1 extends TeachingAppActivity {
} 

public class MyActivity2 extends TeachingAppActivity {
}

これによりコードが簡素化されますが、アクションはアクティビティ内に含まれます。別のアプリがフォーカスを取得すると、呼び出し音が復元されます。ユーザーがMyActivity2に戻ると、呼び出し音は再びミュートされます。

オプション2:

ミュートアクションが実際にアプリのパフォーマンスに影響を与える場合、または単にすべてのアクティビティのonResume()onPause()で実行したくない場合は、代わりにワーカースレッドステータスバー通知を使用できます。

  1. 各アクティビティでonResume() ; AsyncTask(またはRunnableタスク)を開始すると、Activityをサブクラス化して、このコードを他のアクティビティと共有できます。
  2. このワーカースレッドは、最初にボリュームをチェックし、次にミュートします。ボリュームが変更されると、ボリュームがミュートされたことをユーザーに通知する通知アイコンが表示されます。
  3. その後、UIのパフォーマンスに影響を与えることなく、このチェックとアクションを実行して、ワーカースレッドを終了できます。
  4. アプリの実行中は音量がミュートされたままになります。ユーザーが別のアプリにジャンプした場合(または着信/メッセージにフォーカスが移った場合)、通知アイコンがまだ表示されているため、音量がミュートされていることに気づきます。
  5. ユーザーが通知アイコンを押すと、ブロードキャストインテントによって音量が復元されます。これは、アプリ内のボタンまたはアクションによってトリガーされる場合もあります。

ユーザーがホームボタンを押すか、アプリで[戻る]ボタンを繰り返し押すと、音量は復元されません。これは意図的なものです。アプリを「終了」していないため、アクティビティスタックの一番下に移動しただけです。ルールは次のとおりです。通知アイコンが表示されている限り、音量はアプリによってミュートされています。

ここでの追加の利点は、別のアプリが音量を変更した場合、アクティビティのいずれかが再びフォーカスを受け取ったときにアプリが常にチェックすることです。

于 2012-02-01T14:51:50.987 に答える
0

関数を使用する

@Override
public void onResme() {
super.onResme();
//mute volume here
}

それはあなたが望むものを作るのに役立ちます

于 2013-06-10T14:20:56.887 に答える
-2

関数を使用する

@Override
public void onDestry() {
  super.onDestroy();
  // re-enable sound here
}

メインアクティビティで、アクティビティ「終了」と「タスクマネージャによる強制終了」の両方に応答できるようにします。

于 2012-02-01T14:22:50.810 に答える