-6

I know, that this question was asked several times before, still I don't get this to work either because I don't understand what exactly to do or the given answers didn't work for me.. Anyway, I want to add an event to a calendar...Therefore, I added the permission.WRITE_CALENDAR to my manifest as follows:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.user.neuertestdiesenbenutzen">
    <uses-permission android:name="android.permission.WRITE_CALENDAR" />
    <uses-permission android:name="android.permission.READ_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>

My MainActivity looks like that:

package com.example.user.neuertestdiesenbenutzen;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        CalManager c = new CalManager(getApplicationContext());
        int permissionCheck = 
            ContextCompat.checkSelfPermission(MainActivity.this,
            Manifest.permission.WRITE_CALENDAR);
        if(permissionCheck== PackageManager.PERMISSION_GRANTED) {
            Log.d("mychecks", "Permission granted");
            c.addEvToCal();
        }
        else{
            Log.d("mychecks", "Permission denied");
        }
    }
}

However, it doesn't recognize the permission and I get the output: Permission denied.

Can anyone describe in an understandable way what to do in this situation?

Thanks for your help!

Zimbaa
  • 45
  • 1
  • 1
  • 11

1 Answers1

0

you need to get run time permission above 6.0 version

try this to get run time permission:

public static final String[] NECESSARY_PERMISSIONS = new String[] {

         Manifest.permission.WRITE_CALENDAR,

    };

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ContextCompat.checkSelfPermission(PasswordSetupActivity.this,
                    Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) {

                new Handler().postDelayed(new Runnable() {

                    @Override
                    public void run() {
                        ActivityCompat.requestPermissions(
                                (Activity) PasswordSetupActivity.this,
                                NECESSARY_PERMISSIONS, 123);

                    }
                }, 1400);
            }

        }

if any question then free to ask me

SahdevRajput74
  • 754
  • 7
  • 18
  • Hah, thank you :D Works fine! But just for my understanding: What does the 1400 and the 123 do? And do I have to accept the permissionrequest only for once or anytime I restart the app? – Zimbaa Nov 18 '17 at 11:51
  • @Zimbaa 1400 is time in milliseconds fro handler and 123 is permission code if you want handle permission result check my below ans for detail – Goku Nov 18 '17 at 11:56
  • 1
    ah, got it :D thanks for your answers! :D – Zimbaa Nov 18 '17 at 12:09
  • I use handler for display permission dialog after 1400 milliseconds, you can remove it and write simple like this: ActivityCompat.requestPermissions( (Activity) PasswordSetupActivity.this, NECESSARY_PERMISSIONS, 123); – SahdevRajput74 Nov 21 '17 at 06:27
  • Sorry for my mistake please change if (ContextCompat.checkSelfPermission(PasswordSetupActivity.this, Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) – SahdevRajput74 Nov 21 '17 at 06:29
  • i wrote getAccount insted of WRITE_CALENDAR – SahdevRajput74 Nov 21 '17 at 06:29