2017-01-18 18 views
0

私の警報は全く発射されていません。Alaramが発砲しない

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、あなたはsetAndAllowWhileIdleを(使用することができます上記の場合
+1

マニフェストに受信機を追加しましたか? –

+0

これは何を返しますか? 'intent.getParcelableExtra(NOTIFICATION);' –

+0

@DarshanSoniはい – Dim

答えて

2

):

だからあなたのコードは、に変更します。

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

ああ私の神!それは実際にそれを解決した....しかし、私は理由を理解できない。これは、アイドル状態がないときに機能するはずです。 あなたの助けにThanx @AxelH! – Dim

関連する問題