私はカレンダー(同期されていない)を挿入するために、 APIレベル15エミュレータ(カレンダーアプリには、携帯電話(API 8)のアプリとは違うカレンダーを追加する機能がないため、見つからなかったため)...)。レイアウトには、カレンダーの名前と表示名のテキストフィールド、追加ボタン、挿入後にフィードバックを与えるステータステキストビューが必要です。 あなたがマニフェストに設定された権限を持っていることを確認してください:
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について、あなたはコンテンツプロバイダを使用することはできません前に、あなたがする必要があります。ここでは
<uses-permission android:name="android.permission.WRITE_CALENDAR"/>
<uses-permission android:name="android.permission.READ_CALENDAR"/>
コードありありデータベースに直接アクセスします。カレンダーを追加するには、_id、名前を設定作成するには、次の文
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);
に従って定義されたテーブルのカレンダー、に行を追加しなければならない、とカレンダーを同期する必要がない場合DisplayNameが動作するはずです。ただし、カレンダーアプリとそのデータベースがないため、エミュレーターでテストすることはできません。また、デバイスベンダーは理論的にデータベースを変更した可能性がありますが、カレンダーアプリケーションが多数使用されているため、私は個人的にはデータベーススキーマを変更していないと思います。
ICSにGoogleカレンダー上でそれを作成することです:あなたはcom.android.calendar権限の同期アダプタを実装し、CalendarContractの行を作成する必要があります.Calendarここで、ACCOUNT_NAMEとACCOUNT_TYPEをあなたの名前と値に設定します。 2の機能3とそれ以前のバージョンは未公開ですが、同じことについては*動作していますが、それよりも後方の相互運用性はそれほど厳しくなく、テストに時間がかかります。 – Jens