【Android開発】カレンダーを追加してみる

ちょっと探したけど個人的に欲しいのが見つからないので、多少プログラミングできるなら作るしかない。
ということで。
本当ならiOSも使えるようFultterなど使ってマルチでいければいいと思いましたがなんだか面倒だしとりあえず自分が使えればいいやというのと、Androidのカレンダー使えば勝手にgoogleカレンダーに登楼されるんじゃね?という安易な考え。

一回やってみればいいのでしょうけど。
まぁ、普通にAndroid Studio使ってやります。
気づけば Android Studio Electric Eel | 2022.1.1 Patch 1

で、New Projectを選択し、TemplatesはBasic Activity選択
MinimumSDKはAndroid12(と、いうのも手持ちのがPixel3なのでAndroid13にならない)に指定。
エミュレータ設定すれば13いけますが、実機が12なのでそうなります。

なんか諸々アップデートあったのでまっさらプロジェクトなので躊躇なくアップデート。

実機つないで作り出そうと思いましたが、ある程度エミュレータで大丈夫だろうってことでデバイス作成
Pixel3でAndroid12を作成
(SSDにまだ余裕があるのでできること)

で、実行

特に何もしてないので、こうなります(エラー出たら困る)

ファン無しのMacBook Airなので静か。
それがいい。けど熱が心配。
部屋寒いから放熱もいい感じされているかな

さてここからですね。

今やりたいのはカレンダーの表示ではなく、情報登録と取得。
カレンダー プロバイダの概要を参考に

まずはユーザーパーミッション

カレンダー データを読み込むためには、アプリはマニフェスト ファイルに READ_CALENDAR パーミッションを含める必要があります。カレンダー データを削除、挿入、アップデートするためには、WRITE_CALENDAR パーミッションを含める必要があります。

https://developer.android.com/guide/topics/providers/calendar-provider?hl=ja#manifest

初期状態(簡略化してます)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
~~~色々~~~
</manifest>

追加

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <uses-permission android:name="android.permission.READ_CALENDAR" />
    <uses-permission android:name="android.permission.WRITE_CALENDAR" />
</manifest>

試しにこの状態で実行。
エミュレータの方で設定からアプリの権限がどうなっているか見てみる

許可はされてないですが使いますよというおまじないはできてる

と、進めてましたが

「インテントを使用したイベントの挿入」という部分だけ読んでください!

なんですと。

WRITE_CALENDAR パーミッション不要!!!
ユーザーに許可アラート出す必要なし!!
使うのはIntentだけ!!!

あぁ、単純にカレンダーに登録したい場合はこの方法がよさそう。

ただ自分がやりたいことには向いてなさそうなので最初の方法で…許可アラートか…個人だけなら手動でいいかなぁ…

実行時の権限をリクエストするを参考に追加していきます

〈kotlin〉Android studio使い方メモ11:Runtime Permission こちら実際実装に関して参考になりました

許可ダイアログも実装完了。

Kotlin: CalendarProviderでGoogleカレンダーの情報を取り出すを参考に実際にカレンダーを取り出す

試しにカレンダー情報取ってみようとしたらパーミッション許可間違ってWRITE_CALENDARで取って読み取れなくてエラー出てました。
で、一旦はカレンダー情報読み取れたので、適当なの登録してみます。

あ。エミュレータで試すのにできればそれ用のグーグルアカウント用意してそれを使って試したほうがよいかもしれません。万が一(カレンダー情報消失など)失敗しても安心

カレンダーの追加はanyone know how to add event to usercreated calender in androidを参考にしてみましたが、、追加できたけど…なるほど、端末からカレンダー作っても大本のグーグルカレンダーには紐付かないのか…。
しかも、何個もできちゃった…
アプリ削除しても消えないな。こりゃ手を出さないほうがいいかもしれない。

本アプリが作成したものに限定してカレンダーを選択削除するを参考に
カレンダー削除ルーチン作って削除

ちょっと面倒だがPCのGoogle Calendarから追加したいカレンダーを作ってアプリから選択する方法しかないのか…