Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:my AlarmReceiver getRingtone()上的触发/启动报警音返回null_Android_Alarm_Ringtone - Fatal编程技术网

Android:my AlarmReceiver getRingtone()上的触发/启动报警音返回null

Android:my AlarmReceiver getRingtone()上的触发/启动报警音返回null,android,alarm,ringtone,Android,Alarm,Ringtone,我有一个代码,在计时器设置的警报上触发toast消息,除了toast消息外,我还想触发/启动一个警报音 这是我在接收器上的代码: public void onReceive(Context context, Intent intent) { long time = intent.getExtras().getLong("time"); Toast.makeText(context, "Alarming at "+formatDate(time),

我有一个代码,在计时器设置的警报上触发toast消息,除了toast消息外,我还想触发/启动一个警报音

这是我在接收器上的代码:

    public void onReceive(Context context, Intent intent) {

        long time = intent.getExtras().getLong("time");
        Toast.makeText(context, "Alarming at "+formatDate(time),
                Toast.LENGTH_LONG).show();
        //Uri alerTone = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

        try {
            Uri alert = getAlarmUri();
            Log.d("alarmCheck","Value of URI: "+alert.toString());
            Ringtone r = RingtoneManager.getRingtone(context, alert);
            r.play()

;
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    private Uri getAlarmUri() {
        Uri alert = RingtoneManager
                .getDefaultUri(RingtoneManager.TYPE_ALARM);
        if (alert == null) {
            alert = RingtoneManager
                    .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            if (alert == null) {
                alert = RingtoneManager
                        .getDefaultUri(RingtoneManager.TYPE_RINGTONE);
            }
        }
        return alert;
    }
这是我的主要活动:

   @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final TimePicker timepicker = (TimePicker) findViewById(R.id.alarm_time);
    Button set_alarm = (Button) findViewById(R.id.set_alarm);

        set_alarm.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                 Calendar c = Calendar.getInstance();
                 c.setTimeInMillis(System.currentTimeMillis());
                 c.set(Calendar.HOUR_OF_DAY, timepicker.getCurrentHour());
                 c.set(Calendar.MINUTE, timepicker.getCurrentMinute());
                 c.set(Calendar.SECOND, 0);
                 Intent in = new Intent(MainActivity.this, OnAlarmReciever.class);
                         in.putExtra("time", c.getTimeInMillis());
                 PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 123456789, in, 0);
                 AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
                 am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),pi);
            }
        });

    }
在我的接收器上,try-catch块getRingtone()返回null,因此访问play()会产生null异常。。对此问题的任何意见都将不胜感激

谢谢,上帝保佑

编辑 (DDMS Logcat,URI值)


**其他编辑。。铃声r=。。。r真为空的行**


此默认音调/声音是否可能在模拟器上不起作用?。因为我读过一些关于在模拟器上播放音调的帖子,这些帖子不起作用,因为模拟器没有默认声音或者无法处理音调/声音?。。。。。无法确认这一点,因为很少有线程这么说。事实上,这可能是一个模拟器问题。尝试将mp3文件推送到SD卡并将其设置为铃声,看看是否有帮助?

getAlarmUri()返回什么?@chiuki请查看我的编辑。。tnxyep尝试了,是的,将mp3导入sd卡工作正常,但emulator设备的默认铃声不起作用。请澄清:您将默认铃声设置为mp3卡上的文件,然后调用getDefaultUri,然后r.play()工作,是吗?这就是问题所在,然后-如果磁盘上没有任何声音文件,emulator无法播放声音。
08-26 08:46:55.764: D/alarmCheck(537): Value of URI: content://settings/system/alarm_alert
08-26 08:46:55.774: D/MediaPlayer(537): Couldn't open file on client side, trying server side
08-26 08:46:55.825: E/MediaPlayer(537): Unable to to create media player
08-26 08:46:55.825: E/RingtoneManager(537): Failed to open ringtone content://settings/system/alarm_alert
08-26 08:46:55.825: W/System.err(537): java.lang.NullPointerException
08-26 08:46:55.844: W/System.err(537):  at com.example.alarmexercise.OnAlarmReciever.onReceive(OnAlarmReciever.java:36)
08-26 08:46:55.844: W/System.err(537):  at android.app.ActivityThread.handleReceiver(ActivityThread.java:2119)
08-26 08:46:55.844: W/System.err(537):  at android.app.ActivityThread.access$1500(ActivityThread.java:123)
08-26 08:46:55.844: W/System.err(537):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1197)
08-26 08:46:55.844: W/System.err(537):  at android.os.Handler.dispatchMessage(Handler.java:99)
08-26 08:46:55.844: W/System.err(537):  at android.os.Looper.loop(Looper.java:137)
08-26 08:46:55.854: W/System.err(537):  at android.app.ActivityThread.main(ActivityThread.java:4424)
08-26 08:46:55.854: W/System.err(537):  at java.lang.reflect.Method.invokeNative(Native Method)
08-26 08:46:55.854: W/System.err(537):  at java.lang.reflect.Method.invoke(Method.java:511)
08-26 08:46:55.854: W/System.err(537):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-26 08:46:55.864: W/System.err(537):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-26 08:46:55.874: W/System.err(537):  at dalvik.system.NativeStart.main(Native Method)