1

我想發送運行時權限的sms目標版本24。它在Redmi Mi 3s設備中提供SecurityException,但在其他設備上運行Marshmallow OS。紅米電話的運行時權限

final int REQ_CODE = 100; 
void requestPermission(){ 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { 
     CTLogs.printLogs("Permission is not granted, requesting"); 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS,Manifest.permission.READ_SMS,Manifest.permission.RECEIVE_SMS}, REQ_CODE); 
     // button.setEnabled(false); 
    } else { 
     CTLogs.printLogs("Permission has been granted"); 
     sendSMS(); 
    } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    if (requestCode == REQ_CODE) { 
     if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      CTLogs.printLogs("Permission has been granted"); 
      sendSMS(); 
      } else { 
      CTLogs.printLogs("Permission denied !!!"); 
     } 
    } 
} 
+0

您是否在清單中添加權限並且您的應用程序是默認消息應用程序? –

+0

是的,我還在清單文件 – Pratik

+0

Pratik

回答

1

試試這個:

// The permission required by the application to work properly 
    protected static final String[] requiredPermissions; 
    private static final int PERMISSION_REQUEST = 0; 

    static { 
     List<String> perms = new ArrayList<>(Arrays.asList(
       Manifest.permission.RECEIVE_SMS, 
       Manifest.permission.READ_SMS, 
       Manifest.permission.SEND_SMS 
     )); 
     requiredPermissions = perms.toArray(new String[perms.size()]); 
    } 

呼叫verifyPermissions在onCreate()方法():

private void verifyPermissions() { 
     if (!hasAllPermissions()) { 
      // We don't have permission so prompt the user 
      ActivityCompat.requestPermissions(
        this, 
        requiredPermissions, 
        PERMISSION_REQUEST 
      ); 
     } 
    } 

    private boolean hasAllPermissions() { 
     // Check if we have all required permissions. 
     for (String perm : requiredPermissions) { 
      if (ActivityCompat.checkSelfPermission(this, perm) != PackageManager.PERMISSION_GRANTED) { 
       return false; 
      } 
     } 
     return true; 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, 
              String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case PERMISSION_REQUEST: { 
       // If request is cancelled, the result arrays are empty. 
       if (!hasAllPermissions()) { 
        finish(); 
       } 
       return; 
      } 
     } 
    } 
+0

很酷..Did我的答案幫你? – NewOne

0

一旦卸載應用程序,然後把這個再進行安裝。

if (ContextCompat.checkSelfPermission(MainActivity.this, 
      Manifest.permission.SEND_SMS) 
      != PackageManager.PERMISSION_GRANTED) { 


     ActivityCompat.requestPermissions(MainActivity.this, 
       new String[]{Manifest.permission.SEND_SMS}, 
       MY_PERMISSIONS_REQUEST_READ_CONTACTS); 
    } 
+1

如果可能,請給你的答案添加更多細節:) – BlackBeard