2017-01-18 3 views
0

내 경보가 전혀 발사되지 않습니다.Alaram not firing

MainActivity :

final Context context = this; 

    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY, 13); 
    calendar.set(Calendar.MINUTE, 30); 

    Intent intent = new Intent(context, AlarmReceiver.class); 
    PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 

    AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
    alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY, alarmIntent); 

AlarmReceiver :

public class AlarmReceiver extends BroadcastReceiver { 

    public static String NOTIFICATION_ID = "notification-id"; 
    public static String NOTIFICATION = "notification"; 

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

     NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 

     Notification notification = intent.getParcelableExtra(NOTIFICATION); 
     int id = intent.getIntExtra(NOTIFICATION_ID, 0); 
     notificationManager.notify(id, notification); 

    } 
} 

매니페스트 :

<uses-permission android:name="android.permission.WAKE_LOCK"/> 
    <uses-permission android:name="android.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"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <receiver android:name=".AlarmReceiver" /> 
    </application> 

</manifest> 

사용 : compileSdkVersion 25의 minSdkVersion 23 targetSdkVersion을 25

API (23)의 경우와 위
+1

수신자를 매니페스트에 추가 했습니까? –

+0

이것은 무엇을 반환합니까? 'intent.getParcelableExtra (NOTIFICATION);' –

+0

@DarshanSoni 예 – Dim

답변

2

는) setAndAllowWhileIdle를 (사용할 수 있습니다

그래서 당신의 코드를 변경 :

if (Build.VERSION.SDK_INT >= 23) 
     alarmManager. setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent); 
else if (Build.VERSION.SDK_INT >= 19) 
    alarmManager.setExact(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent); 
else if (Build.VERSION.SDK_INT >= 16) 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), 1 * 1000 * 60 * 60 * 24, pendingIntent); 

하고 작업인지 여부를 확인합니다.

+0

나는 그것을 점검 할 것이지만, 유휴 상태가 아닌 전화 테스트 – Dim

+0

젠장, 대규모 응용 프로그램에 경보를 설정하는 악몽이되고있다 ... – AxelH

+0

오 마이 갓 !!! 사실은 그것을 해결했습니다 ....하지만 나는 이유를 이해할 수 없습니다. 유휴 상태가 아닐 때 작동합니다. 너의 도움을 위해고맙습니다 @AxelH! – Dim