0

我目前正在开发一个启动器活动(最低 SDK 版本:7),并偶然发现了一个严重的问题。是否有任何有效的方法可以访问/打开默认应用程序(如拨号器、浏览器、短信对话列表、电子邮件客户端、系统设置等),这些应用程序常见于不同的设备(如三星HTC索尼LGMotorola等),但具有不同的包名称。

我知道我可以通过调用意图来访问它们,例如我可以像这样打开默认 SMS 客户端

Intent intent = new Intent("android.intent.action.MAIN");
                intent.setComponent(new ComponentName("com.android.mms","com.android.mms.ui.ConversationList"));
                startActivity(intent);

但是当涉及到不同的制造商(如上面提到的那些)时,包名称会有所不同,即在打开摩托罗拉设备的短信客户端的情况下,代码会更改为:

Intent moto_intent = new Intent("android.intent.action.MAIN");
                intent.setComponent(new ComponentName("com.motorola.blur.conversations","com.motorola.blur.conversations.ui.ConversationList"));
                startActivity(moto_intent);
4

1 回答 1

0

使用隐式意图(而不是显式意图)。

在您的情况下,您将使用ACTION_SEND意图

Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra("address", "5551234567");
intent.putExtra("sms_body", "Hi mom");
// intent.putExtra(Intent.EXTRA_STREAM, imageUri);          
// intent.setType("image/jpeg");
startActivity(intent);

此方法也适用于喜欢使用自己的第三方 SMS 应用程序的用户。

于 2013-03-14T07:09:38.803 回答