Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理应用程序使用Intent.ACTION\u SEND时手机之间的差异_Java_Android_Sms_Mms - Fatal编程技术网

Java 处理应用程序使用Intent.ACTION\u SEND时手机之间的差异

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

我有一个应用程序,允许用户发送图片。这张照片可以通过多种不同的方式发送,比如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上,显示了短信选项,该代码完美地将图片添加到彩信中

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

那是一份有趣的文件。看起来谷歌在这方面有很大的灵活性,这可能是好事,也可能是坏事。谢谢你的详细介绍