当前位置: 首页 > 知识库问答 >
问题:

android 6中的权限。x个

姚晋
2023-03-14

我有一个应用程序,有一个viewPager,我在其中添加我的照片从画廊。

在旧版本中工作得很酷,但从android 6.0及更高版本开始,我需要在运行时询问权限。我已经这样做了。但问题是,当我允许权限时,图像没有加载到viewPager中,并且第二次后图像加载良好。

ViewPager适配器(我正在从图库加载我的图像)

public class ImageAdapter extends PagerAdapter {

private ImageView imageView;
private Context context;
private LayoutInflater inflater;
public ArrayList<String> listOfAllImages = new ArrayList<>();
private static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 1;

public ImageAdapter(Context context) {
    this.context = context;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        requestRead();
        checkPermission();
    } else {
        getAllShownImagesPath();
    }
}

private void requestRead() {
    if (ContextCompat.checkSelfPermission(context,
            Manifest.permission.READ_EXTERNAL_STORAGE)
            != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions((Activity) context,
                new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
    } else {
        getAllShownImagesPath();
    }
}

private void checkPermission(){
    if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
        getAllShownImagesPath();
    }
}

@Override
public int getCount() {
    return listOfAllImages.size();
}

@Override
public boolean isViewFromObject(View view, Object object) {
    return view == object;
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.photopager, null);
    imageView = (ImageView) view.findViewById(R.id.photoView2);

    Glide.with(context).load(listOfAllImages.get(position))
            .thumbnail(1f)
            .crossFade()
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .into(imageView);

    ViewPager viewPager = (ViewPager) container;
    viewPager.addView(view, 0);
    return view;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    ViewPager vp = (ViewPager) container;
    View view = (View) object;
    vp.removeView(view);
}

private void getAllShownImagesPath() {
    Uri uri;
    Cursor cursor;
    int column_index_data;
    String absolutePathOfImage;
    uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

    String[] projection = {MediaStore.MediaColumns.DATA,
            MediaStore.Images.Media.BUCKET_DISPLAY_NAME};

    cursor = context.getContentResolver().query(uri, projection, null,
            null, null);

    column_index_data = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
    while (cursor.moveToNext()) {
        absolutePathOfImage = cursor.getString(column_index_data);
        listOfAllImages.add(absolutePathOfImage);
    }

    cursor.close();
}
}

点击权限请求后如何加载图像?

这是适配器,因为我无法重写onRequestPermissionsResult。

共有1个答案

况胡媚
2023-03-14

首先,让我们试着找出问题的根源:

它第一次不起作用,因为您正在异步执行某些内容,并希望同步获得结果:

requestRead();
checkPermission();

因此,当您调用check Persion()时;权限尚未授予。

可能的解决方案是:

处理活动或片段中的权限请求:link1和link2,这是您应该熟悉的官方文档,因为您之前已经实现了此功能。然后,当授予权限时

onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults)

您可以让适配器知道(adapter.readPermissionGranted()只是作为示例),以便它可以获取图像(getAllShown ImagesPath();)。

 类似资料:
  • 我的applet在Windows7上工作得很好(在IDE和Firefox中都可以作为一个签名的部署到网页上),但在OS X上运行时会抛出(在IDE和Firefox中都可以)。 当它尝试使用新的创建新的时,会发生异常: 在删除显式文件分隔符之后,它在Windows和OS X上的IDE(Eclipse)上都可以工作: 但是当部署为时,在Windows和OS X上抛出相同的。 使用与系统相关的分隔符给出

  • 我按照ruby on rails教程运行postgres,但是当我尝试“rake db:create”时,我得到了以下错误: 我发现这个问题发出一些类似的问题,但我不能让它工作。 升级到 OSX 10.7 狮子会后修复后格鲁姆 阅读此问题后,我安装了homebrew,路径很好,brew医生显示路径上没有错误。

  • 接口管理的逻辑较为复杂,操作频率高,层层审批将严重拖慢生产效率,因此传统的金字塔管理模式并不适用。 YApi 将扁平化管理模式的思想引入到产品的权限管理中,超级管理员 拥有最高的权限,并将权限分配给若干 组长,超级管理员 只需管理组长 即可,实际上管理YAPI各大分组与项目的是“组长”。组长对分组或项目负责,一般由BU负责人/项目负责人担任。 认识组长 组长分为 分组组长 与 项目组长,他们的关系

  • 您可以定义 M600 上各种应用程式允许使用的信息。 编辑权限设定 导航至 Settings(设定)应用程式,找到并轻触 Apps(应用程式)。 轻触System Apps(系统应用程式)。 滚动列表,找到并轻触您想编辑其权限内容的应用程式或服务。 轻触Permissions(权限)。 轻触不同权限,在开启权限(开关为蓝色)和关闭权限(开关为灰色)之间来回切换。

  • macOS 与 Linux 都属于 Unix 类型的操作系统,所以它们的文件与目录的权限的概念是一样的。 三个动作 系统上的一个用户,对某个文件或目录能做的有三个动作:读取,写入,执行。这三个动作也可以看成是三个权限,用户可以读取文件里的内容,我们就说他对这个文件拥有读取的权限。如果用户可以在某个目录的下面创建新的文件,我们就可以说这个用户对于这个目录来说拥有写入的权限。 这三个权限用字母表示:

  • 权限定义了对平台上资源的操作权限。 权限定义了对平台上资源的操作权限,系统部署完成后预置了常用权限,称为系统权限。用户本身没有任何权限,需要在用户加入项目时为其指定角色,并将权限关联到角色,才能使用户具有对应的操作权限。 说明 系统权限结合用户视图、操作权限针对资源生成9种权限。 用户视图分为管理后台、域管理后台、项目视图; 操作权限分为管理权限、编辑权限、只读权限; 因此资源权限具体为全局下资源