android的Android AlarmManager在定义的时间没有触发

时间:2013-12-02 05:36:44

标签: java android alarmmanager

我想在指定时间用我的歌曲触发闹钟,下面就是我所做的:

这是在java文件中:

公共类MainActivity扩展Activity实现View.OnClickListener

/** Called when the user clicks the Send button */
public void startMusic(View view) {

    Integer hr = timepickerStart.getCurrentHour();
    Integer min = timepickerStart.getCurrentMinute();


    // Start service using AlarmManager

    if(selectedFile != null && selectedFile.length() > 0)

    {

        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        final Intent intent = new Intent(this,MusicPlayActivity.class);
        intent.putExtra(EXTRA_MESSAGE, selectedFile.getPath());
        PendingIntent pendingIndent =   PendingIntent.getBroadcast(this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);

        Calendar firingCal = Calendar.getInstance();
        System.out.println("Before Present time in mili" + firingCal.getTimeInMillis());
        firingCal.add(Calendar.HOUR, hr);
        firingCal.add(Calendar.MINUTE, min);
        firingCal.add(Calendar.SECOND, 0);
        long intendedTime = firingCal.getTimeInMillis();

        System.out.println("After setting Present time in mili" + firingCal.getTimeInMillis());

        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, intendedTime, AlarmManager.INTERVAL_DAY, pendingIndent);
        Toast.makeText(this, "Alarm set from today", Toast.LENGTH_LONG).show();

    } else 
    {
        Toast.makeText(this, "Please select music File", Toast.LENGTH_LONG).show();
    }

}

现在在清单文件中

    <activity android:name="com.example.test.MainActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

问题在于它是按照自己的意愿开始的。

例如:

如果移动时间为9:30 AM 2/12/2013 (DD/MM/YYYY),我会在同一天选择10:00 AM的触发时间。这根本不会在10:00 AM触发,它会在3/12/2013某个不同的时间触发10:00 AM而不是{{1}}

我无法正确判断时间。

2 个答案:

答案 0 :(得分:0)

首先,为什么使用包装类(Integer)来存储小时和分钟只需使用int变量

值设置为日历而不是添加到日历

        firingCal.set(Calendar.HOUR, hr);//better use Calander.HOUR_OF_DAY bcoz hour range is 0 to 11 HOUR_OF_DAY 0 23 bcoz of this also your alarm is triggering next day
        firingCal.set(Calendar.MINUTE, min);
        firingCal.set(Calendar.SECOND, 0);

答案 1 :(得分:0)

我做了一些简单的报警管理器演示,在我的情况下运行正常,尝试,如果它适合你,而不是在你的代码中实现相同

这是我的MainActivity

这是MyReceiver Class

这是AlarmActivity

这里是布局xml文件

activity_main.xml

alarmview.xml

在第76行的AlarmActivity中,此行mMediaPlayer.setVolume(0,0);负责静音警报声,如果您不想将其静音而不是简单地注释该行。