2017-01-24 15 views
0

У меня возникли проблемы с добавлением уведомлений в мое приложение. Например, я хотел бы получать уведомление каждый день в 10 утра. Вот мой код:Менеджер тревог Android не запускает мое событие

MainActivity.java

public class MainActivity extends AppCompatActivity { 
    private PendingIntent alarmIntent; 
private AlarmManager alarmMgr; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    setAlarm(); 
} 

private void setAlarm() { 
    alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(this, AlarmReceiver.class); 
    alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 

    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY, 10); 
    calendar.set(Calendar.MINUTE, 00); 

    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
      1000 * 3, alarmIntent); 
} 

AlarmReceiver.java

public class AlarmReceiver extends BroadcastReceiver { 


@Override 
public void onReceive(Context context, Intent intent) { 

    NotificationCompat.Builder mBuilder = 
      new NotificationCompat.Builder(context) 
        .setSmallIcon(R.drawable.ic_stat_name) 
        .setContentTitle("My notification") 
        .setContentText("Hello World!"); 
    Intent resultIntent = new Intent(context, MainActivity.class); 

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 
    stackBuilder.addParentStack(MainActivity.class); 
    stackBuilder.addNextIntent(resultIntent); 
    PendingIntent resultPendingIntent = 
      stackBuilder.getPendingIntent(
        0, 
        PendingIntent.FLAG_UPDATE_CURRENT 
      ); 
    mBuilder.setContentIntent(resultPendingIntent); 
    NotificationManager mNotificationManager = 
      (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(1, mBuilder.build()); 
} 
} 

AndroidManifest.xml

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

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".taskView.newTaskActivity" /> 
    <activity android:name=".taskView.showTaskDetailsActivity" /> 
    <activity android:name=".taskView.updateTaskActivity" /> 
    <activity android:name=".settings.settingsActivity"></activity> 
    <receiver android:name=".Alarm.AlarmReceiver"></receiver> 
</application> 

Дело в том, что я изменяю время срабатывания триггера через минуту или две (чтобы проверить мой код), абсолютно ничего не происходит. Я попытался создать уведомление в методе setAlarm(), и он сработал, что означает, что проблема не связана с созданием уведомления, но alarmManager не запускается. Буду признателен за любую помощь. Благодарю.

+0

AlarmManager не поддерживает интервалы в 3 секунды, как в данный момент, установлен (1000 * 3). Вы проверили информацию о тревоге в терминале, используя 'adb she dumpsys alarm'? Он должен показать, как устанавливается будильник. Возможно, он установит его на следующий день. –

ответ

1

... Так что я удалил эту строку:

calendar.setTimeInMillis(System.currentTimeMillis()); 

из "setAlarm()" метод и теперь он работает.

Я рад, что это сработало, но немного удивило, что проблема возникла здесь (хотя в ретроспективе я не думаю, что эта линия очень полезна в любом случае).

В любом случае проблема решена, благодаря всем, кто пытался помочь.