Kalender

T

Tom299

Stammgast
122
Hallo,

soweit ich gelesen habe gibts bei Android erst ab 4.03 einen "Standard-Kalender" zum anprogrammieren? Ich stehe aber vor dem Problem, daß ich unsere 1. Programmversion auf 2.3.3 ausliefern muss und eine Kalender-Integration brauch (einfache Termine anlegen und anzeigen).

Hat jemand Erfahrung mit Kalender-Apps anderer Hersteller und kann mir was empfehlen? Muß auch nicht kostenlos sein, aber brauchbar.

Ein Bonus wäre, wenn es die Möglichkeit gäbe, vom Kalender-Event in meine App zu springen. Aber das ist vermutlich nicht machbar, wenn man den Kalender nicht selbst entwickelt hat ...


Gruß,
Tom
 
Android Kalender lesen geht ja noch, aber Android-Kalender beschreiben ist die Hölle! Man muss wissen, dass es keinen Passiven Kalender in dem Sinne gibt, sondern dass die Daten von einem Servicemanager verwaltet werden. Der schreibt seine Daten zwar in sqlite Tabellen, aber das ist alles ziemlich undokumentiert (und je nach Hersteller wohl auch unterscheidlich - siehe unten)

Zum Anlegen konnte man aber zumindest (iirc) schon immer per Intent in Kalenderapps springen.

Ich bin seinerzeit kläglich gescheitert, eine Eingabeapp zu entwickeln. Ich konnte zwar Einträge auf dem Androiden schreiben, aber auf einem Samsung Gerät wurden die Termine nicht gegen den Googlekalender gesynct, auf einem Nexus One klappte es.
Ich weiß bis heute nicht, wieso :cursing:
 
Zuletzt bearbeitet:
Ich hatte folgendes Beispiel probiert -> Working with the Android Calendar - Developer.com

Code:
				String[] projection = new String[] { "_id", "name" };
				Uri calendars = Uri.parse("content://calendar/calendars");
				Cursor managedCursor = managedQuery(calendars, projection, null, null, null);
				Cursor managedCursorActive = managedQuery(calendars, projection,"selected=1", null, null);
				if (managedCursor != null && managedCursor.moveToFirst()) {
					 String calName; 
					 String calId; 
					 int nameColumn = managedCursor.getColumnIndex("name"); 
					 int idColumn = managedCursor.getColumnIndex("_id");
					 do {
					    calName = managedCursor.getString(nameColumn);
					    calId = managedCursor.getString(idColumn);
					    System.out.println("calName: " + calName);
					    System.out.println("calID: " + calId);
					 }
					 while (managedCursor.moveToNext());
				}
				
				String sID = null;
				if (managedCursorActive != null && managedCursorActive.moveToFirst()) {
					 String calName; 
					 String calId; 
					 int nameColumn = managedCursor.getColumnIndex("name"); 
					 int idColumn = managedCursor.getColumnIndex("_id");
					 do {
					    calName = managedCursor.getString(nameColumn);
					    calId = managedCursor.getString(idColumn);
					    System.out.println("calName: " + calName);
					    System.out.println("calID: " + calId);					    
					 } 
					 while (managedCursor.moveToNext());
					 sID = calId;
				}

Beide Cursor sind immer NULL, egal ob mit Samsung Galaxy S2, Galaxy Note oder meinem HTC Sensation.

Das einzige, was funktionieren würde, wäre:
Code:
					Calendar calStart = Calendar.getInstance();
					calStart.set(Calendar.HOUR_OF_DAY, 14);
					calStart.set(Calendar.MINUTE, 0);
					calStart.set(Calendar.SECOND, 0);
					calStart.set(Calendar.MILLISECOND, 0);					
					Calendar calEnd = Calendar.getInstance();
					calEnd.set(Calendar.HOUR_OF_DAY, 15);
					calEnd.set(Calendar.MINUTE, 0);
					calEnd.set(Calendar.SECOND, 0);
					calEnd.set(Calendar.MILLISECOND, 0);					       
					Intent intent = new Intent(Intent.ACTION_EDIT);
					intent.setType("vnd.android.cursor.item/event");
					intent.putExtra("beginTime", calStart.getTimeInMillis());
					intent.putExtra("endTime", calEnd.getTimeInMillis());
					intent.putExtra("title", "Titel");
					intent.putExtra("description", "Beschreibung");
					intent.putExtra("eventLocation", "Location");					
					startActivity(intent);

Allerdings bringt mir das nichts, da man dann jeden Termin von Hand bestätigen / speichern müßte, es soll aber automatisch passieren.

Also gehts wirklich nur ab 4.03?
 
Danke für den Tip mit der geänderten URI, damit klappts :thumbsup:
 
Ist es möglich, beim Kalender den Intent abzufangen, wenn ein Termin zur Detailansicht geöffnet werden soll und anstatt im Kalender dann in meiner APP angezeigt / verarbeitet wird?

Wenn ich den Kalender öffne und z.B. den ersten Termin anklicke, dann seh ich folgendes im LogCat -> Starting: Intent { act=android.intent.action.VIEW dat=content://com.android.calendar/events/1 cmp=com.android.calendar/.EventInfoActivity (has extras) } from pid 31111

Jetzt hab ich mal in meiner App eine Activity angelegt:
Code:
public class CalendarActivity extends Activity {

	public final static String INTENT_CALENDAR_ACTIVITY = "android.intent.action.VIEW";
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		TextView tvCalendar = new TextView(this);
		tvCalendar.setText("Test 1234");
		setContentView(tvCalendar);
	}

}

und im Manifest folgendes hinzugefügt:
Code:
        <activity android:name=".activity.CalendarActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:path="content://com.android.calendar/events"/>
            </intent-filter>
        </activity>

Ich hatte es zuerst mal ohne -> <data android: path="content://com.android.calendar/events"/> versucht, aber das macht scheinbar keinen Unterschied. Leider passiert nichts, wenn ich den Termin im Kalender anklicke, man kommt direkt in die Detailansicht des Kalenders ...

Ist es überhaupt möglich, an das Intent so ranzukommen oder bin ich da auf dem Holzweg? :rolleyes2:


Gruß,
Tom
 

Ähnliche Themen

S
Antworten
17
Aufrufe
550
jogimuc
J
D
Antworten
4
Aufrufe
1.120
jogimuc
J
A
Antworten
1
Aufrufe
735
swa00
swa00
Zurück
Oben Unten