Java SMS接收权限的AndroidManifest.xml中存在基本错误

Java SMS接收权限的AndroidManifest.xml中存在基本错误,java,android,sms,android-manifest,android-permissions,Java,Android,Sms,Android Manifest,Android Permissions,我知道这已经被问了十几次了,但是我仍然得到了这个xml配置的权限错误。我已经搜索了其他对此的回应。我使用的是API级别23。有人能指出错误吗?错误是显而易见的: 09-12 09:13:40.016 1295-1309/?W/广播队列﹕ 拒绝许可: 接收意图{act=android.provider.Telephony.SMS_已接收 flg=0x8000010(有附加项)}到 com.example.richard.simplesstoast/.SmsReceiver需要 android.pe

我知道这已经被问了十几次了,但是我仍然得到了这个xml配置的权限错误。我已经搜索了其他对此的回应。我使用的是API级别23。有人能指出错误吗?错误是显而易见的:

09-12 09:13:40.016 1295-1309/?W/广播队列﹕ 拒绝许可: 接收意图{act=android.provider.Telephony.SMS_已接收 flg=0x8000010(有附加项)}到 com.example.richard.simplesstoast/.SmsReceiver需要 android.permission.RECEIVE_由于发件人com.android.phone(uid)发送的短信 (1001)



您的权限应该放在应用程序标签的外面和前面:

<uses-permission android:name="android.permission.RECEIVE_SMS" />

Android M(api 23)的问题在于:

快速视图

  • 如果您的应用程序以M Preview SDK为目标,则会提示用户在运行时授予权限,而不是在安装时授予权限
  • 用户可以随时从应用程序设置屏幕撤销权限
  • 你的应用程序每次运行时都需要检查它是否具有所需的权限
对于SMS案例文档,请举一个例子:

例如,假设一个应用程序在其清单中列出它需要 发送和接收短信权限,两者都属于 android.permission-group.SMS。当应用程序需要发送消息时,它会 请求“发送”SMS权限。系统向用户显示一个对话框 询问应用程序是否可以访问SMS的框。如果用户同意,则 系统授予应用程序所请求的发送短信权限。后来, 应用程序请求接收短信。系统自动授予此权限 权限,因为用户已在中批准了权限 相同的权限组

解决方案:

  • 正确的方式-首先请求权限
  • 惰性方式-设置targetSdk 22
    • 这对我来说很有效。。。 看看这个也许对你有帮助

      <application
          android:allowBackup="true"
          android:icon="@drawable/ic_launcher"
          android:label="@string/app_name"
          android:theme="@android:style/Theme.Holo.Light.DarkActionBar" >
          <activity
              android:name=".MainActivity"
              android:label="@string/app_name" >
              <intent-filter>
                  <action android:name="android.intent.action.MAIN" />
      
                  <category android:name="android.intent.category.LAUNCHER" />
              </intent-filter>
          </activity>
      
          <receiver android:name="packageName" >
              <intent-filter >
      
                  <action android:name="android.provider.Telephony.SMS_RECEIVED" />
              </intent-filter>
      
          </receiver>
      </application>
      
      
      

      @Richard Green你的Logcat投掷

      权限拒绝:接收意图{ act=android.provider.Telephony.SMS_接收flg=0x800010(具有额外功能) }到com.example.richard.simplesstoast/.SmsReceiver需要 android.permission.RECEIVE_由于发件人com.android.phone而发送的短信

      权限是限制访问部分代码或设备上数据的限制。该限制旨在保护可能被误用以扭曲或破坏用户体验的关键数据和代码

      我假设它的权限有问题

      请在下面加上 上述应用程序标记

         <uses-permission android:name="INTERNET"/>
         <uses-permission android:name="ACCESS_NETWORK_STATE"/>
         <uses-permission android:name="android.permission.WRITE_SMS" />
         <uses-permission android:name="android.permission.READ_SMS" />
         <uses-permission android:name="android.permission.RECEIVE_SMS" />
      
      
      

      我希望它能帮助您。

      首先,必须在AndroidManifest.xml中声明接收SMS权限

      ...
      <uses-permission android:name="android.permission.RECEIVE_SMS" />
      ...
      <receiver
          android:name=".receiver.IncomingSmsReceiver"
          android:enabled="true"
          android:exported="true">
          <intent-filter>
              <action android:name="android.provider.Telephony.SMS_RECEIVED" />
          </intent-filter>
      </receiver>
      
      希望这对您有所帮助。

      • 如果您的目标是棉花糖,那么除了清单之外,您还必须请求运行时权限
      舱单-

          <uses-permission android:name="android.permission.RECEIVE_SMS"/>
      <uses-permission android:name="android.permission.READ_SMS" />
      

      WRTIE_SMS权限出错

      请尝试将您的设置放在tag@Vaibhav .. 我试过。。。我把它放在了各种各样的地方:-/试着对你的接收器做以下更改,如果你正在阅读短信,你可能还想添加@Vaibhav。。。不:-(“嘿,我的许可到哪里去了?”:非常肯定我几天前就试过了;今晚我在安装SDK的PC上工作时将重新尝试。
      在此处输入代码
      我通常不会对答案加上1的注释,但由于开放的悬赏,我不得不说这是正确的答案。我不确定Android将如何管理与旧应用程序的兼容性发布M时在其上运行,但长期修复需要在整个代码中添加权限检查。首先,对于第一篇帖子来说,这不是一个糟糕的答案。我要指出的是,海报确实正确设置了权限,问题出在API23上。无需重复。此外,这也是将问题标记为重复问题的最佳时机。例如当然,它是在9月份被问到并回答正确的,所以可能不是。无论如何,有人授予了赏金,所以可能是时候放手了,除非你有什么真正令人兴奋的事情要补充。谢谢@Roy Falk,这是我遇到API23时遇到的问题。我花了一段时间四处寻找解决方案,所以我在这里分享,希望它能帮助其他人。@DaoDucDuy Pe你能详细说明你的答案吗?现在还不清楚。
      public class MainActivity extends AppCompatActivity {
      
          private static final int PERMISSIONS_REQUEST_RECEIVE_SMS = 0;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
              setSupportActionBar(toolbar);
      
              // Request the permission immediately here for the first time run
              requestPermissions(Manifest.permission.RECEIVE_SMS, PERMISSIONS_REQUEST_RECEIVE_SMS);
          }
      
      
          private void requestPermissions(String permission, int requestCode) {
              // Here, thisActivity is the current activity
              if (ContextCompat.checkSelfPermission(this, permission)
                      != PackageManager.PERMISSION_GRANTED) {
      
                  // Should we show an explanation?
                  if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
      
                      // Show an explanation to the user *asynchronously* -- don't block
                      // this thread waiting for the user's response! After the user
                      // sees the explanation, try again to request the permission.
                      Toast.makeText(this, "Granting permission is necessary!", Toast.LENGTH_LONG).show();
      
                  } else {
      
                      // No explanation needed, we can request the permission.
      
                      ActivityCompat.requestPermissions(this,
                              new String[]{permission},
                              requestCode);
      
                      // requestCode is an
                      // app-defined int constant. The callback method gets the
                      // result of the request.
                  }
              }
          }
      
          @Override
          public void onRequestPermissionsResult(int requestCode,
                                             String permissions[], int[] grantResults) {
              switch (requestCode) {
                  case PERMISSIONS_REQUEST_RECEIVE_SMS: {
                      // If request is cancelled, the result arrays are empty.
                      if (grantResults.length > 0
                              && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
      
                          // permission was granted, yay! Do the
                          // contacts-related task you need to do.
      
                          NotificationUtil.getInstance().show(this, NotificationUtil.CONTENT_TYPE.INFO,
                                  getResources().getString(R.string.app_name),
                                  "Permission granted!");
      
                      } else {
      
                          // permission denied, boo! Disable the
                          // functionality that depends on this permission.
      
                          NotificationUtil.getInstance().show(this, NotificationUtil.CONTENT_TYPE.ERROR,
                                  getResources().getString(R.string.app_name),
                                  "Permission denied! App will not function correctly");
                      }
                      return;
                  }
      
                  // other 'case' lines to check for other
                  // permissions this app might request
              }
          }
      }
      
          <uses-permission android:name="android.permission.RECEIVE_SMS"/>
      <uses-permission android:name="android.permission.READ_SMS" />
      
       final int REQ_CODE = 100;
      void requestPermission(){
          if (ActivityCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_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);
      
          } else {
              CTLogs.printLogs("Permission has been granted");
              readSMS();
          }
      }
      
      @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");
                  readSMS();
              } else {
                  CTLogs.printLogs("Permission denied !!!");
              }
          }
      }
      
      //Requesting permission
      private void requestWritePermission() {
          if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_SMS) == PackageManager.PERMISSION_GRANTED)
              return;
      
          if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_SMS)) {
              //If the user has denied the permission previously your code will come to this block
              //Here you can explain why you need this permission
              //Explain here why you need this permission
          }
          //And finally ask for the permission
          ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_SMS}, WRITE_SMS_PERMISSION_CODE);
      }