2016-04-28 13 views
-3

アラームを設定して起動する時刻を設定しましたが、アラームが数分または数秒遅れて開始しました。アンドロイド4.4+でsetWindowを使用しますそれは、まったく役に立たない、正しい時にそれを始める方法です。アンドロイドアラームを設定して、適切な時刻に表示しない

public class AlarmSetActivity extends Activity { 

private Context context; 
private AlarmManager manager; 
private Intent intent; 
private PendingIntent pi; 
@ViewInject(R.id.activity_content_tv) 
private TextView title; 
@ViewInject(R.id.time_set_btn) 
private Button timeSetBtn; 
@ViewInject(R.id.time_set_open_che) 
private CheckBox timeSetOpenCheck; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_alarm_set); 
    ViewUtils.inject(this); 
    context = this; 
    manager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    title.setText("闹钟设置 "); 
    intent = new Intent(context, AlarmNotifyReceiver.class); 
    pi = PendingIntent.getBroadcast(context, 0, intent, 0); 
    if (!timeSetOpenCheck.isChecked()) { 
     manager.cancel(pi); 
    } 
} 

@OnClick({ R.id.time_set_btn, R.id.alarm_voice_set, R.id.back_btn, 
     R.id.voice_set_btn }) 
public void onClick(View view) { 
    switch (view.getId()) { 
    case R.id.time_set_btn: 
     if (timeSetOpenCheck.isChecked()) { 
      setTime(); 
     } 
     break; 
    case R.id.back_btn: 
     onBackPressed(); 
     break; 
    case R.id.alarm_voice_set: 
     setAlarmRingtone(); 
     break; 
    case R.id.voice_set_btn: 
     setAlarmRingtone(); 
     break; 
    default: 
     break; 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
    case 1: 
     if (resultCode == RESULT_OK) { 
      Uri uri = data 
        .getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); 
      RingtoneManager.setActualDefaultRingtoneUri(context, 
        RingtoneManager.TYPE_ALARM, uri); 
     } 
     break; 

    default: 
     break; 
    } 
} 

/** 
* 闹钟的时间选择 
*/ 
private void setTime() { 
    // 弹出设置时间的窗口 
    new TimeDialog(context).setTime(timeSetBtn); 
} 

/** 
* 选择闹钟铃声 
*/ 
private void setAlarmRingtone() { 
    Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, 
      RingtoneManager.TYPE_ALARM); 
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false); 
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "请选择闹钟铃声"); 
    startActivityForResult(intent, 1); 
} 
+0

特定の時刻に起動させるには、 'AlarmManager#setExact()'メソッドを使用してください。 –

+0

まだ正確に実行されていません – user5607014

+0

[mcve]をご提供ください。なぜ誰かがコードのページを掘り起こしてその理由を見つけようとしません。 –

答えて

0

秒を設定していません。あなたが設定した時刻にアラームが現時点で開始され、遅れているようです。

+0

しかし時々それは数分後に始まります.... – user5607014

関連する問題