Android 在没有用户交互的情况下不发送短信
Android doesn't send SMS message without user interaction
我正在开发一个 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);
但是,当该应用运行时,该消息仍保留在默认短信应用中,没有发送。我进入默认应用程序,然后一个一个地触摸它发送。
这是我的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
}
我该如何解决这个问题?
要使用默认提供程序发送消息,您需要使用 "null" 作为提供程序参数
像这样
smsManager.sendTextMessage( sms.getNumber(), null, sms.getContent(), sentPI, deliveredPI);
我正在使用这个
smsManager.sendTextMessage(number, null, message, null, null);
在我的一个应用程序中,它工作得很好。
注意:23+ 应用程序需要在清单中包含元素,但您还必须在运行时向 Android 6.0+ 设备上的用户请求这些权限,使用
checkSelfPermission()
和
requestPermissions()
我终于找到了解决办法……我就是这么想的。问题是我试图从另一个线程发送短信。假定从 Main Ui Thread 发送。
Google 提供的代码仅在 UI 主线程中有效。目前我正在尝试使用一项服务来查看是否有效!
我正在开发一个 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);
但是,当该应用运行时,该消息仍保留在默认短信应用中,没有发送。我进入默认应用程序,然后一个一个地触摸它发送。
这是我的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
}
我该如何解决这个问题?
要使用默认提供程序发送消息,您需要使用 "null" 作为提供程序参数 像这样
smsManager.sendTextMessage( sms.getNumber(), null, sms.getContent(), sentPI, deliveredPI);
我正在使用这个
smsManager.sendTextMessage(number, null, message, null, null);
在我的一个应用程序中,它工作得很好。
注意:23+ 应用程序需要在清单中包含元素,但您还必须在运行时向 Android 6.0+ 设备上的用户请求这些权限,使用
checkSelfPermission()
和
requestPermissions()
我终于找到了解决办法……我就是这么想的。问题是我试图从另一个线程发送短信。假定从 Main Ui Thread 发送。 Google 提供的代码仅在 UI 主线程中有效。目前我正在尝试使用一项服务来查看是否有效!