2016-04-01 8 views
0

generate Ich werde versuchen, bestimmte Datum statisch geben, aber es kann nicht Benachrichtigung generieren, aber ich wähle Datum von Datum Picker dann werde ich normal arbeiten.Hier ist mein Code.Wie Benachrichtigung zu einem bestimmten Datum ohne Datepicker in Android

MainActivity.java

public class MainActivity extends AppCompatActivity { 


    // This is a handle so that we can call methods on our service 
    private ScheduleClient scheduleClient; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    scheduleClient = new ScheduleClient(this); 
    scheduleClient.doBindService(); 
} 

public void onDateSelectedClickEvent(View v) { 
    // Get the date from our datepicker 
    int day = 1; 
    int month = 4; 
    int year = 2016; 
    // Create a new calendar set to the date chosen 
    // we set the time to midnight (i.e. the first minute of that day) 
    Calendar c = Calendar.getInstance(); 
    c.set(year, month, day); 
    c.set(Calendar.HOUR_OF_DAY, 0); 
    c.set(Calendar.MINUTE, 0); 
    c.set(Calendar.SECOND, 0); 
    // Ask our service to set an alarm for that date, this activity talks to 
    // the client that talks to the service 
    scheduleClient.setAlarmForNotification(c); 
    // Notify the user what they just did 
    Toast.makeText(
      this, 
      "Notification set for: " + day + "/" + (month) + "/" + year, 
      Toast.LENGTH_SHORT).show(); 
} 

@Override 
protected void onStop() { 
    // When our activity is stopped ensure we also stop the connection to the service 
    // this stops us leaking our activity into the system *bad* 
    if(scheduleClient != null) 
     scheduleClient.doUnbindService(); 
    super.onStop(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

}

AlarmTask.java

public class AlarmTask implements Runnable { 

private final Calendar date; 
// The android system alarm manager 
private final AlarmManager am; 
// Your context to retrieve the alarm manager from 
private final Context context; 

public AlarmTask(Context context, Calendar date) { 
    this.context = context; 
    this.am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    this.date = date; 
} 

@Override 
public void run() { 
    // Request to start are service when the alarm date is upon us 
    // We don't start an activity as we just want to pop up a notification into the system bar not a full activity 
    Intent intent = new Intent(context, NotifyService.class); 
    intent.putExtra(NotifyService.INTENT_NOTIFY, true); 
    PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0); 

    // Sets an alarm - note this alarm will be lost if the phone is turned off and on again 
    am.set(AlarmManager.RTC, date.getTimeInMillis(), pendingIntent); 
} 

}

ScheduleService.java

public class ScheduleService extends Service { 

public class ServiceBinder extends Binder { 
    ScheduleService getService() { 
     return ScheduleService.this; 
    } 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.i("ScheduleService", "Received start id " + startId + ": " + intent); 

    // We want this service to continue running until it is explicitly stopped, so return sticky. 
    return START_STICKY; 
} 

@Override 
public IBinder onBind(Intent intent) { 
    return mBinder; 
} 

// This is the object that receives interactions from clients. See 
private final IBinder mBinder = new ServiceBinder(); 

/** 
* Show an alarm for a certain date when the alarm is called it will pop up a notification 
*/ 
public void setAlarm(Calendar c) { 
    // This starts a new thread to set the alarm 
    // You want to push off your tasks onto a new thread to free up the UI to carry on responding 
    new AlarmTask(this, c).run(); 
} 
}

NotifyService.java

public class NotifyService extends Service { 

public class ServiceBinder extends Binder { 
    NotifyService getService() { 
     return NotifyService.this; 
    } 
} 

// Unique id to identify the notification. 
private static final int NOTIFICATION = 123; 
// Name of an intent extra we can use to identify if this service was started to create a notification 
public static final String INTENT_NOTIFY = "com.blundell.tut.service.INTENT_NOTIFY"; 
// The system notification manager 
private NotificationManager mNM; 

@Override 
public void onCreate() { 
    Log.i("NotifyService", "onCreate()"); 
    mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.i("LocalService", "Received start id " + startId + ": " + intent); 

    // If this service was started by out AlarmTask intent then we want to show our notification 
    if(intent.getBooleanExtra(INTENT_NOTIFY, false)) 
     showNotification(); 

    // We don't care if this service is stopped as we have already delivered our notification 
    return START_NOT_STICKY; 
} 

@Override 
public IBinder onBind(Intent intent) { 
    return mBinder; 
} 

// This is the object that receives interactions from clients 
private final IBinder mBinder = new ServiceBinder(); 

/** 
* Creates a notification and shows it in the OS drag-down status bar 
*/ 
private void showNotification() { 
    // This is the 'title' of the notification 
    CharSequence title = "Alarm!!"; 
    // This is the icon to use on the notification 
    int icon = R.drawable.ic_launcher; 
    // This is the scrolling text of the notification 
    CharSequence text = "Your notification time is upon us."; 
    // What time to show on the notification 
    long time = System.currentTimeMillis(); 

    // Notification notification = new Notification(icon, text, time); 


    Notification notification; 
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, SecondActivity.class), 0); 


    NotificationCompat.Builder builder = new NotificationCompat.Builder(
      this); 
    notification = builder.setContentIntent(contentIntent) 
      .setSmallIcon(icon).setTicker(text).setWhen(time) 
      .setAutoCancel(true).setContentTitle(title) 
      .setContentText(text).build(); 
    mNM.notify(NOTIFICATION, notification); 



    // The PendingIntent to launch our activity if the user selects this notification 

    // PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, SecondActivity.class), 0); 

    // Set the info for the views that show in the notification panel. 

    //notification.setLatestEventInfo(this, title, text, contentIntent); 

    // Clear the notification when it is pressed 

    // notification.flags |= Notification.FLAG_AUTO_CANCEL; 

    // Send the notification to the system. 

    //mNM.notify(NOTIFICATION, notification); 

    // Stop the service when we are finished 
    stopSelf(); 
} 

}

ScheduleClient.java

public class ScheduleClient { 


// The hook into our service 
private ScheduleService mBoundService; 
// The context to start the service in 
private Context mContext; 
// A flag if we are connected to the service or not 
private boolean mIsBound; 

public ScheduleClient(Context context) { 
    mContext = context; 
} 

/** 
* Call this to connect your activity to your service 
*/ 
public void doBindService() { 
    // Establish a connection with our service 
    mContext.bindService(new Intent(mContext, ScheduleService.class), mConnection, Context.BIND_AUTO_CREATE); 
    mIsBound = true; 
} 

/** 
* When you attempt to connect to the service, this connection will be called with the result. 
* If we have successfully connected we instantiate our service object so that we can call methods on it. 
*/ 
private ServiceConnection mConnection = new ServiceConnection() { 
    public void onServiceConnected(ComponentName className, IBinder service) { 
     // This is called when the connection with our service has been established, 
     // giving us the service object we can use to interact with our service. 
     mBoundService = ((ScheduleService.ServiceBinder) service).getService(); 
    } 

    public void onServiceDisconnected(ComponentName className) { 
     mBoundService = null; 
    } 
}; 

/** 
* Tell our service to set an alarm for the given date 
* @param c a date to set the notification for 
*/ 
public void setAlarmForNotification(Calendar c){ 
    mBoundService.setAlarm(c); 
} 

/** 
* When you have finished with the service call this method to stop it 
* releasing your connection and resources 
*/ 
public void doUnbindService() { 
    if (mIsBound) { 
     // Detach our existing connection. 
     mContext.unbindService(mConnection); 
     mIsBound = false; 
    } 
} 

}

SecondActivity.java

public class SecondActivity extends Activity { 

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

}

AndroidManifest.xml

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".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> 
    <activity android:name=".SecondActivity" /> 

    <service android:name=".ScheduleService" /> 
    <service android:name=".NotifyService" /> 
</application> 

+2

Fragen suchen Debuggen help ("warum funktioniert dieser Code nicht?") muss das gewünschte Verhalten, ein spezifisches Problem oder einen Fehler und den ** kürzesten Code, der notwendig ist ** enthalten, um ihn in der Frage selbst zu reproduzieren. – F43nd1r

Antwort

0

Mögliche ur-Code zu reduzieren dieses Tutorial Folgen für bestimmte Zeit Benachrichtigung und Wiederholung Zeitnotifikation http://smartandroidians.blogspot.in/2010/04/alarmmanager-and-notification-in.html

+0

danke für die Antwort, aber ich generiere Benachrichtigung zu einem bestimmten Datum ohne Datumsauswahl –

+0

@MalikMohmmadnaimMustakahmed Holen Sie sich das Datum von der Datumsauswahl und setzen Sie es auf c.setDate ("Your Date"); –

Verwandte Themen