没有用户交互,Android不会发送短信

时间:2017-09-05 21:49:48

标签: android sms android-permissions smsmanager

我正在开发一个发送短信的Android应用程序。运输代码是这个

清单:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.BIND_CARRIER_SERVICES" />
<uses-permission-sdk-23 android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission-sdk-23 android:name="android.permission.RECEIVE_SMS"/>
<uses-permission-sdk-23 android:name="android.permission.SEND_SMS"/>
<uses-permission-sdk-23 android:name="android.permission.INTERNET" />
<uses-permission-sdk-23 android:name="android.permission.BIND_CARRIER_SERVICES" />
<uses-permission-sdk-23 android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

代码:

     SmsManager smsManager
                    = SmsManager.getDefault();

            smsManager.sendTextMessage( sms.getNumber(), providerNumber,
                                        sms.getContent(), sentPI, deliveredPI);

但是当应用程序正常工作时,邮件仍保留在默认的SMS应用程序中,因为未发送。我要进入默认应用程序并逐个触摸它发送。

这是我的build.gradle

  apply plugin: 'com.android.application'

  repositories {
    jcenter()
  }

android {
    compileSdkVersion 23
    buildToolsVersion '25.0.3'
    defaultConfig {
        applicationId "xxxxxx.xxxxxxx"
        minSdkVersion 22
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"                            
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:23.4.0'
testCompile 'junit:junit:4.12'
compile 'com.github.kittinunf.fuel:fuel:1.4.0' //for JVM
compile 'com.github.kittinunf.fuel:fuel-android:1.4.0' //for Android
compile 'com.github.kittinunf.fuel:fuel-rxjava:1.4.0' //for RxJava support
}

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

要使用默认提供程序发送消息,您需要使用“null”作为提供程序参数 喜欢这个

smsManager.sendTextMessage( sms.getNumber(), null, sms.getContent(), sentPI, deliveredPI); 

我正在使用此

smsManager.sendTextMessage(number, null, message, null, null);

在我的一个应用程序中,这非常有效。

注意:23+应用程序需要在清单中包含元素,但您还必须在运行时从Android 6.0+设备上的用户请求这些权限,使用

等方法
checkSelfPermission() 

requestPermissions()

答案 1 :(得分:0)

最后我找到了解决方案......我想是的。麻烦的是我试图从另一个线程发送短信。它被假定从Main Ui Thread发送。 Google提供的代码仅适用于主UI线程。目前我正在尝试使用服务来查看是否有效!