android实现延时响铃遇到的有关问题(100分)
android实现延时响铃遇到的问题(100分求助)
各位:我想实现的是在手机来电时延时10秒再响铃+震动,下面是我的代码,结果10秒后震动是可以了,但是却没有响铃,请教一下可能是什么原因?
PS:我的广播和权限列表如下:
------解决方案--------------------
解决办法是:事先获取原铃声文件的路径,然后自己创建代码播放这个文件。
------解决方案--------------------
这个是播放系统提示音的单元,如果要播放铃声,把TYPE_NOTIFICATION改成TYPE_ALARM
private void PlayAlarmRing() {
Uri alert = RingtoneManager
.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
try {
MediaPlayer mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(this, alert);
final AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
mMediaPlayer.setLooping(false);
mMediaPlayer.prepare();
mMediaPlayer.start();
}
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
各位:我想实现的是在手机来电时延时10秒再响铃+震动,下面是我的代码,结果10秒后震动是可以了,但是却没有响铃,请教一下可能是什么原因?
- Java code
public class PhoneReceiver extends BroadcastReceiver implements Runnable { private Handler handler; private Context context; private Vibrator mVibrator01; @Override public void onReceive(Context context, Intent intent) { this.context = context; // if call others,do nothing if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) { } // if be called else { AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); int mode = am.getRingerMode(); if (mode != AudioManager.RINGER_MODE_SILENT) { am.setStreamVolume(AudioManager.STREAM_RING, 0, 0); } handler = new Handler(); handler.postDelayed(this, 10000); } } @Override public void run() { AudioManager tm = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); tm.setRingerMode(AudioManager.RINGER_MODE_NORMAL); tm.setStreamVolume(AudioManager.STREAM_RING, 5, 0); mVibrator01 = (Vibrator) context.getSystemService(Service.VIBRATOR_SERVICE); mVibrator01.vibrate(10000); } }
PS:我的广播和权限列表如下:
- XML code
<receiver android:name=".PhoneReceiver" > <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> <action android:name="android.intent.action.TIME_SET" /> <action android:name="android.intent.action.TIME_TICK" /> <action android:name="android.intent.action.TIMEZONE_CHANGED" /> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> </application> <uses-permission android:name="android.permission.READ_PHONE_STATE" > </uses-permission> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" > </uses-permission> <uses-permission android:name="android.permission.RECEIVE_SMS" > </uses-permission> <uses-permission android:name="android.permission.VIBRATE" > </uses-permission> <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" > </uses-permission>
------解决方案--------------------
解决办法是:事先获取原铃声文件的路径,然后自己创建代码播放这个文件。
------解决方案--------------------
这个是播放系统提示音的单元,如果要播放铃声,把TYPE_NOTIFICATION改成TYPE_ALARM
private void PlayAlarmRing() {
Uri alert = RingtoneManager
.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
try {
MediaPlayer mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(this, alert);
final AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
mMediaPlayer.setLooping(false);
mMediaPlayer.prepare();
mMediaPlayer.start();
}
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}