2015-02-03 2 views
-1

То, что я пытаюсь сделать здесь, - это повысить уведомление через определенное время с помощью BroadcastReceiver. С помощью следующего набора кода я тоже могу это достичь. Но я хочу, чтобы приложение закрыто, оно будет уведомлять.Уведомление с BroadcastReciever в определенное время, даже если приложение закрыто

MainActivity.java 

public class MainActivity extends Activity { 

IntentFilter ii; 
TimeReciever tr; 

protected void onCreate(Bundle savedInstanceState) { 
// TODO Auto-generated method stub 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
ii=new IntentFilter("android.intent.action.TIME_TICK"); 
tr=new TimeReciever(); 
registerReceiver(tr, ii); 

} 

} 
    ================================= 

TimeReciever.java 

    public class TimeReciever extends BroadcastReceiver{ 
    int a=0; 
    public void onReceive(Context ctx, Intent in) { 
    System.out.println("On reciever"); 
    a+=a; 
    a++; 
    System.out.println("value of a="+a); 
    if(a==31){ 
    Toast.makeText(ctx,"Reciver Executed ", 40).show(); 
    showNotification(ctx); 
    } 

    } 

private void showNotification(Context context) { 
    NotificationCompat.Builder mBuilder = 
      new NotificationCompat.Builder(context) 
      .setSmallIcon(R.drawable.ic_launcher) 
      .setContentTitle("Log Reminder") 
      .setContentText("It's time to log the Breakfast !"); 

    // Creates an explicit intent for an Activity in your app 
    Intent resultIntent = new Intent(context, MainActivity.class); 


    // started Activity. 
    // This ensures that navigating backward from the Activity leads out of 
    // your application to the Home screen. 
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 
    // Adds the back stack for the Intent (but not the Intent itself) 
    stackBuilder.addParentStack(MainActivity.class); 
    // Adds the Intent that starts the Activity to the top of the stack 
    stackBuilder.addNextIntent(resultIntent); 
    PendingIntent resultPendingIntent = 
      stackBuilder.getPendingIntent(
       0, 
       PendingIntent.FLAG_UPDATE_CURRENT 
      ); 
    mBuilder.setContentIntent(resultPendingIntent); 
    mBuilder.setContentIntent(resultPendingIntent); 
    mBuilder.setDefaults(Notification.DEFAULT_SOUND); 
    NotificationManager mNotificationManager = 
      (NotificationManager)  context.getSystemService(Context.NOTIFICATION_SERVICE); 
    // mId allows you to update the notification later on. 

    mNotificationManager.notify(1, mBuilder.build()); 
    a=0; 

} 

} 

     =============================== 
Manifest.xml 

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

<uses-sdk 
    android:minSdkVersion="16" 
    android:targetSdkVersion="19" /> 


<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 



    <receiver android:name="com.example.notificationbybroadcastre.TimeReciever"> 
     <intent-filter> 
      <action android:name="android.intent.action.TIME_TICK"/> 
     </intent-filter> 
    </receiver> 

<activity 
     android:name="com.example.notificationbybroadcastre.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

</manifest> 
+0

использование alarmmanager для достижения этой цели. попробуйте этот http: //www.skholingua.com/android-basic/advance-topics/alarmmanager – chiru

+0

Вы можете использовать WakefulBroascastReceiver https://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html –

+0

@chiru работает нормально, но как только приложение будет закрыто, оно не будет уведомлено. –

ответ

0
Here The Answer.I have done It Through AlaramManager. 


Main Activity 

=============== 

    public class MainActivity extends Activity 
{ 

private PendingIntent pendingIntent; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 

super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

Intent myIntent = new Intent(MainActivity.this, MyReceiver.class); 

pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent,0); 

AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(System.currentTimeMillis()); 
calendar.set(Calendar.HOUR_OF_DAY, 8); 
calendar.set(Calendar.MINUTE, 30); 

// setRepeating() lets you specify a precise custom interval--in this case, 
// 20 minutes. 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
     1000 * 60 * 480, pendingIntent); 

} //end onCreate 


} 
    ================================================================ 

MyAlarmService.java 

    ================================ 




    public class MyAlarmService extends Service 

    { 
private NotificationManager mManager; 

@Override 
public IBinder onBind(Intent arg0) 
{ 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public void onCreate() 
{ 
    // TODO Auto-generated method stub 
    super.onCreate(); 
} 

@SuppressWarnings("static-access") 
@Override 
public void onStart(Intent intent, int startId) 
{ 

    showNotification(this); 
} 



    private void showNotification(Context context) { 
    NotificationCompat.Builder mBuilder = 
      new NotificationCompat.Builder(context) 
      .setSmallIcon(R.drawable.ic_launcher) 
      .setContentTitle("Meal Log Reminder") 
      .setContentText("It's time to log Your Meal!"); 

    // Creates an explicit intent for an Activity in your app 
    Intent resultIntent = new Intent(context, MainActivity.class); 

    // The stack builder object will contain an artificial back stack for the 
    // started Activity. 
    // This ensures that navigating backward from the Activity leads out of 
    // your application to the Home screen. 
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 
    // Adds the back stack for the Intent (but not the Intent itself) 
    stackBuilder.addParentStack(MainActivity.class); 
    // Adds the Intent that starts the Activity to the top of the stack 
    stackBuilder.addNextIntent(resultIntent); 
    PendingIntent resultPendingIntent = 
      stackBuilder.getPendingIntent(
       0, 
       PendingIntent.FLAG_UPDATE_CURRENT 
      ); 
    mBuilder.setContentIntent(resultPendingIntent); 
    mBuilder.setContentIntent(resultPendingIntent); 
    mBuilder.setDefaults(Notification.DEFAULT_ALL); 

    NotificationManager mNotificationManager = 
      (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    // mId allows you to update the notification later on. 

mNotificationManager.notify(1, mBuilder.build()); 




    } 

@Override 
public void onDestroy() 
{ 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
} 

} 

    =================================================== 

    MyReceiver.java 

========================= 

    public class MyReceiver extends BroadcastReceiver 
    { 

@Override 
public void onReceive(Context context, Intent intent) 
{ 
    Intent service1 = new Intent(context, MyAlarmService.class); 
    context.startService(service1); 

} 

} 
Смежные вопросы