当前位置: 代码迷 >> Android >> android实现延时响铃遇到的有关问题(100分)
  详细解决方案

android实现延时响铃遇到的有关问题(100分)

热度:100   发布时间:2016-05-01 21:07:17.0
android实现延时响铃遇到的问题(100分求助)
各位:我想实现的是在手机来电时延时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();
}
}
  相关解决方案