You are simply comparing the result code with the wrong constant. SmsManager.sendMultipartTextMessage Javadoc clearly states the possible values returned by getResultCode() in the sentIntents translation:
The result code will be Activity.RESULT_OK for success, or one of these errors: RESULT_ERROR_GENERIC_FAILURE RESULT_ERROR_RADIO_OFF RESULT_ERROR_NULL_PDU
In my opinion, the STATUS_ON_ICC_xxx constants were added to the public API by mistake, because they are used only by hidden methods of the SmsManager class: copyMessageToIcc , deleteMessageFromIcc , etc.
UPDATE
However, this does not explain why you get 0 from getResultCode() . Since none of these constants is equal to zero ( Activity.RESULT_CANCEL = 0 , but this is not mentioned in the SmsManager javadoc). A quick search through Android Sources also does not give any idea that 0 might occur.
One possibility might be that some other application captures the sentIntent translation and calls setResultCode explicitly. However, until now I was sure that in Android it is impossible to prohibit sending SMS at the application level.
source share