2016-06-07 118 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" />