我有一个AsyncTask,onPostExecute方法是:
protected void onPostExecute(String args) {
final AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.custom_dialog, (ViewGroup) findViewById(R.id.dialog_root_element));
AlertDialog.Builder builder = new AlertDialog.Builder(Main.this);
builder.setView(layout)
.setMessage(name)
.setTitle("playing...")
.setCancelable(false)
.setNeutralButton("stop/volver",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
mediaPlayer.stop();
dialog.cancel();
}
});
alert = builder.create();
alert.show();
SeekBar volControl = (SeekBar)findViewById(R.id.dialog_seekbar);
volControl.setMax(maxVolume);
volControl.setProgress(curVolume);
volControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar arg0) {
}
@Override
public void onStartTrackingTouch(SeekBar arg0) {
}
@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, arg1, 0);
}
});
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mediaPlayer.stop();
alert.dismiss();
}
});
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
}
});
}
错误发生在:
volControl.setMax(maxVolume);
但我不明白为什么......(在调试模式下,maxVolume是15)
我正在尝试使用音量控制seekBar进行对话,但我没有看到错误。我能用AsyncTask修改声音的音量吗?
非常感谢!
答案 0 :(得分:1)
你在错误的对象上调用findViewById
。代码在你的活动的布局文件中寻找你的SeekBar
,这可能不存在(我猜你得到一个空指针异常)。
尝试此操作,显示对话框,然后在对话框上调用findViewById
,而不是找到SeekBar
的活动。
alert.show();
SeekBar volControl = (SeekBar)alert.findViewById(R.id.dialog_seekbar);
这里的重要部分是 alert.findViewById()。