2016-08-02 81 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

噢,對不起。哈哈哈非常感謝你! –