Autore Topic: Inserire tanti eventi nel calendario!  (Letto 2706 volte)

Offline zak84

  • Utente normale
  • ***
  • Post: 165
  • Respect: +2
    • Mostra profilo
Inserire tanti eventi nel calendario!
« il: 28 Agosto 2012, 14:30:57 CEST »
0
Ragazzi ho una lista di eventi, esempio:
devo mangiare, 28/08/2012, allarme alle 10.00
devo mangiare, 29/08/2012, allarme alle 10.00
devo mangiare, 30/08/2012, allarme alle 10.00
devo mangiare, 31/08/2012, allarme alle 10.00
devo inserirli tutti a calendario.
ora uso questo codice:
Codice: [Seleziona]
                        Calendar cal = Calendar.getInstance();             
                        Intent intent = new Intent(Intent.ACTION_EDIT);
                        intent.setType("vnd.android.cursor.item/event");
                        intent.putExtra("beginTime", cal.getTimeInMillis());
                        intent.putExtra("allDay", true);
                        intent.putExtra("rrule", "FREQ=YEARLY");
                        intent.putExtra("endTime", cal.getTimeInMillis()+60*60*1000);
                        intent.putExtra("title", "A Test Event from android app");
                        startActivity(intent);
ma così, ogni evento scaturisce una intent da accettare. inoltre, non riesco ad impostare l'ora per l'allarme. come posso fare?

jfrankie

  • Visitatore
Re:Inserire tanti eventi nel calendario!
« Risposta #1 il: 30 Agosto 2012, 11:27:25 CEST »
0
Se vuoi fare in modo che l'inserimento avvenga automaticamente devi utilizzare il contet provider per il calendar (dipendende dalla versione di android che usi ICS o pre-ICS).

Creare un ContentValues (che per ICS) è del tipo

Codice: [Seleziona]
        ContentValues cv = new ContentValues();
                cv.put(Events.CALENDAR_ID, evt.getIdCalendar());
                cv.put(Events.TITLE, evt.getTitle());
                cv.put(Events.DESCRIPTION, evt.getDescr());
                cv.put(Events.EVENT_LOCATION, evt.getLocation());
                cv.put(Events.DTSTART, evt.getStartTime());
                cv.put(Events.DTEND, evt.getEndTime());
               
                Calendar cal = Calendar.getInstance();
                TimeZone tz = cal.getTimeZone();
               
                cv.put(Events.EVENT_TIMEZONE, tz.getDisplayName());

e poi

Codice: [Seleziona]
ctx.getContentResolver().insert(baseuri/events, CalendarEvent.toContentValues(evt));
dove la base URI dipende se usi ICS o versioni precedenti a ICS.

Offline zak84

  • Utente normale
  • ***
  • Post: 165
  • Respect: +2
    • Mostra profilo
Re:Inserire tanti eventi nel calendario!
« Risposta #2 il: 30 Agosto 2012, 11:30:26 CEST »
0
si, ho fatto così infatti. ora devo capire però se l'utente ha un calendario installato, perché non è che posso usare a prescindere cv.put("calendar_id", 1);

jfrankie

  • Visitatore
Re:Inserire tanti eventi nel calendario!
« Risposta #3 il: 30 Agosto 2012, 12:54:02 CEST »
0
Per avere la lista dei calendari

Codice: [Seleziona]
String[] fields = new String[] {"_id", "name"};

Cursor c = ctx.getContentResolver().query(calUri, fields,
                              null, null, null);

e poi scorri il cursore

Offline zak84

  • Utente normale
  • ***
  • Post: 165
  • Respect: +2
    • Mostra profilo
Re:Inserire tanti eventi nel calendario!
« Risposta #4 il: 30 Agosto 2012, 14:04:19 CEST »
0
ma così posso anche sapere quale sta utilizzando/ha?

jfrankie

  • Visitatore
Re:Inserire tanti eventi nel calendario!
« Risposta #5 il: 30 Agosto 2012, 14:20:15 CEST »
0
Così puoi sapere la lista dei calendari che l'utente ha sul telefono.
Puoi mostrare il risultato come una lista da cui selezionare un calendario.

Se vuoi vedere un app che fa questa cosa vai al link https://play.google.com/store/apps/details?id=it.trubblo.nevermiss&feature=search_result#?t=W251bGwsMSwxLDEsIml0LnRydWJibG8ubmV2ZXJtaXNzIl0. E' una app che ho sviluppato io e se vai su preferenze trovi la possibilità di selezionare la lista
dei calendari.

Ciao

Offline Luca12345

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S3
Re:Inserire tanti eventi nel calendario!
« Risposta #6 il: 21 Dicembre 2012, 12:27:31 CET »
0
Ragazzi scusate la mia ignoranza, ma non riesco proprio ad aggiungere un evento nel calendario. Anche io ho provato il codice scritto sopra, ma forse sbaglio qualcosa perchè mi crasha l'app. Potete aiutarmi?  :-(

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Inserire tanti eventi nel calendario!
« Risposta #7 il: 21 Dicembre 2012, 12:33:04 CET »
0
Se non posti il logcat del crash no.
Non hai letto che è scritto a caratteri cubitali quando posti un nuovo messaggio? :)

Offline Luca12345

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S3
Re:Inserire tanti eventi nel calendario!
« Risposta #8 il: 21 Dicembre 2012, 12:41:26 CET »
0
Sorry :(     

Allora partendo dall'inizio. Io sto utilizzando questo codice per inserire l'evento.

Codice (Java): [Seleziona]
Calendar cal = Calendar.getInstance();
ContentValues values = new ContentValues();
values.put("calendar_id", 1);
values.put("title", "Title");
values.put("allDay", 0);
values.put("dtstart", cal.getTimeInMillis() + 11*60*1000); // event starts at 11 minutes from now
values.put("dtend", cal.getTimeInMillis()+60*60*1000); // ends 60 minutes from now
values.put("description", "Reminder description");
values.put("visibility", 0);
values.put("hasAlarm", 1);
Uri event = MainActivity.this.getContentResolver().insert(Uri.parse("content://com.android.calendar/events"), values);


Codice: [Seleziona]
12-21 12:40:26.015: E/AndroidRuntime(2812): FATAL EXCEPTION: main
12-21 12:40:26.015: E/AndroidRuntime(2812): java.lang.IllegalArgumentException: Event values must include an eventTimezone
12-21 12:40:26.015: E/AndroidRuntime(2812):         at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:170)
12-21 12:40:26.015: E/AndroidRuntime(2812):         at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
12-21 12:40:26.015: E/AndroidRuntime(2812):         at android.content.ContentProviderProxy.insert(ContentProviderNative.java:420)
12-21 12:40:26.015: E/AndroidRuntime(2812):         at android.content.ContentResolver.insert(ContentResolver.java:866)
12-21 12:40:26.015: E/AndroidRuntime(2812):         at com.example.insertevent.MainActivity$1.onClick(MainActivity.java:61)
12-21 12:40:26.015: E/AndroidRuntime(2812):         at android.view.View.performClick(View.java:4211)
12-21 12:40:26.015: E/AndroidRuntime(2812):         at android.view.View$PerformClick.run(View.java:17267)
12-21 12:40:26.015: E/AndroidRuntime(2812):         at android.os.Handler.handleCallback(Handler.java:615)
12-21 12:40:26.015: E/AndroidRuntime(2812):         at android.os.Handler.dispatchMessage(Handler.java:92)
12-21 12:40:26.015: E/AndroidRuntime(2812):         at android.os.Looper.loop(Looper.java:137)

Offline Luca12345

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S3
Re:Inserire tanti eventi nel calendario!
« Risposta #9 il: 21 Dicembre 2012, 15:13:06 CET »
0
Non puoi aiutarmi?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Inserire tanti eventi nel calendario!
« Risposta #10 il: 21 Dicembre 2012, 16:17:13 CET »
0


Non puoi aiutarmi?

Se hai pazienza si. Non serve uppare dopo 1 ora che hai postato.

Comunque è scritto nell'eccezione il problema, basta solo leggerlo e cercare su internet le soluzioni:

Codice: [Seleziona]
java.lang.IllegalArgumentException: Event values must include an eventTimezone
dovresti risolvere aggiungendo:

Codice (Java): [Seleziona]
event.put("eventTimezone", Time.getCurrentTimezone());

Offline Luca12345

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S3
Re:Inserire tanti eventi nel calendario!
« Risposta #11 il: 21 Dicembre 2012, 16:28:56 CET »
0
Riscusami..comunque ho richiesto perchè ho pensato sapessi già come fare e perchè subito hai risposto. Si ovvio che l'errore è scritto li, ho anche cercato soluzione, ma tutte, in un modo o nell'altro portano a crash continui con errori di varia natura. Esempio, ora non da piu l'errore precedente ma un altro, ovvero:
Codice: [Seleziona]
12-21 16:22:15.905: E/AndroidRuntime(320): java.lang.IllegalArgumentException: column 'visibility' is invalid
12-21 16:22:15.905: E/AndroidRuntime(320):         at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:170)
12-21 16:22:15.905: E/AndroidRuntime(320):         at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
12-21 16:22:15.905: E/AndroidRuntime(320):         at android.content.ContentProviderProxy.insert(ContentProviderNative.java:420)
12-21 16:22:15.905: E/AndroidRuntime(320):         at android.content.ContentResolver.insert(ContentResolver.java:866)
12-21 16:22:15.905: E/AndroidRuntime(320):         at com.example.insertevent.MainActivity$1.onClick(MainActivity.java:63)
12-21 16:22:15.905: E/AndroidRuntime(320):         at android.view.View.performClick(View.java:4211)
12-21 16:22:15.905: E/AndroidRuntime(320):         at android.view.View$PerformClick.run(View.java:17267)
12-21 16:22:15.905: E/AndroidRuntime(320):         at android.os.Handler.handleCallback(Handler.java:615)
12-21 16:22:15.905: E/AndroidRuntime(320):         at android.os.Handler.dispatchMessage(Handler.java:92)
12-21 16:22:15.905: E/AndroidRuntime(320):         at android.os.Looper.loop(Looper.java:137)
12-21 16:22:15.905: E/AndroidRuntime(320):         at android.app.ActivityThread.main(ActivityThread.java:4898)
12-21 16:22:15.905: E/AndroidRuntime(320):         at java.lang.reflect.Method.invokeNative(Native Method)
12-21 16:22:15.905: E/AndroidRuntime(320):         at java.lang.reflect.Method.invoke(Method.java:511)
12-21 16:22:15.905: E/AndroidRuntime(320):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
12-21 16:22:15.905: E/AndroidRuntime(320):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
12-21 16:22:15.905: E/AndroidRuntime(320):         at dalvik.system.NativeStart.main(Native Method)