我有以下用于打开发送短信窗口的代码:
Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.putExtra("sms_body", msgString);
sendIntent.setType("vnd.android-dir/mms-sms");
activity.startActivity( sendIntent );
上面的代码避免了当有两个应用程序注册用于发送短信时Android显示的“使用完整操作”对话框。
此代码适用于某些设备上的错误,因此是否有任何通用解决方案可以在所有设备上运行,打开发送短信屏幕而不显示“使用完整操作”对话框。
答案 0 :(得分:1)
请尝试此代码
public void sendSMS()
{
SmsManager sm = SmsManager.getDefault();
String number = "123456789";
String msg = "Hello";
sm.sendTextMessage(number, null, msg, null, null);
}
答案 1 :(得分:1)
使用以下代码
private void send() {
Intent shareIntent = new Intent(Intent.ACTION_VIEW);
shareIntent.setType("vnd.android-dir/mms-sms");
shareIntent.putExtra("sms_body", "hello this is test");
List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(shareIntent, 0);
if (!resInfo.isEmpty()) {
for (ResolveInfo resolveInfo : resInfo) {
String packageName = resolveInfo.activityInfo.packageName;
if (packageName.equals("com.android.mms")) {
shareIntent.setPackage(packageName);
break;
} else {
// Else show chooser
}
}
startActivity(shareIntent);
}
}
针对特定活动的更新。
com.android.mms
申请,.ui.ConversationComposer
和ui.ComposeMessageMms
共有两项活动。您只能使用其中两个。正如我上面的回答,这是使用.ui.ConversationComposer
。所以要在代码下面使用第二个活动。
try {
Intent shareIntent = new Intent(Intent.ACTION_VIEW);
shareIntent.setType("vnd.android-dir/mms-sms");
shareIntent.putExtra("sms_body", "hello this is test");
shareIntent.setComponent(new ComponentName("com.android.mms","com.android.mms.ui.ComposeMessageMms"));
startActivity(shareIntent);
} catch (ActivityNotFoundException exception) {
// This will happen if Device have no MMS application. Handle this exception.
}
这将显示Android默认应用程序发送彩信。
答案 2 :(得分:0)
您可以在使用之前解决意图,以查看匹配的内容:
List<ResolveInfo> infos = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo info : infos) {
// Searching for a System installed package
if (info.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM > 0) {
intent.setComponent(new ComponentName(
info.activityInfo.applicationInfo.packageName,
info.activityInfo.name));
}
}
这尚未经过测试,但应该可以使用,因为标志'SYSTEM'显然是系统映像中应用的标志。
如果这不起作用,您可以获取列表中的第一项,或搜索包名称,例如google
或android
,或查看preferredOrder
是否可以任何帮助。
queryIntentActivities
当然是queryIntentActivities
,ActivityInfo.FLAG_SYSTEM
是ApplicationInfo.FLAG_SYSTEM
。我写这篇文章的时候一定很累...