6

Sviluppo un'applicazione Android che richiede all'applicazione di calendario di modificare gli eventi.: il risultatoCodice di onActivityResult è sempre 0

Io uso startActivityForResult() per aprire il calendario. Dopo aver modificato e salvato l'evento, resultCode è sempre 0 all'interno di onActivityResult().

Ho visto molte risposte relative a "onActivityResult resultCode restituisce sempre 0". Questo a causa del mancato utilizzo di setResult() e finish() nella 2a attività.

Ma nel mio caso, sto chiamando l'applicazione calendario Android (non un'attività personalizzata).

Il codice per richiedere il calendario Android:

Intent intent = new Intent(Intent.ACTION_EDIT); 
intent.setType("vnd.android.cursor.item/event"); 
//set the event details 
startActivityForResult(intent,1); 

per innescare quando calendario viene salvato o annullato

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    //resultCode always returns 0. 
    switch(requestCode) { 
    case 1: 
     if (resultCode == Activity.RESULT_OK) 
     { 

     } 
    } 
} 

Se faccio clic su "Salva" o "Annulla" in app calendario, il resultCode restituisce sempre 0.

Inoltre, ho bisogno di recuperare i dati dall'intento del calendario. Ma l'intento "dati" in onActivityResult restituisce anche null.

Qualcuno potrebbe spiegare perché succede? C'è un modo per sapere se l'utente fa clic su "Salva" o "Annulla"?

+1

è il calendario progettato per restituire un valore? in caso contrario restituirà sempre uno 0. – TomTsagk

+0

Non penso che Android (Google) Calendar restituirà alcun risultato, almeno non è specificato in [Calendar Provider] (http://developer.android.com/guide/topics/ fornitori/calendario-provider.html). –

+0

Se è così, il provider di calendario Android fornisce metodi per sapere se il clic dell'utente salva il calendario o Annulla? – Sam35

risposta

0

È possibile verificare la presenza di lastId di evento del calendario appena aggiunto, se non è cambiato, allora il risultato è in realtà ANNULLATO, altrimenti è OK

val projection = arrayOf(CalendarContract.Calendars._ID) 
cursor = contentResolver.query(CalendarContract.Events.CONTENT_URI, projection, null, null, null) 
if (cursor.moveToLast()) { 
    val lastId = cursor.getLong(0) 
    // compare lastId with a previous one, if not changed - result is CANCELLED 
} 
Problemi correlati