簡體   English   中英

運行時權限問題

[英]issue with Runtime Permission

我不知道為什么,但是我的運行時權限代碼不起作用。 沒有出現彈出。 出現進度條,即表示我接受許可。

誰能幫我?

謝謝大家!

我給你看我的代碼:!

    @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中的Contact權限

     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. 像這樣在MyActivity(Activity Class)中使用onRequestPermission()

     @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. 如果您想在片段中使用onRequestPermission(),我們需要注意。

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

    2)FragmentCompat.requestPermissions(...)

    3)您可以在片段中使用此“ onRequestPermissionsResult(...)”。

您的tarketSdkVersion是什么?

需要運行時權限(23> = tarketSdkVerison)

並檢查您的應用,

移動“電話>設置>應用>您的應用>權限”

您拒絕您的許可。 然后您運行您的應用

  1. 調試您的應用程序,檢查hasPermissions()函數是否返回true或false,如果為true,則您的應用程序已經具有權限,不會顯示彈出窗口。
  2. 檢查您的Manifest.xml文件。 如果已定義權限,並且您在API級別23以下運行,則不會顯示彈出窗口。
  3. 在API級別23(棉花糖)及更高版本的設備上運行應用程序。

希望這能解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM