2017-04-21 5 views
0

푸시 알림을 사용하여 사용자에게 everymorning을 생각 나게하는 앱을 만들려고합니다.매일 아침에 사용자를 떠올리게하는 안드로이드 앱

저는 AlarmManager, BroadcastReceiver 및 IntentService를 사용하고 있습니다.

아래의 코드에서는 AlarmManager를 60 초 간격으로 테스트합니다.

문제 : 내 응용 프로그램을 종료 할 때까지 아무런 문제가 없으며 더 이상 경보가 발사되지 않습니다.

다음에 어떤 아이디어가 있습니까?

매니페스트 :

<service 
    android:name=".IntentMentor" 
    android:exported="false" > 
</service> 

<receiver android:name=".AlertReceiver" 
    android:process=":remote"> 
</receiver> 

MainActivity :

Intent intent = new Intent(getApplicationContext(), AlertReceiver.class); 

final PendingIntent pIntent = PendingIntent.getBroadcast(this, 0, 
    intent, PendingIntent.FLAG_UPDATE_CURRENT); 

long firstMillis = System.currentTimeMillis(); 
AlarmManager alarm = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE); 
// 1s is only for testing 
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, firstMillis, 1000*60, pIntent); 

광기 :

public class AlertReceiver extends BroadcastReceiver { 

    private static final String TAG = "MyReceiver"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(TAG, "MyReceiver on receive"); 
     Intent i = new Intent(context, IntentMentor.class); 
     context.startService(i); 
    } 
} 

IntentService :

public class IntentMentor extends IntentService { 

    NotificationManager notificationManager; 
    int notifID = 33; 

    private static final String TAG = "MonitorService"; 

    public IntentMentor() { 
     super(TAG); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     Log.d("TAG", "Service method was fired."); 
     pushNotification(); 
    } 

    public void pushNotification(){ 
     NotificationCompat.Builder notificBuilder = new NotificationCompat.Builder(this); 
     notificBuilder.setContentTitle("test"); 
     notificBuilder.setContentText("this is text"); 
     notificBuilder.setTicker("this is Ticker?"); 
     notificBuilder.setSmallIcon(R.drawable.ic_info_black_24dp); 
     notificBuilder.setDefaults(NotificationCompat.DEFAULT_SOUND); 

     Intent intent = new Intent(this, Card.class); 

     TaskStackBuilder tStackBuilder = TaskStackBuilder.create(this); 
     tStackBuilder.addParentStack(Card.class); 
     tStackBuilder.addNextIntent(intent); 

     PendingIntent pendingIntent = tStackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT); 

     notificBuilder.setContentIntent(pendingIntent); 

     notificationManager = (NotificationManager) getSystemService((Context.NOTIFICATION_SERVICE)); 
     notificationManager.notify(notifID, notificBuilder.build()); 
    } 
} 
+0

[도움을 받으실 수 있습니다] (http://stackoverflow.com/questions/35121191/i-want-show-notification-at-800-am-everyday/35127736#35127736) –

+0

해결책을 찾으려했는데 귀하의 링크 뒤에. 고마워.하지만 난 아직도 같은 문제가있어. 앱이 열려 있지 않으면 알람이 실행되지 않습니다. – Wiltson

+0

WAKE_LOCK –

답변

0

시험 주 활동 코드를 업데이트합니다. 자 이제 해봐. 나에게 잘 먹힌다.

Intent intent = new Intent(getApplicationContext(), AlertReceiver.class); 

final PendingIntent pIntent = PendingIntent.getBroadcast(this, 0, 
     intent, PendingIntent.FLAG_UPDATE_CURRENT); 

long firstMillis = System.currentTimeMillis(); 
AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 

if (android.os.Build.VERSION.SDK_INT >= 23) 
{ 
    alarm.setAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
      firstMillis, 1000*60, pIntent); 
} 
else if (android.os.Build.VERSION.SDK_INT >= 19 
     && android.os.Build.VERSION.SDK_INT < 23) 
{ 
    alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, 
      firstMillis, 1000*60, pIntent); 
} 
else 
{ 
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, 
      firstMillis, 1000*60, pIntent); 
} 
+0

앱이 종료 된 경우 알람 관리자가 작동합니까? – Dejvid

+0

예이 작품은 나를 위해 작동합니다. –

+0

어떤 이유로 알람.setAndAllowWhileIdle (AlarmManager.ELAPSED_REALTIME_WAKEUP, firstMillis, 1000 * 60, pIntent); 나에게 효과가 없을거야. setAndAllowWhileIdle에는 매개 변수가 3 개만 필요합니까? 나는 방금 잃어 버렸어. – Wiltson

0

마지막으로, 10 시간 동안 시험하고, 실패하고, 시험하고, 실패했습니다. 나는 답을 잃었습니다.

Protected Apps in Huawei Phones

그래서 당신이 보는대로, 문제는 내 화웨이 P8의 전화였다. 앱이 보호 된 앱 목록에 있어야합니다. 자, 제가 테스트 한 솔루션의 커플이 잘 작동하지 않도록하십시오.

모두 도움을 주셔서 감사합니다. Andy와 다른 솔루션이 잘 동작한다고 생각합니다. 그러나 Huawei 전화는이 특별한 문제가 있습니다.