2016-08-28 75 views
0

我不知道爲什麼,但我的運行時權限的代碼不起作用。不出現彈出。進度條顯示沒有我接受權限。問題與運行時權限

誰能幫幫我?

THNAKS提前每個人!

我告訴你我的代碼:!

@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; 
    } 

Code關於權限:

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(); 
        } 
       } 
      } 

     } 
+0

你的目標sdk是什麼?您正在測試的設備或虛擬設備的api級別是什麼? – Sufian

+0

如果你想要一個簡單易行的代碼,你可以添加一個類 https://github.com/mptrista/PermissionHelper – toshkinl

回答

0

什麼是你的tarketSdkVersion?

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

,並檢查您的應用程序,

移動「手機>設置>應用程序>您的應用程序>權限」

您拒絕您的許可。那麼你運行你的應用程序

+0

我的應用程序:minSdkVersion 15,targetSdkVersion 23 – pappa

+0

應用程序不顯示我彈出,因爲我的設備有權限在內存中.... – pappa

+0

什麼是你的Android操作系統版本?在構建應用程序(運行時許可)之前,您的手機正在安裝您的應用程序。刪除你的應用程序後,並建立你的應用程序。 – amuyu

1

請儘量將它的工作原理我的身邊。

  1. 我在片段中MyActivity

    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()使用(活動類),如使用聯繫人權限此

    @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(...」 它的工作原理片段中。

+0

我留在片段不在活動 – pappa

+0

use => ActivityCompat。requestPermissions(getActivity(),new String [] {Manifest.permission.WRITE_EXTERNAL_STORAGE},PERMS_REQUEST_CODE); –

+0

....而不是? – pappa

0
  1. 調試您的應用程序檢查,如果hasPermissions()函數返回 真或假的是真的,那麼你的應用程序已經有一個 允許它不會出現一個彈出。
  2. 檢查您的Manifest.xml文件。如果它具有定義的權限,並且您在API級別23以下運行,它仍然不會顯示彈出窗口。
  3. 在API級別爲23(棉花糖)及以上的設備上運行您的應用程序。

希望這可以解決您的問題。