1

バイブレーション切り替えウィジェットを作成しています (実際、最初のバージョンは既に市場に出ています) が、Android 2.2 のバイブレーション設定に問題があります。

Android 2.1 までは問題ありません。バイブレーションを無効にしたい場合は、

am.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_OFF);
am.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION,AudioManager.VIBRATE_SETTING_OFF);

同じですが、VIBRATE_SETTING_ON両方の行をオンにしてオンにすると、問題なく動作します。

ただ、Android 2.2で「マナーモード時のみバイブレーション」と「マナーモード以外でバイブレーション」が導入されたので、どうすれば動くのかわかりません。バイブレーションが「常に」または「なし」に設定されている場合は問題ありませんが、ユーザーが手動で他の 2 つの設定のいずれかに設定するとすぐに、アプリが奇妙な動作を開始します。

たとえば、「サイレントモードでのみ振動する」に設定していて、ウィジェットでバイブレーションをオフにすると、オフになりますが、オンに戻すと...代わりに「サイレントモードでのみ」に戻ります「いつも」の。実際、[設定] -> [サウンド] で設定しない限り、「常に」に戻す方法はないので、バイブレーション モードのコンボボックスが何か別のことをしていると思います。値を別の場所に保存したようです。手動で「常に」に設定しても、ウィジェットを介して無効にしてから再度有効にすると(前に投稿したコードを使用)、「サイレントモードでのみ振動する」に戻り続けるためです。 "。

さらに、AudioManager クラスには「サイレント モードのみ」(VIBRATE_SETTING_ONLY_SILENT) の値がありますが、「サイレント モードでない場合のみ」に設定すると VIBRATE_SETTING_ON を使用するため、それを検出する方法はありません (私が知っている、つまり)。

あまり混乱していないことを願っていますが、考えられるすべてのデータを提供したかったのです。そして、そのすべてのセットで...

2.2で振動設定を適切に処理する方法を知っている人はいますか? バイブレーションを完全に無効または有効にするために、設定または呼び出す必要がある他の変数はありますか? または、電話機を既知の状態に「リセット」して正常に動作させる方法はありますか?

問題 (または、少なくとも問題の 1 つ) を再現する手順は次のとおりです。

  • 設定メニューからバイブレーションを「マナーモード時のみ」に設定してください。

  • ウィジェットで振動を「しない」に設定します。

    setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);

  • バイブレーションが「なし」に設定されていることを設定メニューで確認します。

  • ウィジェットで振動を「常に」に設定します。

    setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ON);

  • 設定メニューに移動します -> バイブは「サイレントモードのみ」に設定されています
4

2 に答える 2

9

一部のアプリケーションが Nexus One の個々の設定を台無しにしたとき、私はこれらの設定を自分で台無しにしなければなりませんでした。どうぞ:

常にリングを振動させる:

setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ON);

リングで振動しない:

setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);

サイレント モードでリングをバイブレーションする:

setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ONLY_SILENT);

通知時に常に振動する:

setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_ON);

通知時に振動しない:

setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_OFF);

通知時にバイブレーションをサイレント モードでのみ:

setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_ONLY_SILENT);

呼び出し音モードを変更します。

AudioManager.setRingerMode( RINGER_MODE_NORMAL ); AudioManager.setRingerMode( RINGER_MODE_SILENT ); AudioManager.setRingerMode( RINGER_MODE_VIBRATE );

バイブレーションの設定は、着信音の設定とは無関係です。混乱が生じます。

于 2010-09-19T05:38:50.827 に答える
1

わかりました、ようやく修正したと思います。
クラスのソースコードを見て、com.android.settings.Settings振動を有効または無効にするメソッドの一部をコピーしました:
https ://android.googlesource.com/platform/packages/apps/Settings/+/master/src/com/android/settings /SoundSettings.java

とにかくマガイオに感謝します、あなたは私を正しい方向に向けました。

于 2010-09-26T10:19:17.383 に答える