簡體   English   中英

短信權限

[英]SMS Permissions

我正在通過 android studio 構建一個 Android 應用程序。 該應用程序的一個主要功能是發送短信,但由於權限錯誤,我似乎無法讓它在不同的設備上正確運行。我試圖通過在用戶登錄時提示權限來消除這個問題,但這在 API 版本 13 和26 失敗,我用build.versioncode.o.試過了build.versioncode.o. 但他的也失敗了。 執行此操作並在每次發送短信時檢查權限的正確方法是什么?(注意短信是從整個應用程序的許多不同功能發送的。

我在發送消息時也剛收到此錯誤

java.lang.SecurityException: Neither user 10205 nor current process has android.permission.READ_PHONE_STATE.

登錄時請求權限

@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
private void getPermissionToReadSMS() {
    if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.SEND_SMS)
            != PackageManager.PERMISSION_GRANTED) {
        if (shouldShowRequestPermissionRationale(
                android.Manifest.permission.READ_SMS)) {
            Toast.makeText(this, "Please allow permission!", Toast.LENGTH_SHORT).show();
        }
        requestPermissions(new String[]{android.Manifest.permission.READ_SMS},
                REQUEST_READ_SMS);
    }
}

發送方法的方法片段

    SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(testContact.getNumber(), null, "SENT MESSAGE" + message, sentPending, deliveredPending);

應用清單

 <!-- grant permission to uses in build sms service -->
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission-group.SMS" />

對於checkPermission發送短信,您需要添加<uses-permission android:name="android.permission.SEND_SMS" />權限和以下代碼,用於> = 23 api

 protected void sendSMS() {
     if (ContextCompat.checkSelfPermission(this,
             Manifest.permission.SEND_SMS)
             != PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                   Manifest.permission.SEND_SMS)) {
                } else {
                   ActivityCompat.requestPermissions(this,
                      new String[]{Manifest.permission.SEND_SMS},
                      PERMISSION_REQUEST_SEND_SMS);
                }
          }
}
 @Override
   public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {
      switch (requestCode) {
         case PERMISSION_REQUEST_SEND_SMS: {
            if (grantResults.length > 0
               && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                  SmsManager smsManager = SmsManager.getDefault();
                  smsManager.sendTextMessage(phoneNo, null, message, null, null);
                  Toast.makeText(getApplicationContext(), "SMS sent successfully.", 
                     Toast.LENGTH_LONG).show();
            } else {
               Toast.makeText(getApplicationContext(), 
                  "SMS faild", Toast.LENGTH_LONG).show();
               return;
            }
         }
      }

   } 
 //You should declare this in your project
private static String[] PERMISSIONS_STORAGE = {

            Manifest.permission.READ_PHONE_STATE,
            Manifest.permission.READ_SMS,
            Manifest.permission.RECEIVE_SMS,
            Manifest.permission.SEND_SMS,

    };

//並在您要驗證的地方調用verifymethod(驗證存儲權限(Activity_home.this);

//and the verifyStoragePermissions methode is  
 public static void verifyStoragePermissions(Activity activity) {
        int readPermission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_PHONE_STATE);
        int smspermission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_SMS);
        int smspermission1 = ActivityCompat.checkSelfPermission(activity, Manifest.permission.RECEIVE_SMS);
        int smssendpermission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.SEND_SMS);

        if (readPermission != PackageManager.PERMISSION_GRANTED || readPermission != PackageManager.PERMISSION_GRANTED || smspermission != PackageManager.PERMISSION_GRANTED || smspermission1 != PackageManager.PERMISSION_GRANTED  || smssendpermission != PackageManager.PERMISSION_GRANTED) {userActivityCompat.requestPermissions(activity,PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE );
        }
    }

我從一個片段發送它。 上面@Android Team 給出的解決方案僅適用於我第一次。 顯然,如果應用程序具有所需的權限,它不會調用 onRequestPermissionsResult。

使用以下代碼(我的應用程序需要在 onlclick 處理程序中使用 log msg "Have permission.." 的其他部分才能工作)。 我正在使用 Android 11 設備。

       if (ContextCompat.checkSelfPermission(getContext(),
            Manifest.permission.SEND_SMS)
            != PackageManager.PERMISSION_GRANTED) {
        //if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
        if (shouldShowRequestPermissionRationale(
                Manifest.permission.SEND_SMS)) {
        } else {
            //ActivityCompat.requestPermissions(getActivity(),
            requestPermissions(
                    new String[]{Manifest.permission.SEND_SMS},
                    MY_PERMISSIONS_REQUEST_SEND_SMS);
        }
    } else {
        Log.i("smsB", "Have permission... send the sms now");
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage(phoneNo, null, message, null, null);
        Toast.makeText(getContext(), "SMS sent.",
                Toast.LENGTH_LONG).show();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM