調用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)
你運行的是哪個版本的Android?如果您在「設置」中查看該應用的條目,是否顯示相機和存儲權限組?如果是這樣,他們已經被授予了嗎?你有[<使用權限>元素在正確的地方](https://commonsware.com/blog/2015/08/31/hey-where-did-my-permission-go.html)?當你在調試器中遍歷'verifyStoragePermissions()'時,你是否將其調用到'requestPermissions()'調用? – CommonsWare
你好,謝謝。 權限在設置中處於活動狀態。在這裏嘗試之前,我已經關閉並重新激活了它們。所以是的,他們被授予 它確實得到了requestPermissions()調用,它只是沒有做任何事情。 在清單上,它們不在標籤參數之外。我將更新問題以顯示完整清單 –
Lpuche
請編輯您的問題而不是添加註釋,以便將所有內容放在一個地方。讓人們很容易幫助你。 – Robert