Я написал следующее действие (плюс некоторые ресурсы и т. Д.) Для вставки календаря (не синхронизированного) в эмулятор API уровня 15 (поскольку приложение календаря не имеет возможности добавлять календарь в отличие от приложения на моем телефоне).(API 8) или я его не нашел ...).Макет должен содержать текстовые поля для имени календаря и отображаемого имени, кнопку добавления и текстовое представление статуса, чтобы оставить отзыв после вставки.Убедитесь, что в манифесте установлены разрешения:
<uses-permission android:name="android.permission.WRITE_CALENDAR"/>
<uses-permission android:name="android.permission.READ_CALENDAR"/>
Вот код:
public class CalUtilActivity extends Activity {
private EditText name;
private EditText display;
private TextView status;
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.main);
this.name = (EditText) this.findViewById(R.id.name);
this.display = (EditText) this.findViewById(R.id.displayname);
this.status = (TextView) this.findViewById(R.id.status);
final Button b = (Button) this.findViewById(R.id.add);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
CalUtilActivity.this.addCalendar();
}
});
}
private void addCalendar() {
final String cname = this.name.getText().toString();
final String dname = this.display.getText().toString();
if( cname.length() == 0 || dname.length() == 0 ) {
this.status.setText(this.getResources().getString(R.string.errorNames));
return;
}
this.status.setText("");
final Uri calUri = CalendarContract.Calendars.CONTENT_URI;
final ContentValues v = new ContentValues();
v.put(CalendarContract.Calendars.NAME, cname);
v.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, dname);
v.put(CalendarContract.Calendars.VISIBLE, 1);
final Uri result = this.getContentResolver().insert(calUri, v);
this.status.setText(result.toString());
}
}
Для API 13 и до того, как вы не сможете использовать содержимоепоставщик, вы должны получить доступ к базе данных напрямую.Чтобы добавить календарь, необходимо добавить строку в таблицу «Календари», которая определяется в соответствии со следующим оператором создания
CREATE TABLE Calendars (_id INTEGER PRIMARY KEY,_sync_account TEXT,_sync_account_type TEXT,_sync_id TEXT,_sync_version TEXT,_sync_time TEXT,_sync_local_id INTEGER,_sync_dirty INTEGER,_sync_mark INTEGER,url TEXT,name TEXT,displayName TEXT,hidden INTEGER NOT NULL DEFAULT 0,color INTEGER,access_level INTEGER,selected INTEGER NOT NULL DEFAULT 1,sync_events INTEGER NOT NULL DEFAULT 0,location TEXT,timezone TEXT,ownerAccount TEXT, organizerCanRespond INTEGER NOT NULL DEFAULT 1);
Настройка _id, name и displayName должна работать, если вам не нужно синхронизироватькалендарь.Однако вы не можете проверить на эмуляторе, потому что отсутствует приложение календаря и его база данных.И поставщики устройств могли бы изменить базу данных теоретически, но, поскольку доступно много приложений для календаря, лично я не думаю, что они изменили схему базы данных.