2013-03-14 49 views
0

我目前正在致力于启动程序活动(min SDK版本:7),并且偶然发现了一个严重问题。是否有任何高效方法由我可以访问/打开默认应用(如拨号器,浏览器,短信对话列表,电子邮件客户端,系统设置等),这是在不同的设备中找到(像三星HTC索尼LG摩托罗拉等),但有不同的软件包名称秒。如何在不同设备上访问/打开默认应用程序

我知道,我可以通过调用的意图访问它们,比如我可以打开默认短信客户端像这样:

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

但包名称不同,当涉及到不同的制造商(像的那些以上提及) 即,在打开Motorola装置的SMS客户端的情况下的代码改变,以便:

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); 

回答

0

使用implicit意图(而不是明确的意图)。

在你的情况,你会使用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应用的用户。

+0

谢谢史蒂芬,但我不想让我的用户到任何第三方的短信应用程序。我只想将他/她引导至设备提供的默认应用程序(本例中为短信客户端)。 – Sathya 2013-03-14 07:31:06

+0

如果用户没有安装任何第三方应用程序,则隐式意图将引导他/她直接访问该默认系统应用程序。如果用户确实安装了第三方应用程序,则会要求用户做出选择,但我不明白为什么会这么糟糕。为什么作为用户被迫使用默认的系统短信应用程序时,我每天使用不同的系统?无论如何,我想你可以先尝试明确的意图(至少你知道的意图),如果那些不在那里,你可以回到隐含的意图。 – 2013-03-14 07:40:43

相关问题