android实现静音,在网上找了很多的例子都不好用,最后索性拿了一个android静音的成品apk反编译,窥探下别人的实现方式。然后自己写了一个小的测试程序:如下所示:希望对你有帮助!我试验过了,可以实现功能。
静音和恢复声音的实现部分。也就是button的回调函数。
Try Catch 里是为了提供一个音乐播放的环境,循环播放。test.mp3这个mp3文件是播出文件,文件放在Assets目录下。就OK了!
package com.zhcv.testaudio;
import java.io.IOException;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.res.AssetFileDescriptor;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private Button btn = null;
private boolean SoundEnabled = true;
private AudioManager amanager = null;
public static AssetFileDescriptor afd = null;
private MediaPlayer myMediaPlayer;
private SharedPreferences saved_prefs;
@SuppressWarnings("unused")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.saved_prefs = getSharedPreferences("RealSilent", 0);// 存储静音前的音量索引
try {
afd = getAssets().openFd("test.mp3");
myMediaPlayer = new MediaPlayer();
myMediaPlayer.reset();
myMediaPlayer.setDataSource(afd.getFileDescriptor(),
afd.getStartOffset(), afd.getLength());
myMediaPlayer.prepare();
myMediaPlayer.start();
myMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
myMediaPlayer.reset();
try {
myMediaPlayer.setDataSource(afd.getFileDescriptor(),
afd.getStartOffset(), afd.getLength());
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
myMediaPlayer.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
myMediaPlayer.start();
}
});
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
btn = (Button) findViewById(R.id.btn);
amanager = (AudioManager) getSystemService(AUDIO_SERVICE);
btn.setOnClickListener(new MyButtonClickListener());
}
class MyButtonClickListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (SoundEnabled) {
SharedPreferences.Editor localEditor = saved_prefs.edit();
localEditor.putInt("last_media_volume",
amanager.getStreamVolume(AudioManager.STREAM_MUSIC));
localEditor.commit();
amanager.getStreamVolume(AudioManager.STREAM_MUSIC);
amanager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0);
} else {
int i = saved_prefs.getInt("last_media_volume", 0);
amanager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0);
}
SoundEnabled = !SoundEnabled;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}