我有一个允许用户发送图片的应用程序。这张照片可以通过多种不同的方式发送,如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上,没有短信选项。但是,我可以手动调出内置的文本消息实用程序,添加图片然后发送它。我还从市场上下载了一个短信/彩信应用程序,然后从列表中可以选择使用这个第三方程序发送图片。
那么,为什么文本消息传递不是Droid Incredible的可用选项?我需要做些什么来使它成为一个选项,如何使用我无法访问的手机类型来评估这个问题(或者解决问题)?
答案 0 :(得分:2)
那么,为什么文本消息传递不是Droid Incredible的可用选项?
因为他们选择不提供它。
我需要做些什么来使它成为一个选项
在摘要中,你不能。
引用Android Compatibility Definition Document:
Android上游项目定义了许多核心应用程序,例如电话拨号器,日历,通讯录,音乐播放器等。设备 实施者可以用替代版本替换这些应用程序。
但是,任何此类替代版本必须遵守上游项目提供的相同Intent模式。例如,如果设备包含 替代音乐播放器,它仍然必须尊重第三方应用程序发出的Intent模式来挑选歌曲。
问题是,Messenger应用程序不被Google视为“核心应用程序”。因此,欢迎设备制造商使用自己的Intent
过滤器添加自己的SMS客户端。对于HTC Incredible,显然他们没有通过image/png
ACTION_SEND
Intent
支持MMS。
现在,恕我直言,Messenger可能应该是一个核心应用程序。但是,你的观点和我的观点并没有像现在这样改变现实。
如何使用我无法访问的手机类型评估此问题(或未知问题)
您重新定义了应用程序,使其不是“问题”。您无法保证可以通过这种方式发送彩信,就像您无法保证用户安装了Facebook应用一样。
我对MMS知之甚少,并且不确定是否有ACTION_SEND
以外的方式发送彩信。您可以考虑将源代码戳到Messenger应用程序,看看它是如何做到的。然后,将功能直接烘焙到您的应用中。这需要一些额外的权限(SEND_SMS
,可能还需要READ_CONTACTS
),并且写入会很烦人,但它更有可能跨设备工作。
答案 1 :(得分:2)
由于其他一些关于SO的问题的帮助,我确实设法解决了这个问题。
基本上关键是确定HTC使用的意图,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);