Recurrence Rule definition!

  • Antworten:17
  • Bentwortet
Volkan D.
  • Forum-Beiträge: 21

07.09.2013, 23:47:06 via Website

Hallo,

ich möchte über meine APP (an der ich gerade herum bastle ;)) einen Event in meinen Kalender kreieren.
Mein erstes Event soll am ersten Tag des eingegebenen Datums kreiert werden. Das mache ich so: "FREQ=DAILY;COUNT=1".
Mein zweites Event soll drei Tage laufen und am dritten Tag nach der Datumseingabe beginnen. :/
Habe einiges ausprobiert, bekomme es aber einfach nicht hin.

Vielen Dank im voraus....

Antworten
Volkan D.
  • Forum-Beiträge: 21

08.09.2013, 17:40:21 via Website

(ohne zu pushen!!!)

kann mir keiner helfen?

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

08.09.2013, 18:17:32 via App

Was genau ist denn das Problem?

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
Volkan D.
  • Forum-Beiträge: 21

08.09.2013, 18:31:51 via Website

Ich möchte ein Event kreieren! Und zwar soll mein Event in drei Tagen beginnen und drei Tage dauern!

Wie kann ich das Programmieren: "FREQ=DAILY....................."

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

08.09.2013, 18:34:21 via App

Volkan D.
Ich möchte ein Event kreieren! Und zwar soll mein Event in drei Tagen beginnen und drei Tage dauern!

Wie kann ich das Programmieren: "FREQ=DAILY....................."
Aber das ist doch dann gar kein sich wiederholender Termin, sondern ein Termin, der im drei Tagen beginnt und drei Tage lang dauert....

Ich kapiere das Problem nicht....

Herzliche Grüße

Carsten

— geändert am 08.09.2013, 18:35:04

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
Volkan D.
  • Forum-Beiträge: 21

08.09.2013, 18:37:28 via Website

"Aber das ist doch dann gar kein sich wiederholender Termin, sondern ein Termin, der im drei Tagen beginnt und drei Tage lang dauert.... "


Genau. Das reicht mir!
Für die anderen Events habe ich schon eine lösung. Wie bekomme ich es hin das die Events drei Tage später eingetragen werden?

— geändert am 08.09.2013, 20:25:47

Antworten
Andy N.
  • Forum-Beiträge: 3.112

09.09.2013, 12:05:56 via Website

3 Tage auf das Datum addieren ?!?

Antworten
Volkan D.
  • Forum-Beiträge: 21

09.09.2013, 18:11:00 via Website

Andy N.
3 Tage auf das Datum addieren ?!?


wie macht man das genau? habe keine feste datumsangabe.

also: wenn der user auf den button "create event" drückt, öffnet sich automatisch der kalender des users und er muss ein datum selber eingeben.
mein event soll drei tage nach diesem datum erscheinen!

ich weiss nicht was daran so schwer zu verstehen ist. ich weiss nicht wie ich es einfacher beaschreiben soll.


hier mein code:


package com.example.kidsgesundheitssurvey;

import java.util.GregorianCalendar;

import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.CalendarContract;
import android.provider.CalendarContract.Calendars;
import android.provider.CalendarContract.Events;
import android.view.View;
import android.widget.Toast;

import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;


public class MyCalendarActivity extends SlidingFragmentActivity {

//---------CALENDAR--------------------------------------------------------------
public static final String[] EVENT_PROJECTION = new String[] {
Calendars._ID, // 0
Calendars.ACCOUNT_NAME, // 1
Calendars.CALENDAR_DISPLAY_NAME // 2
};

private static final int PROJECTION_ID_INDEX = 0;
private static final int PROJECTION_ACCOUNT_NAME_INDEX = 1;
private static final int PROJECTION_DISPLAY_NAME_INDEX = 2;

//---------MAIN-MAIN-MAIN-MAIN-MAIN-----------------------------------------------
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);



//---------SlideMenu eine Ebene hinter----------------------------
setBehindContentView(R.layout.activity_menu);


//--------Definiert App Icon als Button für SlideMenu--------------
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);

//-------Abstand SlideMenu rechts-----------------------------------
getSlidingMenu().setBehindOffset(100);


}

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


//-----------AnimationSlideMenu------------------------------------
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
toggle();
return true;
}
return super.onOptionsItemSelected(item);

}

//--------------ButtonsSlideMenu---------------------------------
public void activity_main (View view) {
setContentView (R.layout.activity_main);
toggle();
}

public void haupt_untersuchung (View view) {
Intent myIntent = new Intent(MyCalendarActivity.this, Untersuchung.class);
startActivity(myIntent);
toggle();
}


public void haupt_impfung (View view) {
setContentView (R.layout.haupt_impfung);
toggle();
}

public void haupt_immunsystem (View view) {
setContentView (R.layout.haupt_immunsystem);
toggle();
}

public void haupt_ernaehrung (View view) {
setContentView (R.layout.haupt_ernaehrung);
toggle();
}

public void haupt_mykids (View view) {
setContentView (R.layout.haupt_mykids);
toggle();
}


//---------CALENDAR--------------------------------------------------------------
public void onClick(View view) {
// Intent calIntent = new Intent(Intent.ACTION_INSERT);
// calIntent.setData(CalendarContract.Events.CONTENT_URI);
// startActivity(calIntent);
Intent apgar = new Intent(Intent.ACTION_EDIT);
apgar.setType("vnd.android.cursor.item/event");
apgar.putExtra(Events.TITLE, "APGAR & U1-Untersuchung");
apgar.putExtra(Events.EVENT_LOCATION, "Kinderarzt");
apgar.putExtra(Events.DESCRIPTION, "Die APGAR Untersuchung wird in der 1.,5.,un 10. Lebensminute durchgeführt." +
"Die U1-Untersuchung wird in den 2. bis 4. Lebensstunden durchgeführt.");
// Setting dates
GregorianCalendar calDate = new GregorianCalendar();
apgar.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,
calDate.getTimeInMillis());
apgar.putExtra(CalendarContract.EXTRA_EVENT_END_TIME,
calDate.getTimeInMillis());
// Make it a full day event
apgar.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true);
// Make it a recurring Event
apgar.putExtra(Events.RRULE, "FREQ=DAILY;COUNT=1");
// Making it private and shown as busy
apgar.putExtra(Events.ACCESS_LEVEL, Events.ACCESS_PRIVATE);
apgar.putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY);
startActivity(apgar);

Intent uzweiuntersuchung = new Intent(Intent.ACTION_EDIT);
uzweiuntersuchung.setType("vnd.android.cursor.item/event");
uzweiuntersuchung.putExtra(Events.TITLE, "U2-Untersuchung");
uzweiuntersuchung.putExtra(Events.EVENT_LOCATION, "Kinderarzt");
uzweiuntersuchung.putExtra(Events.DESCRIPTION, "Bitte kontaktieren Sie ihren Kinderarzt für die anstehende U-Untersuchung.");
// Setting dates
GregorianCalendar calDate1 = new GregorianCalendar();
uzweiuntersuchung.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,
calDate1.getTimeInMillis());
uzweiuntersuchung.putExtra(CalendarContract.EXTRA_EVENT_END_TIME,
calDate1.getTimeInMillis());
// Make it a full day event
uzweiuntersuchung.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true);
// Make it a recurring Event
uzweiuntersuchung.putExtra(Events.RRULE, "FREQ=???????????????????????????????"); :angry::angry::angry::angry::angry:
// Making it private and shown as busy
uzweiuntersuchung.putExtra(Events.ACCESS_LEVEL, Events.ACCESS_PRIVATE);
uzweiuntersuchung.putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY);
startActivity(uzweiuntersuchung);

}

public void queryCalendar(View view) {
// Run query
Cursor cur = null;
ContentResolver cr = getContentResolver();
Uri uri = Calendars.CONTENT_URI;
String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND ("+ Calendars.ACCOUNT_TYPE + " = ?))";

// Replace this with your own user and account type
String[] selectionArgs = new String[] { "vdked2010@gmail.com", "com.google" };

// Submit the query and get a Cursor object back.
cur = cr.query(uri, EVENT_PROJECTION, selection, selectionArgs, null);
Toast.makeText(this, String.valueOf(cur.getCount()), Toast.LENGTH_LONG).show();
// Use the cursor to step through the returned records
while (cur.moveToNext()) {
long calID = 0;
String displayName = null;
String accountName = null;

// Get the field values
calID = cur.getLong(PROJECTION_ID_INDEX);
displayName = cur.getString(PROJECTION_DISPLAY_NAME_INDEX);
accountName = cur.getString(PROJECTION_ACCOUNT_NAME_INDEX);

// Do something with the values...
Toast.makeText(this, "Calendar " + displayName, Toast.LENGTH_SHORT).show();
}
}

public static String[] getEventProjection() {
return EVENT_PROJECTION;
}

public static int getProjectionIdIndex() {
return PROJECTION_ID_INDEX;
}

public static int getProjectionAccountNameIndex() {
return PROJECTION_ACCOUNT_NAME_INDEX;
}

public static int getProjectionDisplayNameIndex() {
return PROJECTION_DISPLAY_NAME_INDEX;
}
}

so und jetzt soll an der stelle mit den angy smilys der richtige code hin.
ich kann ja als absoluter newbee einiges umsetzen, aber ich kriege es nicht hin das mein event "uzweiuntersuchung" erst drei tage später erscheint.

— geändert am 09.09.2013, 18:18:45

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

09.09.2013, 18:17:42 via App

Lass doch den User den Termin nicht im Kalender, sondern in deiner App eintragen und Deine App erstellt dann den Kalendereintrag.

So kennst Du das Datum, addiert drei Tage dazu und erstellst den zweiten Eintrag.

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
Volkan D.
  • Forum-Beiträge: 21

09.09.2013, 18:21:26 via Website

Carsten Müller
Lass doch den User den Termin nicht im Kalender, sondern in deiner App eintragen und Deine App erstellt dann den Kalendereintrag.

So kennst Du das Datum, addiert drei Tage dazu und erstellst den zweiten Eintrag.

Herzliche Grüße

Carsten


JAAAAAAAAAAAAAA :lol::lol::lol::lol:

wenn du dir meinen code ansiehst wirst du merken das es so ähnlich laufen soll.

wie schreibt man diesen code "DATUM+3TAGE" in eine (Events.RRULE .............................) ?????

das mit dem kalender wollte ich zu beginn machen, aber ein administrator hier aus dem forum hatte mir diese lösung vorgeschlagen.

— geändert am 09.09.2013, 18:26:20

Antworten
Andy N.
  • Forum-Beiträge: 3.112

09.09.2013, 19:51:10 via Website

uzweiuntersuchung.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,
calDate1.getTimeInMillis());

Ich würde hier einfach zu calDate1.getTimeInMillis() 3 Tage drauf zählen...

Antworten
Volkan D.
  • Forum-Beiträge: 21

09.09.2013, 20:48:20 via Website

Andy N.
uzweiuntersuchung.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,
calDate1.getTimeInMillis());

Ich würde hier einfach zu calDate1.getTimeInMillis() 3 Tage drauf zählen...



wie macht man das? ich weiss, klingt sehr amateurhaft. (sorry bin halt newbee!)

Müsste ich die drei Tage in Milisekunden umrechenen?

— geändert am 09.09.2013, 20:51:02

Antworten
Volkan D.
  • Forum-Beiträge: 21

09.09.2013, 21:26:50 via Website

Andy N.
Das ist doch einfache Mathematik. Du hast das Datum in Millisekunden und addierst die Tage in Millisekunden. Wenn Du nicht Tage in Millisekunden umrechnen willst, gibt es diese Klasse:
http://developer.android.com/reference/java/util/concurrent/TimeUnit.html


Sorry Andy,

klar kann ich rechnen. Mein Problem ist es das Ganze Android-Code technisch darzustellen.
Wo müsste ich denn "259200000" eingeben?

Danke für deine Geduld ....

Antworten
Volkan D.
  • Forum-Beiträge: 21

09.09.2013, 21:50:26 via Website

Danke ich habs!!!!!!!!!!!!!!

calDate1.getTimeInMillis()+259200000);

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

10.09.2013, 04:11:51 via App

Volkan D.
Danke ich habs!!!!!!!!!!!!!!

calDate1.getTimeInMillis()+259200000);
Sehr gut... :-)

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
Andy N.
  • Forum-Beiträge: 3.112

10.09.2013, 10:10:59 via Website

Du solltest dennoch Java lernen, wenn Du für Android programmieren willst.
Es gibt ein freies Buch von oreilly oder Galileo. Schau Dir doch wenigstens die ersten Kapitel an.

Dann solltest Du auch auf einen gut lesbaren und wartbaren Code achten.
+259200000 ist nicht wirklich ideal.

Antworten
Volkan D.
  • Forum-Beiträge: 21

10.09.2013, 22:48:24 via Website

Hallo Andy,

glaube mir, wenn ich sage, ich habe beide gelesen.

Seitdem ich mit meiner APP angefangen habe, lese ich immer wieder neue Dinge, die mich voll aus der Bahn werfen. Ich habe immer das Gefühl zu kompliziert zu denken. Deswegen habe ich mich detailliert mit meinem Projekt beschäftigt mit dem Glauben, wenn ich einmal Anfange und mich wirklich nur auf das Projekt konzentriere, besser lernen zu können. Und da ist es manchmal so, das man vor lauter Bäumen den Wald nicht sieht. Und genau hier braucht man manchmal einen kleinen Denkstoß und man kommt einen riesen Schritt weiter. Vielen Dank nochmal dafür!!!!

Antworten