【问题标题】:Permission in android安卓中的权限
【发布时间】:2017-05-19 12:22:24
【问题描述】:

我需要运行我的应用程序并询问读取外部存储权限,我正在使用RecyclerView,当我接受权限时它只显示没有项目的空应用程序,我必须第二次运行应用程序才能查看我的项目列表 当用户接受权限时,如何在回收站视图中绘制项目?

这是我的创建方法

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if(checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
        }
    }
    setContentView(R.layout.activity_main);
    try{
        intent = new Intent(Broadcast_SEEKBAR);

        loadAudio();
        initRW();
        initViews();
        setListeners();
    } catch (Exception e) {
    }

}

这里是回收站视图的初始化

   private void initRW() {
    if (audioList.size() > 0) {
        rv = (RecyclerView) findViewById(R.id.myRecyclerView);
        rv.setLayoutManager(new LinearLayoutManager(this));
        rwa = new RWAdapter(audioList, getApplicationContext());
        rv.setAdapter(rwa);
        rv.addOnItemTouchListener(new MyTouchListener(this, new onItemClickListener() {
            @Override
            public void onClick(View view, int index) {
                playAudio(index);
            }
        }));
    }
}

这里是 onRequestPermissionsResult 方法

    @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {

        case 0: {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

            } else {
                Toast.makeText(getApplicationContext(), "Permission not granted", Toast.LENGTH_LONG).show();
                finish();
            }
            return;
        }
    }

}

【问题讨论】:

    标签: java android permissions


    【解决方案1】:

    如果用户授予权限,您必须再次调用以下方法

    loadAudio();
    initRW();
    

    同样在 onCreate() 调用上述两个方法时,只有在授予权限的情况下

    【讨论】:

    • 如果我拒绝两次,你知道为什么会发生这种情况吗? “RecyclerView:没有附加适配器;跳过布局”
    • 我没有发现你的问题。你能详细说明一下吗?
    • 我拒绝许可一次,然后我再次打开应用并接受许可或拒绝,我的日志显示
    • 我没有得到你的问题,你能分享你的代码或创建一个示例吗?
    【解决方案2】:

    在授予权限时在onRequestPermissionsResult 内调用initRW

     @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
    
            case 0: {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    initRW();
                } else {
                    Toast.makeText(getApplicationContext(), "Permission not granted", Toast.LENGTH_LONG).show();
                    finish();
                }
                return;
            }
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2011-04-06
      • 2015-03-23
      • 2017-10-15
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 2014-02-16
      • 2016-04-28
      相关资源
      最近更新 更多