2016-08-28 79 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(棉花糖)及以上的设备上运行您的应用程序。

希望这可以解决您的问题。