当用户点击按钮时,我正在尝试播放声音。如果我在活动打开的前3-5秒点击按钮,效果很好,但如果我等待3-5秒以上,就没有声音了。我也没有得到任何关于声音的错误。。。。
任何想法都会被告知!
更新:这只发生在我的HTC上。如果我在三星Galaxy S 2上尝试这个,效果很好!!!!
在我的日志中说:"AudioHardwareQSD:AudioHardware pcm播放将进入待机状态"对此有什么解决方法吗???
@Override
protected void onCreate(Bundle savedInstanceState)
{
mSoundPoolMap = new HashMap<Integer, Integer>();
mSoundPool = new SoundPool(16, AudioManager.STREAM_RING, 0);
mAudioManager= (AudioManager) mcontext.getSystemService(Context.AUDIO_SERVICE);
mSoundPoolMap.put(1, mSoundPool.load(mcontext, R.raw.tap, 1));}
@Override
public void onClick(View v)
{
float streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_RING);
streamVolume = streamVolume / mAudioManager.getStreamMaxVolume(AudioManager.STREAM_RING);
mSoundPool.play(mSoundPoolMap.get(1), streamVolume, streamVolume, 1, 0, 1);}
以下是我如何做到这一点的——虽然不是最好的,但它确实有效。。。
检查设备是否来自HTC,然后创建一个播放声音的虚拟通知。此外,你必须确保你的文件是MP3而不是wav或OGG。。。
public static void playSound(int index)
{
String m_strManufacture = Build.MANUFACTURER;
Log.i(TAG, "Device Name: " + m_strManufacture);
if (m_strManufacture.equals("HTC"))
{
NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification();
Intent notificationIntent = new Intent(mContext, mContext.getClass());
// set intent so it does not start a new activity
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
// PendingIntent intent = PendingIntent.getActivity(mContext, 0, notificationIntent, 0);
// mContext.getResources().getResourceName(R.raw.ringer);
notification.sound = Uri.parse("android.resource://com.yourpackages/raw/" + sound);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(0, notification);
}
else {//Do the soundpool work....}