在飞行模式下从非默认短信应用程序发送文本

时间:2017-02-05 17:06:41

标签: android android-contentresolver smsmanager

我能够在我的应用程序中发送和接收文本 - 但无意成为默认的短信应用程序。

仅限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;
    }
}

0 个答案:

没有答案