2015-03-31 5 views
1

Я создал функцию setAlarmAt (int hours, int minutes), и я вызываю эту функцию при нажатии кнопки с аргументом текущего часа и текущей минуты с помощью системы. Я также транслирую его с помощью Intent to ReminderReceiver, который будет звонить музыке и вибрировать. Но тревога не просыпаясь в данный момент времени, как если я ставлю его setAlarmAt (10,20), то он должен проснуться 10:20 ... Моя функция здесь ...Тревога не пробуждается вовремя

'

public void setAlarmAt(int hours,int minutes) 
{ 
     Intent reminderintent=new Intent(MainActivity.this,ReminderReceiver.class); 
     final int alarmId = (int) System.currentTimeMillis();//to distinquish different-2 reminders 
     pendingIntent=PendingIntent.getBroadcast(MainActivity.this, alarmId, reminderintent, 0);//if id is same then it will replace existing and also we can't cancel it without proper id 
     AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
      int interval = 1000 * 60 * 20; 

      /* Set the alarm to start at 10:30 AM */ 
      Calendar calendar = Calendar.getInstance(); 
      calendar.setTimeInMillis(System.currentTimeMillis()); 
      calendar.set(Calendar.HOUR_OF_DAY, hours); 
      calendar.set(Calendar.MINUTE, minutes); 
      calendar.set(calendar.SECOND, pendingIntent.FLAG_UPDATE_CURRENT); 

      /* Repeating on every 20 minutes interval */ 
      manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
        1000 * 60 * 20, pendingIntent); 
      showmessage("Reminder Scheduled at:"+hours+":"+minutes); 

    } 

`

и manifest.xml код в

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="example.reminder" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="21" /> 
<uses-permission android:name="android.permission.VIBRATE"/> 
    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     > 
     <activity 
      android:name=".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> 
     <receiver android:name="ReminderReceiver"></receiver> 
    </application> 

</manifest> 

и ReminderReceiver.class файл

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.os.Vibrator; 
import android.widget.Toast; 

public class ReminderReceiver extends BroadcastReceiver{ 
    MediaPlayer mp; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
       mp=MediaPlayer.create(context, R.raw.alarmtone); 
       mp.start(); 
       Vibrator v = (Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE); 
       // Vibrate for 500 milliseconds 
       v.vibrate(500); 
       Toast.makeText(context, "Alarm....", Toast.LENGTH_LONG).show(); 
    } 

} 

'

ответ

0

Я полагаю, что ваш manifest.xml не является правильным. Попробуйте добавить полное имя пакета при регистрации ресивера.

Это должно выглядеть примерно так:

... 
<receiver android:name="com.example.appname.AlarmReciever" > 
     <intent-filter> 
      <action android:name="com.example.android.receivers.AlarmReceiver" /> 
     </intent-filter> 
</receiver> 
... 
+0

спасибо за ответ .... Jaykishan Sewak ответ работал для моего приложения .. –

1

Эй Brijesh Vishwakarma у вас есть проблемы со временем, что вы устанавливаете

замените следующие строки

manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
        1000 * 60 * 20, pendingIntent); 

To 

    manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTime().getTime(), 
         1000 * 60 * 20, pendingIntent); 

and remove following line 

calendar.set(calendar.SECOND, pendingIntent.FLAG_UPDATE_CURRENT); 

Я уверен, что это будет работа для вас, потому что он работает на меня.

+0

Большое спасибо ... Это работает .. удивительный ответ ... Спасибо –

+0

Добро пожаловать @Brijesh Vishwakarma, если бы мой ответ был используйте полный для вас, то, пожалуйста, примите его и +1 его. –

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