2016-10-02 6 views
0

Я новичок в разработке android и имею очень мало знаний в java, и я видел это приложение для будильника в Интернете. Приложение имеет проблемы. Он не может установить время до текущего времени телефона, и оно не начинается в точное время. Как сделать это приложение, чтобы он мог настроить будильник в течение 24 часов и в точное время?Как сделать это приложение для будильника. чтобы иметь возможность устанавливать будильник в любое время дня и точно в это время?

AlarmActivity.java

package com.javapapers.androidalarmclock; 

import android.app.Activity; 
import android.app.AlarmManager; 
import android.app.PendingIntent; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.TextView; 
import android.widget.TimePicker; 
import android.widget.ToggleButton; 

import java.util.Calendar; 

public class AlarmActivity extends Activity { 

AlarmManager alarmManager; 
private PendingIntent pendingIntent; 
private TimePicker alarmTimePicker; 
private static AlarmActivity inst; 
private TextView alarmTextView; 

public static AlarmActivity instance() { 
    return inst; 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    inst = this; 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_my); 
    alarmTimePicker = (TimePicker) findViewById(R.id.alarmTimePicker); 
    alarmTextView = (TextView) findViewById(R.id.alarmText); 
    ToggleButton alarmToggle = (ToggleButton)  findViewById(R.id.alarmToggle); 
    alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
} 

public void onToggleClicked(View view) { 
    if (((ToggleButton) view).isChecked()) { 
     Log.d("MyActivity", "Alarm On"); 
     Calendar calendar = Calendar.getInstance(); 
     calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour()); 
     calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentMinute()); 
     Intent myIntent = new Intent(AlarmActivity.this, AlarmReceiver.class); 
     pendingIntent = PendingIntent.getBroadcast(AlarmActivity.this, 0, myIntent, 0); 
     alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent); 
    } else { 
     alarmManager.cancel(pendingIntent); 
     setAlarmText(""); 
     Log.d("MyActivity", "Alarm Off"); 
    } 
} 

public void setAlarmText(String alarmText) { 
    alarmTextView.setText(alarmText); 
} 
} 

AlarmReceiver.java

package com.javapapers.androidalarmclock; 

import android.app.Activity; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.Intent; 
import android.media.Ringtone; 
import android.media.RingtoneManager; 
import android.net.Uri; 
import android.support.v4.content.WakefulBroadcastReceiver; 

public class AlarmReceiver extends WakefulBroadcastReceiver { 

@Override 
public void onReceive(final Context context, Intent intent) { 
    //this will update the UI with message 
    AlarmActivity inst = AlarmActivity.instance(); 
    inst.setAlarmText("Alarm! Wake up! Wake up!"); 

    //this will sound the alarm tone 
    //this will sound the alarm once, if you wish to 
    //raise alarm in loop continuously then use MediaPlayer and setLooping(true) 
    Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); 
    if (alarmUri == null) { 
     alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    } 
    Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri); 
    ringtone.play(); 

    //this will send a notification message 
    ComponentName comp = new ComponentName(context.getPackageName(), 
      AlarmService.class.getName()); 
    startWakefulService(context, (intent.setComponent(comp))); 
    setResultCode(Activity.RESULT_OK); 
} 
} 

AlarmService.java

package com.javapapers.androidalarmclock; 

import android.app.IntentService; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.support.v4.app.NotificationCompat; 
import android.util.Log; 

public class AlarmService extends IntentService { 
private NotificationManager alarmNotificationManager; 

public AlarmService() { 
    super("AlarmService"); 
} 

@Override 
public void onHandleIntent(Intent intent) { 
    sendNotification("Wake Up! Wake Up!"); 
} 

private void sendNotification(String msg) { 
    Log.d("AlarmService", "Preparing to send notification...: " + msg); 
    alarmNotificationManager = (NotificationManager) this 
      .getSystemService(Context.NOTIFICATION_SERVICE); 

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, 
      new Intent(this, AlarmActivity.class), 0); 

    NotificationCompat.Builder alamNotificationBuilder = new NotificationCompat.Builder(
      this).setContentTitle("Alarm").setSmallIcon(R.drawable.ic_launcher) 
      .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) 
      .setContentText(msg); 


    alamNotificationBuilder.setContentIntent(contentIntent); 
    alarmNotificationManager.notify(1, alamNotificationBuilder.build()); 
    Log.d("AlarmService", "Notification sent."); 
} 
} 

Пожалуйста, помогите! Я в отчаянии.

ответ

0

Если вы хотите иметь продолжительность 24hour, вам также необходимо установить день, поэтому вы не можете установить время до текущего времени телефона.

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour()); 
calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentMinute()); 
if(calendar.getTimeInMillis() < System.currentTimeMillis()) 
     calendar.add(Calendar.DAY, 1); 
+0

Спасибо за ваш ответ. Теперь будильник не запускается, только когда я устанавливаю его перед текущим временем работы телефона. Изменить день, чтобы DAY_OF_WEEK, потому что день дает ошибку «DAY не может разрешить или не поле. Будет ли что-то менять? Это только мое предположение, но в вашем дополнительном коде давай мне крышка сегодня и завтра, чтобы быть в состоянии установить сигнализацию? Кроме того, дополнительный вопрос, сигнал тревоги не запускается в точное время, как это исправить, что –

+0

наиболее безопасная ставка будет тогда 'долго = calendar.getTimeInMillis (?); если (время mihanovak1024

+0

Пример: я установил будильник в 7:00 утра. Но когда время телефона достигает 7:00 утра, он все равно не запускается. Думаю, у него есть отсрочка на пару секунд или даже минута. Я знаю, что это всего лишь пара секунд задержки, но я все еще хочу это исправить. –

 Смежные вопросы

  • Нет связанных вопросов^_^