2016-11-13 438 views
0

調用ActivityCompat.requestPermissions不會打開對話框。我一直在這裏待了幾天,一直沒有找到任何有關此主題的答案。我聽說過一些錯誤,但沒有具體說明這種情況。Android Studio:ActivityCompat.requestPermissions不顯示對話框

手機上的Android

版本:6.0.1

存儲的所有權限都接受了測試手機上的應用程序設置。應用程序已清除數據兩次,以及卸載和重新安裝。

它正在使requestPermissions()調用。

搖籃:

apply plugin: 'com.android.application' 

android { 
compileSdkVersion 23 
buildToolsVersion '25' 

defaultConfig { 
    applicationId "APPID" 
    minSdkVersion 16 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.0" 
} 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 
} 

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
testCompile 'junit:junit:4.12' 
compile 'com.facebook.android:facebook-android-sdk:4.+' 
compile 'com.android.support:appcompat-v7:23.4.0' 
compile('com.affectiva.android:affdexsdk:3.1.2') 

} 

清單文件包括:

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

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme" 
    tools:replace="android:allowBackup,android:label"> 
    <activity 
     android:name=".LoginActivity" 
     android:screenOrientation="portrait"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name="com.facebook.FacebookActivity" 
     android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" 
     android:label="@string/app_name"/> 
     <!--android:theme="@android:style/Theme.Translucent.NoTitleBar" --> 

    <meta-data 
     android:name="com.facebook.sdk.ApplicationId" 
     android:value="@string/facebook_app_id" /> 

    <activity 
     android:name=".ProfileActivity" 
     android:screenOrientation="portrait"></activity> 
    <activity android:name=".QuestionOne"></activity> 
</application> 

這裏最初稱:

if(loggedIn && friendsNames.size() > 0) { 

     try{ 

      verifyStoragePermissions(this); 
     } 
     catch(Exception e){ 
      Log.e("LoginActv: Save Block", e.getMessage()); 
      e.getStackTrace(); 
     } 

     Intent intent = new Intent(this, QuestionOne.class); 
     intent.putStringArrayListExtra("names",friendsNames); 
     intent.putStringArrayListExtra("urls", pictureURL); 

     startActivity(intent); 

,當然還有權限這裏要求。需要注意的是 '權限= 1!' VS '權限= PackageManager.PERMISSION_GRANTED!',否則,也不會碰到requestPermissions:

public static void verifyStoragePermissions(Activity activity) { 
    // Check if we have write permission 
    int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); 

    Log.e("Permission value", permission + " "); 
    if (permission != 1) { 
     Log.e("Permission ask", "Asking, permission not granted"); 
     ActivityCompat.requestPermissions(
       activity, 
       PERMISSIONS_STORAGE, 
       REQUEST_EXTERNAL_STORAGE 
     ); 
    } 
} 

權限變量如下:

// Storage Permissions 
private static final int REQUEST_EXTERNAL_STORAGE = 1; 
private static String[] PERMISSIONS_STORAGE = { 
     Manifest.permission.READ_EXTERNAL_STORAGE, 
     Manifest.permission.WRITE_EXTERNAL_STORAGE 
}; 

最後凌駕於onRequestPermissionsResult()甚至永遠不會被調用。

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 


    if (requestCode == 200) { 
     if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

      Log.e("PERResult", "Granted"); 
      resultExport file = new resultExport(); 
      file.setUserName(facebookHandler.getUserName()); 
      file.setUserID(facebookHandler.getUserID()); 
      file.addData("friendNames", friendsNames); 
      saveObject(file, facebookHandler.getUserName()); 


     } else { 
      Log.e("PERResult", "Denied"); 
      Toast.makeText(getApplicationContext(), "PERMISSION_DENIED", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

我完全喪失了爲什麼在我請求權限時不會彈出對話框。任何幫助真的會被讚賞。


編輯:

兩個

int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); 

int permissionCheck = ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); 

返回0,但試圖保存得:

open failed: EACCES (Permission denied) 
+0

你運行的是哪個版本的Android?如果您在「設置」中查看該應用的條目,是否顯示相機和存儲權限組?如果是這樣,他們已經被授予了嗎?你有[<使用權限>元素在正確的地方](https://commonsware.com/blog/2015/08/31/hey-where-did-my-permission-go.html)?當你在調試器中遍歷'verifyStoragePermissions()'時,你是否將其調用到'requestPermissions()'調用? – CommonsWare

+0

你好,謝謝。 權限在設置中處於活動狀態。在這裏嘗試之前,我已經關閉並重新激活了它們。所以是的,他們被授予 它確實得到了requestPermissions()調用,它只是沒有做任何事情。 在清單上,它們不在標籤參數之外。我將更新問題以顯示完整清單 – Lpuche

+0

請編輯您的問題而不是添加註釋,以便將所有內容放在一個地方。讓人們很容易幫助你。 – Robert

回答

0

顯然,它不需要任何對話,因爲權限都在那裏。但是,它僅僅因爲路徑錯誤而拒絕了權限。

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File(Environment.getExternalStorageDirectory().getPath() + name + ".bin"))); 

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File(Environment.getExternalStorageDirectory().getPath()+ "/" + name + ".bin"))); 

第一示例引發權限錯誤。

+0

還要注意對話框是如果您選中「從不再詢問」並且最後一次拒絕,則不會打開。 – Shumoapp

0

它應該是這樣的

if (permission != PackageManager.PERMISSION_GRANTED) {...} 

,因爲1是PackageManager.SIGNATURE_NEITHER_SIGNED

+0

感謝您的回覆。 @JozefDochan 我試過了,但它似乎使該語句爲真,因此沒有達到requestPermissions()語句。如果是這樣的話。我不確定爲什麼這個許可會被接受,但它不允許我保存到外部卡。 – Lpuche

+0

它推送到'requestPermissions()'。但是你調用'requestPermissions()''REQUEST_EXTERNAL_STORAGE = 1'這是你的requestCode,所以你應該檢查是否('requestCode == 1') –

+0

我已經試過了,它仍然會拋出同樣的錯誤。我不應該得到權限對話框嗎?出於某種原因,我看不到它。 – Lpuche