2017-11-18 108 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