Java 处理应用程序使用Intent.ACTION\u SEND时手机之间的差异
我有一个应用程序,允许用户发送图片。这张照片可以通过多种不同的方式发送,比如g-mail、facebook、flickr,还有我感兴趣的一种方式,短信。运行以下代码时,会弹出一个对话框,其中包含许多可用选项Java 处理应用程序使用Intent.ACTION\u SEND时手机之间的差异,java,android,sms,mms,Java,Android,Sms,Mms,我有一个应用程序,允许用户发送图片。这张照片可以通过多种不同的方式发送,比如g-mail、facebook、flickr,还有我感兴趣的一种方式,短信。运行以下代码时,会弹出一个对话框,其中包含许多可用选项 Uri uri = Uri.fromFile(new File(externalDirectory + FILE_DIRECTORY + fileName)); Intent intent = new Intent(Intent.ACTION_SEN
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上,显示了短信选项,该代码完美地将图片添加到彩信中
在emulator上,文本消息是自动选择的(因为没有其他选项),它再次非常有效
在我的Droid上,没有短信选项。但是,我可以手动打开内置的短信工具,添加图片,然后发送。我还从市场上下载了一个SMS/MMS应用程序,之后可以从列表中选择使用这个第三方程序发送图片
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);
那么,为什么在Droid上短信不是一个可用的选项呢?我需要做些什么才能让它成为一个选项,我如何评估我无法访问的电话类型的这个问题(或未知问题)
那么,为什么在Droid上短信不是一个可用的选项呢
因为他们选择不提供
我需要做什么才能让它成为一个选项
抽象地说,你不能
引用安卓系统:
Android上游项目定义了许多核心应用程序,如电话拨号器、日历、通讯录、音乐播放器等。装置
实现者可以用替代版本替换这些应用程序
但是,任何此类替代版本必须遵守上游项目提供的相同意图模式。例如,如果设备包含
替代音乐播放器,它仍然必须遵守第三方应用程序发出的选择歌曲的意图模式
问题是,谷歌并不认为Messenger应用程序是“核心应用程序”。因此,欢迎设备制造商使用自己的Intent
过滤器,加入自己的SMS客户端。在HTC Inclusible的案例中,显然他们没有通过图像/png
动作发送
意图
支持彩信
现在,IMHO,Messenger可能应该是一个核心应用程序。然而,你我的观点并没有改变今天的现实
对于我无法访问的电话类型,如何评估此问题(或未知问题)
重新定义应用程序,使其不再是“问题”。你不能保证你可以通过这种方式发送彩信,就像你不能保证用户安装了Facebook应用一样
我对彩信了解不多,我不确定是否有其他方式发送彩信,而不是ACTION\u SEND
。您可能会考虑通过源代码向信使应用程序查看它是如何运行的。然后,将该功能直接烘焙到应用程序中。这将需要一些额外的权限(SEND_SMS
,可能还有READ_CONTACTS
),而且写起来会很烦人,但更可能跨设备工作
那么,为什么在Droid上短信不是一个可用的选项呢
因为他们选择不提供
我需要做什么才能让它成为一个选项
抽象地说,你不能
引用安卓系统:
Android上游项目定义了许多核心应用程序,如电话拨号器、日历、通讯录、音乐播放器等。装置
实现者可以用替代版本替换这些应用程序
但是,任何此类替代版本必须遵守上游项目提供的相同意图模式。例如,如果设备包含
替代音乐播放器,它仍然必须遵守第三方应用程序发出的选择歌曲的意图模式
问题是,谷歌并不认为Messenger应用程序是“核心应用程序”。因此,欢迎设备制造商使用自己的Intent
过滤器,加入自己的SMS客户端。在HTC Inclusible的案例中,显然他们没有通过图像/png
动作发送
意图
支持彩信
现在,IMHO,Messenger可能应该是一个核心应用程序。然而,你我的观点并没有改变今天的现实
对于我无法访问的电话类型,如何评估此问题(或未知问题)
重新定义应用程序,使其不再是“问题”。你不能保证你可以通过这种方式发送彩信,就像你不能保证用户安装了Facebook应用一样
我对彩信了解不多,我不确定是否有其他方式发送彩信,而不是
ACTION\u SEND
。您可能会考虑通过源代码向信使应用程序查看它是如何运行的。然后,将该功能直接烘焙到应用程序中。这将需要一些额外的权限(SEND_SMS
,可能还有READ_CONTACTS
),写起来会很烦人,但更可能跨设备工作。多亏了其他一些问题的帮助,我确实找到了解决方法
基本上,关键在于确定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);
多亏了其他一些问题的帮助,我终于想出了解决这个问题的办法 基本上,关键在于确定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);
那是一份有趣的文件。看起来谷歌在这方面有很大的灵活性,这可能是好事,也可能是坏事。谢谢你的详细介绍