アンドロイド開発(21)ビープ音とバイブレーション警告の実装。
最近、zxingプロジェクトを読んでいて、いろいろと勉強になりました。皆さんもぜひ読んでみてください。BeepManagerクラスがあり、ビープ音とバイブレーションの実装がされています。彼がどのようにやっているのか見てみましょう。
ビープ音
1. オーディオファイル(例:beep.ogg)を用意します。ogg形式は音声圧縮形式の一種で、このようなmp3と似たようなものです。これを用意し、再生するとビープ音が鳴る。
2. アクティビティに登録されているデフォルトのオーディオチャンネルです。
activity.setVolumeControlStream(AudioManager.STREAM_MUSIC);
ここでSTREAM_MUSICと宣言されているチャンネルがマルチメディア再生で、これを登録した後、携帯電話のボリュームレベルボタンで再生の音量を調整することができます。
このチャンネルを設定しない場合、我々のアクティビティのデフォルトの音量ボタンの処理は、携帯電話の着信音の音量に作用します。
3. 現在の着信音モードを確認する、またはシナリオモードになる。
説明:getRingerMode()・・・現在の着信モードを返す。例:RINGER_MODE_NORMAL(通常)、RINGER_MODE_SILENT(無音)、RINGER_MODE_VIBRATE(バイブレーション)。
// 現在のモードがRingingモードの場合、SilentまたはVibrateモードであれば、次のBeep Beep操作の準備を続ける。続けてはいけません。ユーザがサイレントモードを選択しているため、こちらも音を鳴らしません。
AudioManager audioService = (AudioManager) アクティビティ
.getSystemService(Context.AUDIO_SERVICE);
if (audioService.getRingerMode() !) = AudioManager.RINGER_MODE_NORMAL) { { (オーディオサービス.getRINGERMODE() !
<未定義
shouldPlayBeep = falseです。
}
4. Initialize the MediaPlayer object, specifying the sound channel to be played as STREAM_MUSIC, which points to the same channel as in the above steps.
MediaPlayer mediaPlayer = new MediaPlayer()。
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC)を設定します。
イベントを登録します。再生が一度終了すると、ストリームファイルの先頭にリダイレクトし、次の再生に備えます。
// ビープの再生が終了したら、巻き戻して次のビープをキューに入れる。
メディアプレイヤー
.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {)
<未定義
オーバーライド
public void onCompletion(MediaPlayer player) {...
<未定義
player.seekTo(0);
}
});
データソースを設定し、再生の準備をする
AssetFileDescriptor file = activity.getResources().openRawResourceFd()
R.raw.beep)です。
トライ {
<未定義
mediaPlayer.setDataSource(file.getFileDescriptor(),
file.getStartOffset(), file.getLength()) を参照)。
file.close()を実行します。
mediaPlayer.setVolume(BEEP_VOLUME, BEEP_VOLUME)を実行します。
mediaPlayer.prepare()を実行します。
} catch (IOException ioe) {...
<未定義
Log.w(TAG、ioe)。
mediaPlayer = nullです。
}
return mediaPlayer;
5. 再生開始
if (playBeep && mediaPlayer ! = null) {.
<未定義
mediaPlayer.start()を実行します。
}
-----------------------------------------------------------------
バイブレーション
こちらは比較的簡単です。2つのステップで。
1. パーミッションの宣言
AndroidManifest.xmlに書き込む
<uses-permission android:name="android.permission.VIBRATE"/>
2. バイブレーションサービスを取得します。
バイブレーター vibrator = (Vibrator) activity.getSystemService(Context.VIBRATOR_SERVICE).Vibrator = (Vibrator) activity.getSystemService(Context.VIBRATOR_SERVICE);
3. バイブレーターを起動します。
vibrator.vibrate(VIBRATE_DURATION)を実行します。
public void playBeepSoundAndVibrate() {
if (enableVibrate) {
Vibrator vibrator = (Vibrator) activity
.getSystemService(Context.VIBRATOR_SERVICE);
//vibrate once
vibrator.vibrate(VIBRATE_DURATION);
//The first parameter, which refers to an array of vibrating frequencies. The first of each group is the waiting time, and the second is the vibration time.
// For example, [2000,500,100,400], will wait 2000 milliseconds for 500 vibrations, and then wait 100 for 400 vibrations.
// The second parameter, repest, refers to the position of the first index (the first array parameter) from which the vibration cycle starts.
//It will keep on looping, we need to use vibrator.cancel() to actively terminate it
//vibrator.vibrate(new long[]{300,500},0);
}
}
ソースコードのアップロードができなくなりました
参考にしてください。 http://www.linuxidc.com/Linux/2011-08/41276.htm
http://www.linuxidc.com/Linux/2012-04/57903.htm
http://blog.csdn.net/barnett_zhubo/article/details/6731659
http://www.cnblogs.com/j-turn/archive/2012/09/18/2690534.html
このコードは、zxingオープンソースプロジェクトを参照しています。
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"& gt;</script>
関連
-
c++のエラーエラー: "***"の前に期待される初期化子
-
解決方法: 'chromedriver' 実行ファイルが PATH に存在する必要があります。
-
一致するワイルドカードは厳密ですが、要素 'aop:aspectj' の宣言が見つかりません。
-
python problem: SyntaxError: 1つのステートメントをコンパイルする際に複数のステートメントが見つかる
-
I encountered The markup in the document following the root element must be well-formed.
-
この宣言には、ストレージクラスまたはタイプ指定子がありません。この警告は何を意味するのですか?
-
R言語ファイル読み込みエラー
-
android Spinner で OnItemSelectedListener がデフォルトで一度自動的に呼び出されないようにした。
-
次のクラスが見つかりませんでした: - android.support.v7.internal.widget.
-
javaHow to create array whose elements are type ArrayList?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
undefineddouble' の前にある期待される一次式を解決します。
-
github共通の操作と共通のエラー! fatal: リモートリポジトリから読み取れませんでした。
-
AS ERROR: x86 エミュレーションは現在ハードウェアアクセラレーションが必要です!
-
[UE4公式ドキュメント翻訳】Unreal Engine 4 For Unity Developers (UE4、ユニティデベロッパーズ向け)
-
簡単な操作でprotobufのバージョンの問題を解決するために、コピーして貼り付けることができます。
-
Javaエラーコードは、public型は、独自のファイルで定義する必要があります ソリューションアンドロイド開発Javaプログラミング
-
PY 実行プログラム・プロンプト "TypeError: unsupported operand type(s) for %: 'NoneType' and 'tuple'" ソリューション・インサイト
-
カメラへの呼び出しがTypeError: undefined is not an objectで解決される('navigator.mediaDevices.getUserMedia'を評価する)。
-
pycharmの未解決参照に対する解決策
-
TensorFlowのエラー ValueError: xとyは同じサイズでなければならない