Created
January 29, 2024 17:13
-
-
Save sunmeat/2bd1111b1818c16a23289a8b5fd1ba34 to your computer and use it in GitHub Desktop.
android calendar example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
MainActivity.java: | |
package com.sunmeat.calendar; | |
import android.Manifest; | |
import android.content.ContentResolver; | |
import android.content.ContentValues; | |
import android.content.Context; | |
import android.content.pm.PackageManager; | |
import android.os.Build; | |
import android.os.Bundle; | |
import android.provider.CalendarContract; | |
import android.widget.Button; | |
import android.widget.DatePicker; | |
import android.widget.Toast; | |
import androidx.annotation.NonNull; | |
import androidx.annotation.RequiresApi; | |
import androidx.appcompat.app.AppCompatActivity; | |
import androidx.core.app.ActivityCompat; | |
import androidx.core.content.ContextCompat; | |
import java.util.Calendar; | |
import java.util.TimeZone; | |
public class MainActivity extends AppCompatActivity { | |
private static final int PERMISSION_REQUEST_WRITE_CALENDAR = 1; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
Button addBirthdayButton = findViewById(R.id.addBirthdayButton); | |
DatePicker datePicker = findViewById(R.id.datePicker); | |
addBirthdayButton.setOnClickListener(view -> requestCalendarPermissionAndAddEvent(datePicker)); | |
} | |
@RequiresApi(api = Build.VERSION_CODES.N) | |
private void requestCalendarPermissionAndAddEvent(DatePicker datePicker) { | |
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_CALENDAR) | |
!= PackageManager.PERMISSION_GRANTED) { | |
ActivityCompat.requestPermissions(this, | |
new String[]{Manifest.permission.WRITE_CALENDAR}, | |
PERMISSION_REQUEST_WRITE_CALENDAR); | |
} else { | |
addBirthdayToCalendar(datePicker); | |
} | |
} | |
@RequiresApi(api = Build.VERSION_CODES.N) | |
private void addBirthdayToCalendar(DatePicker datePicker) { | |
int year = datePicker.getYear(); | |
int month = datePicker.getMonth(); | |
int day = datePicker.getDayOfMonth(); | |
Calendar birthdayDate = Calendar.getInstance(); | |
birthdayDate.set(year, month, day); | |
long startMillis = birthdayDate.getTimeInMillis(); | |
long endMillis = startMillis + 60 * 60 * 1000; // 1 hour | |
ContentResolver contentResolver = getContentResolver(); | |
ContentValues values = new ContentValues(); | |
values.put(CalendarContract.Events.DTSTART, startMillis); | |
values.put(CalendarContract.Events.DTEND, endMillis); | |
values.put(CalendarContract.Events.TITLE, "День Рождения"); | |
values.put(CalendarContract.Events.DESCRIPTION, "Событие: День Рождения"); | |
values.put(CalendarContract.Events.CALENDAR_ID, 1); // ID календаря, чаще всего 1 | |
values.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID()); | |
getContentResolver().insert(CalendarContract.Events.CONTENT_URI, values); | |
Toast.makeText(this, "Событие Дня Рождения добавлено в календарь", Toast.LENGTH_SHORT).show(); | |
} | |
@Override | |
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { | |
if (requestCode == PERMISSION_REQUEST_WRITE_CALENDAR) { | |
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { | |
addBirthdayToCalendar(findViewById(R.id.datePicker)); | |
} else { | |
Toast.makeText(this, "Разрешение на запись в календарь отклонено", Toast.LENGTH_SHORT).show(); | |
} | |
} | |
} | |
} | |
/////////////////////////////////////// выбор даты + открытие стандартного приложения | |
/* import android.content.Intent; | |
import android.os.Bundle; | |
import android.provider.CalendarContract; | |
import android.view.View; | |
import android.widget.Button; | |
import android.widget.DatePicker; | |
import androidx.appcompat.app.AppCompatActivity; | |
import java.util.Calendar; | |
public class MainActivity extends AppCompatActivity { | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
Button addBirthdayButton = findViewById(R.id.addBirthdayButton); | |
DatePicker datePicker = findViewById(R.id.datePicker); | |
addBirthdayButton.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View view) { | |
addBirthdayToCalendar(datePicker); | |
} | |
}); | |
} | |
private void addBirthdayToCalendar(DatePicker datePicker) { | |
int year = datePicker.getYear(); | |
int month = datePicker.getMonth(); | |
int day = datePicker.getDayOfMonth(); | |
Calendar birthdayDate = Calendar.getInstance(); | |
birthdayDate.set(Calendar.YEAR, year); | |
birthdayDate.set(Calendar.MONTH, month); | |
birthdayDate.set(Calendar.DAY_OF_MONTH, day); | |
Intent intent = new Intent(Intent.ACTION_INSERT) | |
.setData(CalendarContract.Events.CONTENT_URI) | |
.putExtra(CalendarContract.Events.TITLE, "День Рождения") | |
.putExtra(CalendarContract.Events.DESCRIPTION, "Событие: День Рождения") | |
.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, birthdayDate.getTimeInMillis()) | |
.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true); | |
startActivity(intent); | |
} | |
} */ | |
============================================================================================================ | |
activity_main.xml: | |
<?xml version="1.0" encoding="utf-8"?> | |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:tools="http://schemas.android.com/tools" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" | |
tools:context=".MainActivity"> | |
<Button | |
android:id="@+id/addBirthdayButton" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_centerHorizontal="true" | |
android:layout_marginTop="16dp" | |
android:text="Добавить День Рождения в календарь" /> | |
<DatePicker | |
android:id="@+id/datePicker" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_below="@id/addBirthdayButton" | |
android:layout_centerHorizontal="true" | |
android:layout_marginTop="16dp" /> | |
</RelativeLayout> | |
============================================================================================================ | |
AndroidManifest.xml: | |
... | |
<uses-permission android:name="android.permission.WRITE_CALENDAR" /> | |
... |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment