java - 运行时权限问题

标签 java android fragment android-permissions

我不知道为什么,但我的运行时权限代码不起作用。不出现弹出。如果我不接受许可,就会出现进度条。

谁能帮助我?

提前感谢大家!

我向你展示我的代码:!

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the custom_spinner_items for this fragment

        View rootView = inflater.inflate(R.layout.fragment_four, container, false);



        Button mButton = (Button) rootView.findViewById(R.id.cazzo);

        mButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                if (hasPermissions()) {
                    // our app has permissions.
                    FiveFragment ff = new FiveFragment();
                    numeroTavolo = ff.showResultTavolo(v);

                    MyListFragment mlf = new MyListFragment();


               /* try {
                    mlf.showResultTotale(v);
                } catch (IOException e) {
                    e.printStackTrace();
                }*/

                    string2 = mlf.showResultTotale2(v);
                    totalepizze = mlf.showResultTotale(v);


                    ThreeFragment tf = new ThreeFragment();

                    string4 = tf.showResult(v);

                    totalebibite = tf.showResult2(v);
                    processingDialog.show();
                    mProgressbarAsync = new MakePDF();
                    mProgressbarAsync.execute();
                    new MakePDF(getContext()).execute();

                } else {
                    //our app doesn't have permissions, So i m requesting permissions.
                    requestPerms();
                }

               /* FiveFragment ff = new FiveFragment();
                numeroTavolo = ff.showResultTavolo(v);

                MyListFragment mlf = new MyListFragment();


               *//* try {
                    mlf.showResultTotale(v);
                } catch (IOException e) {
                    e.printStackTrace();
                }*//*

                string2 = mlf.showResultTotale2(v);
                totalepizze = mlf.showResultTotale(v);


                ThreeFragment tf = new ThreeFragment();

                    string4 = tf.showResult(v);

                    totalebibite = tf.showResult2(v);
             */
               /* string4=tf.showResult(v);
                totalebibite=tf.showResult2(v);*/

                   /* processingDialog.show();
                    mProgressbarAsync = new MakePDF();
                    mProgressbarAsync.execute();
                    new MakePDF(getContext()).execute();*/


            }

        });
        TextView titolo2 = (TextView) rootView.findViewById(R.id.result2);
        return rootView;
    }

关于权限的代码:

 private void requestPerms(){
            String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
                requestPermissions(permissions,PERMS_REQUEST_CODE);
            }
        }

        private boolean hasPermissions(){

            int res = 0;
            //string array of permissions,
            String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};

            for (String perms : permissions){
                res = checkCallingOrSelfPermission(getContext(),perms);
                if (!(res == PackageManager.PERMISSION_GRANTED)){
                    return false;

                }
            }
            return true;

        }






        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            boolean allowed = true;

            switch (requestCode){
                case PERMS_REQUEST_CODE:

                    for (int res : grantResults){
                        // if user granted all permissions.
                        allowed = allowed && (res == PackageManager.PERMISSION_GRANTED);
                    }

                    break;
                default:
                    // if user not granted permissions.
                    allowed = false;
                    break;

            }

            if (allowed){
                //user granted all permissions we can perform our task.
                //makeFolder();
                FiveFragment ff = new FiveFragment();
                numeroTavolo = ff.showResultTavolo(v);

                MyListFragment mlf = new MyListFragment();


                   /* try {
                        mlf.showResultTotale(v);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }*/

                string2 = mlf.showResultTotale2(v);
                totalepizze = mlf.showResultTotale(v);


                ThreeFragment tf = new ThreeFragment();

                string4 = tf.showResult(v);

                totalebibite = tf.showResult2(v);
                processingDialog.show();
                 mProgressbarAsync = new MakePDF();
                mProgressbarAsync.execute();
                new MakePDF(getContext()).execute();
            }
            else {
                // we will give warning to user that they haven't granted permissions.
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)){
                        Toast.makeText(getContext(), "Storage Permissions denied.", Toast.LENGTH_SHORT).show();
                    }
                }
            }

        }

最佳答案

请试试这个,它对我有用。

  1. 我在 Fragment 中使用联系人权限

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (context.checkSelfPermission(Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
            runReadContact();
        } else {
            ActivityCompat.requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, MyActivity.PERMISSION_CODE);
        }
    } else {
        runReadContact();
    }
    
  2. onRequestPermission() 在 MyActivity( Activity 类)中使用,如下所示

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
     switch (requestCode) {
       case MyActivity.PERMISSION_CODE:
        if (grantResults.length > 0)
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
    
                    runReadContact();
    
            }
        }
        break;
      }
    }
    
  3. 如果你想在 fragment 中使用 onRequestPermission() 我们需要关心。

    1) android.support.v4.app.Fragment; =>导入android.app.Fragment

    2) FragmentCompat.requestPermissions(...

    3)您在 fragment 中使用这个“onRequestPermissionsResult(...”)它可以工作。

关于java - 运行时权限问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39194062/

相关文章:

java - Collections.max(array) 不工作 - Java

java - JAVA如何根据某些参数返回列表中对象出现的次数

android - 在 Android 中使用具有多个布局的单个 fragment

android - 使用抽屉导航错误膨胀类 android 2.2

android - 第一次加载 fragment 时软件键盘不会出现

java - 如何防止每次设备方向更改时我的小部件重新更新?

java - Java 9 中的可靠配置

android - 如果多行符合特定条件,则将它们合并到 ListView 中?

android - 多个 aChartEngine 图表不滚动

机器人 : sax Xml parsing