1

我有一个允许用户发送图片的应用程序。这张图片可以通过多种不同的方式发送,比如 g-mail、facebook、flickr,还有我感兴趣的一种,短信。运行以下代码时,会弹出一个对话框,其中包含许多可用的选项。

       Uri uri = Uri.fromFile(new File(externalDirectory + FILE_DIRECTORY + fileName));      
        Intent intent = new Intent(Intent.ACTION_SEND); 
        intent.putExtra(Intent.EXTRA_STREAM, uri);
        intent.setType("image/png"); 
        startActivity(intent);

在我的 Droid X 上,显示了短信选项,这段代码完美地将图片添加到了彩信中。

在模拟器上,自动选择文本消息(因为没有其他选项),它再次运行良好。

在我的 Droid Incredible 上,没有短信选项。但是,我可以手动调出内置的短信实用程序,添加图片然后发送。我还从市场上下载了一个 SMS/MMS 应用程序,然后可以从列表中选择使用这个 3rd 方程序发送图片的选项。

那么,为什么 Droid Incredible 上没有可用的短信选项呢?我需要做什么才能使其成为一个选项,以及如何使用我无法访问的电话类型评估此问题(或未知问题)?

4

2 回答 2

2

那么,为什么 Droid Incredible 上没有可用的短信选项呢?

因为他们选择不提供。

我需要做什么才能使其成为一种选择

抽象地说,你不能。

引用 Android兼容性定义文档

Android 上游项目定义了一些核心应用,例如电话拨号器、日历、通讯录、音乐播放器等。设备实施者可以用替代版本替换这些应用程序。

但是,任何此类替代版本都必须遵循上游项目提供的相同 Intent 模式。例如,如果设备包含替代音乐播放器,它仍必须遵循第三方应用程序发布的 Intent 模式来挑选歌曲。

问题是,Messenger 应用程序不被 Google 视为“核心应用程序”。因此,欢迎设备制造商包含他们自己的 SMS 客户端和他们自己的Intent过滤器。就 HTC Incredible 而言,显然它们不包括通过image/png ACTION_SEND Intent.

现在,恕我直言,Messenger 可能应该是一个核心应用程序。然而,你和我的观点并没有改变今天的现实。

如何使用我无法访问的电话类型评估此问题(或未知问题)

您重新定义您的应用程序,使其不是“问题”。您无法保证可以通过这种方式发送彩信,就像您无法保证用户安装了 Facebook 应用程序一样。

我对彩信了解不多,不确定除了ACTION_SEND发送彩信之外是否还有其他方法。您可能会考虑浏览 Messenger 应用程序的源代码,看看它是如何工作的。然后,将功能直接烘焙到您的应用程序中。这将需要一些额外的权限(SEND_SMS和可能READ_CONTACTS)并且编写起来会很烦人,但它更有可能跨设备工作。

于 2011-01-08T20:28:39.603 回答
2

多亏了其他一些关于 SO 的问题的帮助,我确实设法解决了这个问题。

基本上,关键是确定 HTC 使用的意图,这似乎是(目前)唯一修改了 android.intent.action.SEND Intent 的公司。这是将选项添加到列表的代码。

Uri uri = Uri.fromFile(new File(mFile));  
Intent intent = new Intent(Intent.ACTION_SEND); 
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setType("image/png"); 

Intent htcIntent = new Intent("android.intent.action.SEND_MSG");
htcIntent.setType("image/png");
htcIntent.putExtra(Intent.EXTRA_STREAM, uri);

Intent chooser = Intent.createChooser(intent, "Send Method");
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { htcIntent });
startActivity(chooser);
于 2011-01-13T02:37:03.823 回答