2016-06-07 126 views
-1

我試圖讀取Android Level-23上的短消息,但它不顯示運行時權限。它有什麼問題。Android Runtime權限總是被拒絕

我的代碼是

public class MainActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback { 

    private static final int PERMISSION_REQUEST_SMS = 0; 
    private static final String TAG = MainActivity.class.getName(); 

    private View mLayout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main  ); 
     mLayout = findViewById(R.id.main_layout); 

     showAllSMS(); 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, 
             int[] grantResults) { 
     Log.i(TAG, "onRequestPermission Result = "+grantResults[0]); 
     if (requestCode == PERMISSION_REQUEST_SMS) { 
      // Request for camera permission. 
       if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       Log.i(TAG, "onRequestPermission Result 1"); 
       // Permission has been granted. Start camera preview Activity. 
       Snackbar.make(mLayout, "Camera permission was granted. Starting preview.", 
        Snackbar.LENGTH_SHORT) 
        .show(); 
       readSMS(); 
      } else { 
       // Permission request was denied. 
       Snackbar.make(mLayout, "Camera permission request was denied.", 
        Snackbar.LENGTH_LONG) 
        .show(); 

      } 
      } 
     // END_INCLUDE(onRequestPermissionsResult) 
    } 

    private void showAllSMS() { 
     Log.i(TAG, "================="); 
     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) 
      == PackageManager.PERMISSION_GRANTED) { 
      Log.i(TAG, "================= 1"); 
     // Permission is already available, start camera preview 
      Snackbar.make(mLayout, 
       "Camera permission is available. Starting preview.", 
       Snackbar.LENGTH_LONG).show(); 
       readSMS(); 
     } else { 
      Log.i(TAG, "================= 2"); 
      // Permission is missing and must be requested. 
      requestReadSMSPermission(); 
     } 
     // END_INCLUDE(startCamera) 
    } 

/** 
* Requests the {@link android.Manifest.permission#CAMERA} permission. 
* If an additional rationale should be displayed, the user has to launch the request from 
* a SnackBar that includes additional information. 
*/ 
     private void requestReadSMSPermission() { 
    // Permission has not been granted and must be requested. 
     if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
       Manifest.permission.READ_SMS)) { 
     // Provide an additional rationale to the user if the permission was not granted 
     // and the user would benefit from additional context for the  use of the permission. 
     // Display a SnackBar with a button to request the missing permission. 
      Snackbar.make(mLayout, "Camera access is required to display the camera preview.", 
        Snackbar.LENGTH_INDEFINITE).setAction("OK", new  View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
       // Request the permission 
        ActivityCompat.requestPermissions(MainActivity.this, 
         new String[]{Manifest.permission.READ_SMS}, 
         PERMISSION_REQUEST_SMS); 
       } 
      }).show(); 

     } else { 
      Snackbar.make(mLayout, 
       "Permission is not available. Requesting camera permission.", 
        Snackbar.LENGTH_LONG).show(); 
     // Request the permission. The result will be received in  onRequestPermissionResult(). 
      ActivityCompat.requestPermissions(this, new String[]  {Manifest.permission.CAMERA}, 
        PERMISSION_REQUEST_SMS); 
     } 
    } 

    private void readSMS() { 
     Log.d(TAG, "REad smsm"); 
    } 
} 

它總是顯示我「相機許可請求被拒絕。」。它是從Android樣本中複製的。具有相機許可的真實代碼工作得非常好。

請解釋。

+0

你有清單權限 –

+0

你是否在AndroidManifest.xml中添加了權限? – user3024215

+0

是的,我做到了。我在manifest.xml中擁有權限 –

回答

0

更改這行代碼,似乎你正在請求相機權限,而不是SMS讀取和接收權限,它不會被添加到您的清單。

ActivityCompat.requestPermissions(this, new String[]  {Manifest.permission.CAMERA}, 
       PERMISSION_REQUEST_SMS); 

並請清理你的代碼,每個人都認爲你想使用相機。

1

您正在試圖獲得運行許可Read_SMS權限以及您需要更改requestReadSMSPermission()其他條件。如果該設備是上M或以上

private void requestReadSMSPermission() { 
      // Permission has not been granted and must be requested. 
      if() { 
//your existing code 
       } else { 
       Snackbar.make(mLayout, 
         "Permission is not available. Requesting Read SMS.", 
         Snackbar.LENGTH_LONG).show(); 
       // Request the permission. The result will be received in  onRequestPermissionResult(). 
       ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_SMS}, 
         PERMISSION_REQUEST_SMS); 
      } 
     } 
0

以下權限只請求。在較舊的平臺上,這些權限不被請求並且不可用。

<uses-permission-sdk-m android:name="android.permission.READ_CONTACTS" /> 
<uses-permission-sdk-m android:name="android.permission.WRITE_CONTACTS" />