【问题标题】:uid does not have android.permission.SEND_SMS [duplicate]uid 没有 android.permission.SEND_SMS [重复]
【发布时间】:2019-03-18 04:47:27
【问题描述】:

我正在尝试从一个模拟器向另一个模拟器发送消息 (SMS):

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="eheio.com.exo2">

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


    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

发送消息方法:

public void sendMessage(View view) {
        EditText number = findViewById(R.id.number);
        EditText message = findViewById(R.id.message);
        try {
            SmsManager smsManager = SmsManager.getDefault();
            smsManager.sendTextMessage(number.getText().toString(), null, message.getText().toString(), null, null);
            Toast.makeText(getApplicationContext(), "SMS Sent!", Toast.LENGTH_LONG).show();
        } catch (Exception e) {
            Toast.makeText(getApplicationContext(), "SMS failed, please try again later!", Toast.LENGTH_LONG).show();
            e.printStackTrace();
        }
    }

我收到以下异常:

java.lang.SecurityException:发送短信:uid 10082 没有 android.permission.SEND_SMS。

【问题讨论】:

  • 如果你的目标是API23及以上是危险权限,需要运行时权限请求。

标签: java android mobile android-emulator


【解决方案1】:

对于初学者,您可以通过以下操作检查您的应用授予了哪些权限:

adb shell dumpsys package <your package>

你会看到类似的东西:

grantedPermissions:
  android.permission.MANAGE_ACCOUNTS
  android.permission.WRITE_SYNC_SETTINGS
  android.permission.RECEIVE_BOOT_COMPLETED

android.permission.SEND_SMS 权限为dangerous 保护级别。这意味着从 API 23 开始,您需要提示用户接受许可。在清单中声明它的用途是不够的。你可以在这里阅读: https://developer.android.com/guide/topics/permissions/overview#dangerous-permission-prompt

【讨论】:

    【解决方案2】:

    android.permission.SEND_SMS 是危险的保护级别。所以在清单中声明&lt;uses-permission android:name="android.permission.SEND_SMS"/&gt; 是不够的。 因此,在 API 级别 23 以上,您需要在应用运行时提示用户接受权限。

    你可以试试下面的代码:

    SmsManager smsManager = SmsManager.getDefault();
    ActivityCompat.requestPermissions(this,new String[] { Manifest.permission.SEND_SMS}, 1);
    smsManager.sendTextMessage(strPhoneNo, null, strMessage, null, null);
    

    【讨论】:

      猜你喜欢
      • 2017-02-24
      • 2017-05-14
      • 1970-01-01
      • 2016-03-07
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-28
      相关资源
      最近更新 更多