2017-11-18 347 views
-6

我知道,这个问题之前曾被问过几次,但我还是没有得到这个工作,因为我不明白究竟要做什么或者给出的答案并没有为我工作.. 无论如何,我想将事件添加到日历......所以,我加入了permission.WRITE_CALENDAR到我的清单如下:permission.WRITE_CALENDAR:虽然在manifest.xml中声明了没有权限

<?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> 

我的MainActivity样子即:

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"); 
     } 
    } 
} 

但是,它不认识permi ssion和我得到的输出:权限被拒绝。

任何人都可以用一种可以理解的方式描述在这种情况下该做什么?

感谢您的帮助!

+0

TL;博士:如果你的权限检查失败,那么你要问用户通过'requestPermissions()'获得许可' –

回答

0

确保您的项目有一个targetSdkVersion的23或更高

试试这个

征得同意这样

ActivityCompat.requestPermissions(Activity.this, 
      new String[]{Manifest.permission.WRITE_CALENDAR}, 
      1);// pass here permission request code to handle permission result 

不是处理权限导致onRequestPermissionsResult知道用户允许或者不予许可

@Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     switch (requestCode) { 
      case 1: { 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 
         && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        c.addEvToCal(); 
        // permission was granted, yay! Do the 
        // contacts-related task you need to do. 

       } else { 

        // permission denied, boo! Disable the 
        // functionality that depends on this permission. 
       } 
       return; 
      } 

     } 
    } 
0

你需要得到运行6.0以上版本

时间许可,尝试使用此方法得到的运行时间许可:

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); 
      } 

     } 

如果有的话就可以自由问题要问我

+0

哈,谢谢:D工作正常!但只是为了我的理解:1400和123做什么?我是否必须只接受一次或每次重新启动应用程序的permissionrequest? – Zimbaa

+0

@Zimbaa 1400是以毫秒为单位的时间处理程序和123是许可代码,如果你想处理许可结果检查我下面的答案详细 – Prem

+1

啊,明白了:D谢谢你的答案! :D – Zimbaa

相关问题