大家好!
我花了4个小时搜索堆栈溢出或视频如何修复错误: 由: java.lang.Security异常: 权限拒绝 [...] 需要android.permission.READ_EXTERNAL_STORAGE或 grantUriPermission()
Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media/35 from pid=15358, uid=10074 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
我尝试在我的应用程序中显示库中的图片。以下是清单:
<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
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>
<activity android:name=".AddCountry" android:label="Add Country"></activity>
</application>
我尝试展示图片的活动
public class AddCountry extends AppCompatActivity implements Constant{
private ImageView imageView;
private Button btnUploadPhotos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_country);
initComponents();
}
private void initComponents() {
imageView=(ImageView) findViewById(R.id.imgView_add_country_activity_uploadphotos);
btnUploadPhotos=(Button)findViewById(R.id.btn_add_country_activity_uploadphotos);
btnUploadPhotos.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openGallery();
}
});
}
private void openGallery() {
Intent gallery=new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(gallery,ADD_COUNTRY_REQUEST_PICK_IMAGE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK&&requestCode==ADD_COUNTRY_REQUEST_PICK_IMAGE)
{
Uri imageUri=data.getData();
String[] filePathColumn={MediaStore.Images.Media.DATA};
Cursor cursor=getContentResolver().query(imageUri,filePathColumn,null,null,null);
cursor.moveToFirst();
int columnIndex=cursor.getColumnIndex(filePathColumn[0]);
String picturePath=cursor.getString(columnIndex);
cursor.close();
Bitmap bitmap=BitmapFactory.decodeFile(picturePath);
Drawable drawable=new BitmapDrawable(bitmap);
imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
}
}
首先,我尝试了这样的onActivityResult:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK&&requestCode==ADD_COUNTRY_REQUEST_PICK_IMAGE)
{
Uri imageUri=data.getData();
imageView.setImageURI(imageUri);
}
}
我没有出错,但是当我选择一个图像时,什么也没有发生。
应用程序捆绑包:
android {
compileSdkVersion 25
buildToolsVersion "25.0.1"
defaultConfig {
applicationId "com.example.rares.proiect"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.0.1'
testCompile 'junit:junit:4.12'
}
更新
我添加以下内容解决了问题:
如果 (检查自身权限(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (shouldShowRequestPermissionRationale(
Manifest.permission.READ_EXTERNAL_STORAGE)) {
// Explain to the user why we need to read the contacts
}
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
// MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE is an
// app-defined int constant
return;
因为您的目标是sdk
问题内容: 我正在尝试访问用户设备上的媒体文件(音乐)以进行播放;一个简单的“ hello world”音乐播放器应用。 我遵循了一些教程,它们基本上给出了相同的代码。但这是行不通的。它不断崩溃,并告诉我: 现在,这是我的清单文件: 这是我的Java方法: 我试过了: 要将其放在清单文件中的不同位置: 要在读取外部存储权限下添加 要将其放在清单/应用程序/活动标签中: 将uri和cursro之间的
要将其放在清单文件的不同位置: 要在读取外部存储前添加Android:maxsdkversion: 要将其放入manifest/application/activity-tag中: null 堆栈跟踪:
我在elasticsearch插件中遇到了异常: java.security.AccessControlExcture:访问拒绝(org.elasticsearch.ThreadPersionorg.elasticsearch.ThreadPersion)java.security.AccessControlContext.check权限(AccessControlContext.java:472
问题内容: 我正在尝试创建一个可以从Gallery应用程序获取图像并将其显示在imageButton上的简单应用程序。我正在运行Android 5.0.1的手机上使用API 21进行测试。不幸的是,无论我尝试什么,即使我指定了权限,我仍然会遇到安全错误。 我获取图像的代码是: 当我尝试从Dropbox选择图像时,该代码有效,但是当我从图库中选择图像时,我得到 我将READ_EXTERNAL_S
我正在尝试使用相机并保存图像。按照Commonware建议的步骤进行操作。我经常出错- 2018-11-12 02:10:54.588 3145-3173/inder.execE/Database aseUtils:写入异常到包裹inder.java:682安全异常:权限拒绝:写入android.support.v4.content.FileProvider uricontent://com.bi
在创建服务器实例之前,你需要在该实例上添加安全组规则,这样服务器实例的用户才能ping这个主机或者通过SSH连接这个实例。安全组是IP过滤的规则组,它决定了网络的连通性,适用于一个Project内的所有实例。配置安全组有两种方式:要么是在默认的安全组中添加规则,要么新建一个安全组,然后把规则写在新的安全组里。 密钥对是SSH的证书,在实例启动时被注入进系统里。如欲使用密钥对注入,镜像中的系统上必须