我能够在我的应用程序中发送和接收文本 - 但无意成为默认的短信应用程序。
仅限API 19+ - 因此android会自动负责添加到设备内容提供商。
然而,当手机无法发送(缺少信号,飞行模式等)时,文本仍将显示在其他应用程序中,因为"失败"甚至没有失败的图标。
如何防止"文本失败"从被发送到内容提供商?
最好不要检查飞机模式+蜂窝状态,而只是听取文本发送请求的结果。
我发送短信:
try {
SmsManager smsManager = SmsManager.getDefault();
ArrayList<String> divided = smsManager.divideMessage(text);
ArrayList<PendingIntent> sentIntents = new ArrayList<>();
for (int i = 0; i < divided.size(); i++) {
sentIntents.add(sentPendingIntent);
}
smsManager.sendMultipartTextMessage(address, null, divided, sentIntents, null);
Log.i(TAG, "SMS sent");
} catch (Exception e) {
Log.i(TAG, "SMS failed");
e.printStackTrace();
}
}
我通过注册的广播接收器听取成功/失败:
@Override
public void onReceive(Context context, Intent intent) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Toast.makeText(context, "SMS sent successfully", Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Toast.makeText(context, "Generic failure cause", Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Toast.makeText(context, "Service is currently unavailable", Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
Toast.makeText(context, "No pdu provided", Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Toast.makeText(context, "Radio was explicitly turned off", Toast.LENGTH_SHORT).show();
break;
}
}