2017-05-03 55 views
-1

我有這個應用程序啓動功能notifiy()在任何設備啓動或應用程序打開時啓動NotificationService 我的問題是我可以如何使這個notifiy()函數每天在特定的時間作出例如在(12:00 AM,上午3:00)我搜索了一會兒,我看到的是工作與AlarmManager,但我不明白如何在我的代碼中使用它Android - 每日通知

MainActivity

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

     startService(new Intent(this,NotificationService.class)); 

BootReceiver

public class BootReceiver extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     context.startService(new Intent(context,NotificationService.class)); 
    } 
} 

NotificationService

public class NotificationService extends Service { 
    private MediaPlayer mediaPlayer; 
    @Nullable 
     @Override 
     public IBinder onBind(Intent intent) { 
      return null; 
     } 

     @Override 
     public void onCreate() { 
      super.onCreate(); 
      notifiy(); 
     } 
     @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     try { 

     }catch (Exception e){ 
      e.printStackTrace(); 
     } 
     return super.onStartCommand(intent, flags, startId); 
    } 
    @Override 
    public void onDestroy() { 
     try { 

     }catch (Exception e){ 
      e.printStackTrace(); 
     } 
     Intent intent=new Intent("com.company.app"); 
     intent.putExtra("yourvalue","torestore"); 
     sendBroadcast(intent); 
    } 
    public void notifiy(){ 
     IntentFilter intentFilter=new IntentFilter(); 
     intentFilter.addAction("RSSPullService"); 
     Intent mIntent=new Intent(Intent.ACTION_VIEW, Uri.parse("")); 
     PendingIntent pendingIntent=PendingIntent.getActivity(getBaseContext(),0,mIntent,Intent.FLAG_ACTIVITY_NEW_TASK); 
     Context context=getApplicationContext(); 
     Notification.Builder builder; 
     builder=new Notification.Builder(context) 
       .setContentTitle(title) 
       .setContentText("") 
       .setContentIntent(pendingIntent) 
       .setDefaults(Notification.DEFAULT_SOUND) 
       .setAutoCancel(true) 
       .setSmallIcon(R.drawable.images); 
     Notification notification=builder.build(); 
     NotificationManager notificationManager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 
     notificationManager.notify(1,notification); 
     mediaPlayer = MediaPlayer.create(this, R.raw.msound); 
     mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      @Override 
      public void onPrepared(MediaPlayer mp) { 
       mediaPlayer.start(); 
      } 
     }); 
    } 
} 

回答

0

如果你想後launching應用設置alarm那麼您可以在您的MainActivity'sonCreate()方法添加以下代碼:

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

    // Schedule Date & time 
    Calendar target = Calendar.getInstance(); 
    target.set(2017, 5, 3, 12, 0, 0); 

    // Intent 
    Intent mIntent = new Intent(getApplicationContext(), AlarmReceiver.class); 
    mIntent.putExtra("MSG_ID", "SOME MESSAGE"); 

    // Pending broadcast intent 
    PendingIntent mPI = PendingIntent.getBroadcast(getApplicationContext(), 0, mIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

    // Alarm manager 
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

    // Set alarm 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, target.getTimeInMillis(), AlarmManager.INTERVAL_DAY, mPI);  

} 

2.如果你想boot完成後設置alarm,那麼你可以添加代碼BootReceiver'sonReceive()方法:

public class BootReceiver extends BroadcastReceiver{ 

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

     // Schedule Date & time 
     Calendar target = Calendar.getInstance(); 
     target.set(2017, 5, 3, 12, 0, 0); 

     // Intent 
     Intent mIntent = new Intent(getApplicationContext(), AlarmReceiver.class); 
     mIntent.putExtra("MSG_ID", "SOME MESSAGE"); 

     // Pending broadcast intent 
     PendingIntent mPI = PendingIntent.getBroadcast(getApplicationContext(), 0, mIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

     // Alarm manager 
     AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

     // Set alarm 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, target.getTimeInMillis(), AlarmManager.INTERVAL_DAY, mPI); 

    } 

} 

這裏是AlarmReceiver類:

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 


public class AlarmReceiver extends BroadcastReceiver { 

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

     context.startService(new Intent(context, NotificationService.class)); 
     Log.d("AlarmReceiver", "Called "); 
    } 
} 

聲明AlarmReceiver類在AndroidManifest.xml

<receiver 
    android:name="YOUR_PACKAGE.AlarmReceiver"> 

</receiver> 
+0

其廣播接收機。檢查我更新的答案 – FAT

+0

當警報觸發AlarmReceiver的onReceive()方法將被調用 – FAT

+0

AlarmReveiver與smy BootReceiver類相同? –