カレンダーアプリを呼び出した後、そのまま自動で
保存できるようにしたいのですが、どのようにすればいいですか?
実行はされるのですが、
カレンダーアプリ見ても
2月21日7時30分に「タイトル」が保存されません。
アドバイスお願いします。
下記はパーミッションの確認のためのコードです。
public class MainActivity extends AppCompatActivity { private final int REQUEST_PERMISSION = 10; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); readContentActivity(); } // Permissionの確認 public void checkPermission() { // 既に許可している if (checkSelfPermission(Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) { requestLocationPermission(); } } // 許可を求める private void requestLocationPermission() { if (shouldShowRequestPermissionRationale( Manifest.permission.WRITE_CALENDAR)) { requestPermissions(new String[]{Manifest.permission.WRITE_CALENDAR}, REQUEST_PERMISSION); } else { Toast toast = Toast.makeText(this, "許可されないとアプリが実行できません", Toast.LENGTH_SHORT); toast.show(); requestPermissions(new String[]{Manifest.permission.WRITE_CALENDAR,}, REQUEST_PERMISSION); } } // 結果の受け取り @Override public void onRequestPermissionsResult( int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == REQUEST_PERMISSION) { // 使用が許可された if (grantResults[0] != PackageManager.PERMISSION_GRANTED) { // それでも拒否された時の対応 Toast toast = Toast.makeText(this, "これ以上なにもできません", Toast.LENGTH_SHORT); toast.show(); } } }
下記がパーミッションの確認のコードの呼び出し、
そしてカレンダーを保存するためのコードで、
下のコードを実行して、カレンダーアプリで
確認するのですが、保存されていません。
なので下のコードを修正すべき箇所を
指摘してもらいたいです。
public void readContentActivity() { Calendar beginTime = Calendar.getInstance(); beginTime.set(2020, 2, 21, 7, 30); Calendar endTime = Calendar.getInstance(); endTime.set(2020, 2, 21, 8, 30); ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); values.put(Events.CALENDAR_ID, 1); values.put(Events.TITLE, "タイトル"); values.put(Events.DESCRIPTION, "説明"); values.put(Events.EVENT_TIMEZONE, TimeZone.getDefault().getID()); values.put(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis()); values.put(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis()); if (checkSelfPermission(Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) { checkPermission(); } cr.insert(Events.CONTENT_URI, values); } }
以下から全文になります。
下記がMainActivity.javaです
package com.example.tera; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.Manifest; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.provider.CalendarContract; import android.widget.Toast; import java.util.Calendar; import java.util.TimeZone; import android.provider.CalendarContract.Events; public class MainActivity extends AppCompatActivity { private final int REQUEST_PERMISSION = 10; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); readContentActivity(); } // Permissionの確認 public void checkPermission() { // 既に許可している if (checkSelfPermission(Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) { requestLocationPermission(); } } // 許可を求める private void requestLocationPermission() { if (shouldShowRequestPermissionRationale( Manifest.permission.WRITE_CALENDAR)) { requestPermissions(new String[]{Manifest.permission.WRITE_CALENDAR}, REQUEST_PERMISSION); } else { Toast toast = Toast.makeText(this, "許可されないとアプリが実行できません", Toast.LENGTH_SHORT); toast.show(); requestPermissions(new String[]{Manifest.permission.WRITE_CALENDAR,}, REQUEST_PERMISSION); } } // 結果の受け取り @Override public void onRequestPermissionsResult( int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == REQUEST_PERMISSION) { // 使用が許可された if (grantResults[0] != PackageManager.PERMISSION_GRANTED) { // それでも拒否された時の対応 Toast toast = Toast.makeText(this, "これ以上なにもできません", Toast.LENGTH_SHORT); toast.show(); } } } public void readContentActivity() { Calendar beginTime = Calendar.getInstance(); beginTime.set(2020, 2, 21, 7, 30); Calendar endTime = Calendar.getInstance(); endTime.set(2020, 2, 21, 8, 30); ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); values.put(Events.CALENDAR_ID, 1); values.put(Events.TITLE, "タイトル"); values.put(Events.DESCRIPTION, "説明"); values.put(Events.EVENT_TIMEZONE, TimeZone.getDefault().getID()); values.put(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis()); values.put(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis()); if (checkSelfPermission(Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) { checkPermission(); } cr.insert(Events.CONTENT_URI, values); } }
下記がAndroidManifest.xmlです
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.tera"> <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
下記がactivity_main.xmlです(一応のせときます)
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> </androidx.constraintlayout.widget.ConstraintLayout>
以下が完成したうまくいったコードで上記のreadContentActivityを修正しました。
public void readContentActivity() { Calendar beginTime = Calendar.getInstance(); beginTime.set(2020, 2, 21, 7, 30); Calendar endTime = Calendar.getInstance(); endTime.set(2020, 2, 21, 8, 30); ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); values.put(Events.CALENDAR_ID, 5); values.put(Events.TITLE, "タイトル"); values.put(Events.DESCRIPTION, "説明"); values.put(Events.EVENT_TIMEZONE, TimeZone.getDefault().getID()); values.put(Events.DTSTART, beginTime.getTimeInMillis()); values.put(Events.DTEND, endTime.getTimeInMillis()); if (checkSelfPermission(Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) { checkPermission(); } cr.insert(Events.CONTENT_URI, values); }
回答1件
あなたの回答
tips
プレビュー