前言:大多數的視訊播放軟體,上下滑動都可以實作螢幕亮度和音量大小的調節。這一功能的實作主要涉及安卓的手勢檢測與系統服務兩個技術點,在這篇文章中主要講解如何利用系統服務實作音量大小的調節,手勢檢測會在後期的文章中涉及。
第一步,界面設計
由于本文隻是大緻講解音量調節大小的實作,界面就不做美化了,直接使用安卓系統控件兩個Button,分别用于音量的增加與減小,代碼:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:onClick="audioUp"
android:text="調大" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:onClick="audioDown"
android:text="調小 />
</LinearLayout>
第二步,定義方法
從上面的界面布局代碼中可以看到兩個Button的點選事件分别是audioUp與audioDown,是以需要在Java代碼中定義這兩個方法,代碼如下:
public void audioUp(View view) {
boolean bool = AudioUtil.audioUp(this);
if(bool){
toastShort(“調節成功”);
}else{
toastShort("已經是最大音量");
}
}
public void audioDown(View view) {
boolean bool = AudioUtil.audioDown(this);
if(bool){
toastShort(“調節成功”);
}else{
toastShort("已經是最小音量");
}
}
第三步,實作AudioUtil,并實作相應的邏輯
AudioUtil代碼如下:
import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
public class AudioUtil {
public static boolean audioUp(Activity act) {
return audioDo(1, act);
}
public static boolean audioDown(Activity act) {
return audioDo(0, act);
}
private static boolean audioDo(int flag, Activity act) {
AudioManager mAudioManager = (AudioManager) act.getSystemService(Context.AUDIO_SERVICE);
int maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
if (flag == 0) {
if (currentVolume == 0) {
return false;
}
mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FX_FOCUS_NAVIGATION_UP);
return true;
} else {
if (currentVolume == maxVolume) {
return false;
}
mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FX_FOCUS_NAVIGATION_UP);
return true;
}
}
}
第四步,測試完美收工