2016-08-02 49 views
0

我在处理Android Marshmallow中的运行时权限时遇到了问题,而且我确实需要一只手。问题是当我拒绝运行时权限(当对话框出现时),应用程序崩溃。更详细地说,我正在运行的活动重新启动(我只是称它为应用程序崩溃?)。拒绝Android棉花糖崩溃中的运行时权限应用

下面是代码:

public void showContacts() { 

    if (CommonData.showLogs) { 
     Log.d(debugTag, "Show contacts button pressed. Checking permissions."); 
    } 

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) 
      != PackageManager.PERMISSION_GRANTED 
      || ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_CONTACTS) 
      != PackageManager.PERMISSION_GRANTED) { 

     requestContactsPermissions(); 
    } else { 

     if (CommonData.showLogs) { 
      Log.d(debugTag, "Contact permissions have already been granted. Displaying contact details."); 
     } 

     // Do my Stuff 
    } 
} 

private void requestContactsPermissions() { 

    if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
      Manifest.permission.READ_CONTACTS) 
      || ActivityCompat.shouldShowRequestPermissionRationale(this, 
      Manifest.permission.WRITE_CONTACTS)) { 

     Snackbar.make(rLParent, R.string.permission_contacts_rationale, 
       Snackbar.LENGTH_INDEFINITE) 
       .setAction(R.string.ok, new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 

         ActivityCompat 
           .requestPermissions(ImportContactsActivity.this, PERMISSIONS_CONTACT, 
             REQUEST_CONTACTS); 
        } 
       }) 
       .show(); 
    } else { 

     ActivityCompat.requestPermissions(ImportContactsActivity.this, PERMISSIONS_CONTACT, REQUEST_CONTACTS); 
    } 
} 

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


    if (requestCode == REQUEST_CONTACTS) { 

     if (PermissionUtil.verifyPermissions(grantResults)) { 

      // Do my Stuff 
     } else { 



      Snackbar.make(rLParent, R.string.permissions_not_granted, 
        Snackbar.LENGTH_SHORT) 
        .show(); 

     } 

    } else { 
     Log.d(debugTag, "Contacts permissions were NOT granted."); 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 

} 

什么我错在这里做什么? 任何帮助将不胜感激。非常感谢你!

+0

请发布您的LogCat崩溃报告 - 这是更容易确定问题的方式 –

+0

没有logcat崩溃报告先生。它将立即重新开始活动。 –

+0

是的,这是一个未处理的异常。通常,android会尝试在崩溃后立即启动该活动......在部署中,我建议您部署一些崩溃报告机制,例如crashlytics以处理用户设备上的崩溃。 – Kushan

回答

1

尝试使用Permission在Try-catch块内执行操作,并在发生SecurityException时显示消息或其他内容。

如......我用位置许可以下要求的权限后...

ERRORTEXT是在屏幕中心显示,以显示用户需要做一个TextView ...

  try { 

       LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); 


      }catch (SecurityException se){ 
       Log.d("FragmentCreate","You don't have permissions"); 

       errortext.setVisibility(View.VISIBLE); 
       errortext.setText("Please provide Location permission to continue, Settings->Apps->RecommendedApp->Permissions"); 
       Toast.makeText(this,"Please provide location permissions to continue",Toast.LENGTH_SHORT).show(); 
      } 

或者:

你也可以显示在catch块内dialogfragment一个按钮,用户带到你的app.You的设置屏幕可以做startActivityForResult(),等待返回的值,并检查是否该许可离子现在存在

+0

谢谢主席先生,我将致力于您提供的这种方法。 –

+0

没有先生,男人......只是一个普通的开发者:)无论如何,作为一般的经验法则,总是在try-catch内部执行冒险的操作来处理意外的结果... – Kushan

+0

噢,对不起。哈哈哈非常感谢你! –

相关问题