原創. 轉載請注明出處.
安卓:調用真正系統預設短信應用發短信. (含解決4.4系統環聊問題, 含調低版本apk調用高版本系統api)
public void sendSms() {
Uri uriTo = Uri.parse("smsto:10001");
String strMsg = "xxxx";
try {
// 參考資料:http://stackoverflow.com/questions/20079047/android-kitkat-4-4-hangouts-cannot-handle-sending-sms-intent
if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //if (Build.VERSION.SDK_INT >= 19 ? true : false) {
//Need to change the build to API 19
String defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(this); // String defaultSmsPackageName = getDefaultSmsPackage(this);
Intent sendIntent = new Intent(Intent.ACTION_SEND, uriTo); //Uri.parse("smsto:" + Uri.encode("10001")) // 一定會被忽略
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_TEXT, strMsg);
if (defaultSmsPackageName != null) {
sendIntent.setPackage(defaultSmsPackageName);
}
startActivity(sendIntent);
} else {
Intent sendIntent = new Intent(Intent.ACTION_VIEW, uriTo);
// 設定 強制使用系統預設短信應用發送短信
sendIntent.setPackage("com.android.mms");
sendIntent.putExtra("sms_body", strMsg); // Intent.EXTRA_TEXT // intent.putExtra("address", toContact.toString());
startActivity(sendIntent);
}
} catch (Exception e) {
// 防範 系統短信應用不存在,或者無法打開.
// 下面的方法隻 Intent.ACTION_VIEW 和Intent.ACTION_MAIN 不能過濾掉 QQ通訊錄
// 且 ACTION_MAIN 不能直接進入短信編輯頁面.智能打開短信應用
try {
Intent it = new Intent(Intent.ACTION_VIEW, uriTo); // Intent.ACTION_MAIN
it.setType("vnd.android-dir/mms-sms");
it.putExtra("sms_body", strMsg);
startActivity(it);
} catch (Exception e2) {
}
}
}
調用此函數, 可真正實作調用系統原本的短信應用發送短信.