【问题标题】:Android Calender Provider - Event Not Creating/ShowingAndroid 日历提供程序 - 事件未创建/显示
【发布时间】:2020-12-09 06:46:55
【问题描述】:

我编写了一个简单的应用程序来将日历事件插入到给定的 android 日历中。代码不会抛出任何错误,但通风口也没有显示在给定的日历中。我想知道是否有人有任何想法?

我设置了以下权限:

<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />


<permission android:name="android.permission.READ_CALENDAR" />
<permission android:name="android.permission.WRITE_CALENDAR" />
<permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

使用此功能可以很好地找到日历ID,该值被存储并稍后通过另一段代码调用:

 protected void getCalenders()
{
    Cursor cursor;
    cursor = getContentResolver().query(Uri.parse("content://com.android.calendar/calendars"),
            new String[] { "_id", "calendar_displayName" }, null, null, null);

    String calString = "";
    // Get calendars name
   calString = calString + "Calender count " + cursor.getCount();
    cals = new  ArrayList<String>();

    if (cursor.getCount() > 0) {
        cursor.moveToFirst();
        String[] calendarNames = new String[cursor.getCount()];
        // Get calendars id
        int calendarIds[] = new int[cursor.getCount()];
        for (int i = 0; i < cursor.getCount(); i++) {
            cals.add(cursor.getInt(0) + ": " +  cursor.getString(1));
            cursor.moveToNext();
        }
    } else {
       cals.add("0: No calenders found!");
    }

    // Create an ArrayAdapter using the string array and a default spinner layout
    m_adapterForSpinnerWC = new ArrayAdapter<String>(getApplicationContext(), R.layout.spinner_item, cals);
    // Specify the layout to use when the list of choices appears
    m_adapterForSpinnerWC.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    // Apply the adapter to the spinner
    Spinner spn = findViewById(R.id.spCalerders);

    spn.setAdapter(m_adapterForSpinnerWC);

}

事件插入如下:

 public class updateCalender extends  AsyncTask
{
    Context curActivityContext = null;
    public  updateCalender(Context currentActivityContext){
        curActivityContext = currentActivityContext;
    }

    public long pushEventToCalender(int calenderID, String title, String addInfo, String place, int status,
                                           long startDate, long endDate, int reminderTime, boolean needReminder,
                                           boolean needMailService) {
        /***************** Event: note(without alert) *******************/

        ContentResolver cr = getContentResolver();
        Calendar beginTime = Calendar.getInstance();


        ContentValues values = new ContentValues();
        values.put(CalendarContract.Events.DTSTART, startDate);
        values.put(CalendarContract.Events.DTEND, endDate);
        values.put(CalendarContract.Events.TITLE, title);
        values.put(CalendarContract.Events.DESCRIPTION,addInfo);
        values.put(CalendarContract.Events.CALENDAR_ID, calenderID);
        values.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());
        values.put(CalendarContract.Events.EVENT_LOCATION, place);
        Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values);
        long eventID = Long.parseLong(uri.getLastPathSegment());


        // Force a sync
        Bundle extras = new Bundle();
        extras.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
        extras.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
        AccountManager am = AccountManager.get(getApplicationContext());
        Account[] acc = am.getAccountsByType("com.google");
        Account account = null;
        if (acc.length>0) {
            account=acc[0];
            ContentResolver.requestSync(account, "com.android.calendar", extras);
        }

        return eventID;

    }

    @Override
    protected  Object doInBackground(Object[] objects)
    {
        try {
            int personnel_id = -100;
            SharedPreferences settings = getSharedPreferences("UserInfo", 0);
            if (settings.contains("User_ID")) {
                personnel_id = Integer.parseInt(settings.getString("User_ID", "").toString());
            }
            if (personnel_id != -100 && Integer.parseInt(settings.getString("Calender ID", "0")) > 0) {
                SOAPClass soapc = new SOAPClass(getApplicationContext());
                SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
                ArrayList eventsList = soapc.getDairyEntries(personnel_id);
                if (eventsList.size() > 2) {
                    long eventID = 0;
                    for (int i = 0; i < eventsList.size(); i=i+6)
                    {

                            Date sdate = format.parse(eventsList.get(i).toString().replace("anyType{}",""));
                            Date edate = format.parse(eventsList.get(i + 1).toString().replace("anyType{}",""));

                        Calendar beginTime = Calendar.getInstance();
                        beginTime.set(sdate.getYear(), sdate.getMonth(), sdate.getDay(), sdate.getHours(), sdate.getMinutes());
                        long smillies = beginTime.getTimeInMillis();
                        Calendar endTime = Calendar.getInstance();
                        endTime.set(edate.getYear(), edate.getMonth(), edate.getDay(), edate.getHours(), edate.getMinutes());
                        long emillies = endTime.getTimeInMillis();


                       eventID = pushEventToCalender(Integer.parseInt(settings.getString("Calender ID", "0")), eventsList.get(i + 2).toString().replace("anyType{}",""), eventsList.get(i + 3).toString().replace("anyType{}",""), eventsList.get(i + 4).toString().replace("anyType{}",""), 0, smillies, emillies, 30, Boolean.FALSE,Boolean.FALSE);


                       // eventStartTimes[i] = eventsList.get(i).toString();
                       // eventEndTimes[i] = eventsList.get(i + 1).toString();
                       // eventLines[i] = eventsList.get(i + 2).toString();
                       // eventDescriptions[i] = eventsList.get(i + 3).toString();
                       // eventLocations[i] = eventsList.get(i + 4).toString();
                       // eventImage[i] = R.mipmap.ic_launcher;// "@mipmap/ic_launcher";
                    }


                    Uri shown = ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, eventID);

                    Intent intent = new Intent(Intent.ACTION_VIEW).setData(shown);
                    startActivity(intent);

                    makeToastnUIThread( "Finished Importing Events To Calender " +settings.getString("Calender ID", "0"));
                }
                else {
                    makeToastnUIThread( "No Events To Add.");
                }



            }else{
                makeToastnUIThread( "No Calender Selected In Settings.");
            }
        }
        catch (Exception e){
            makeToastnUIThread(  e.getMessage());
        }

        return  null;
    }
}

此外,当它尝试打开最后插入的事件时,它会说找不到条目。有什么想法吗?

【问题讨论】:

    标签: java android events calendar provider


    【解决方案1】:

    似乎我在看了一些 varabe 之后找到了答案。我的日期设置不正确。

    应该是这样的:

     Calendar beginTime = Calendar.getInstance();
                            beginTime.set(sdate.getYear() + 1900, sdate.getMonth(), sdate.getDate(), sdate.getHours(), sdate.getMinutes());
    
                            long smillies = beginTime.getTimeInMillis();
                            Calendar endTime = Calendar.getInstance();
                            endTime.set(edate.getYear() + 1900, edate.getMonth(), edate.getDate(), edate.getHours(), edate.getMinutes());
                            long emillies = endTime.getTimeInMillis();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多