调试意图

Ric*_*ich 9 java android android-intent

我之前问过一个问题,当我发送一个带有ACTION_SEND和MIME类型"image/png"的Intent时,会出现在IntentChooser中的内容.问题是,有些手机带有一个默认的消息应用程序没有出现在列表中,包括我的(myTouch 4G)以及通过电子邮件(使用HTC EVO)与之交谈的用户.如果我从内置图库应用程序或我保存的同一图像上的其他应用程序中选择"发送"或"共享"选项,并尝试直接从我的应用程序发送,则消息将显示在列表中.从我的应用程序它没有.其他手机没有这个问题,所以它显然是一个平台特定的东西.但这并不意味着我应该忽略这个问题.

所以,我去解决这个问题.我在我的应用程序中注册了一个活动以接收相同类型的意图,然后点击断点来分析从两种不同的发送方式发送的Intent对象.

问题是,我发送的意图和从Gallery或AndroZip发送的意图(消息确实出现在选择器中)似乎是相同的.它们都具有相同的动作,相同的类别,相同的标志,相同的mime类型.还有什么我可以在Gallery或AndroZip上的Intent上检查一下我是否可以添加更多信息,我可以添加到我的Intent中,以便在选择器中显示默认消息传递应用程序?

Reu*_*ton 8

问题是HTC Sense手机特有的,因为它们的Gallery和Messaging应用程序与库存应用程序不同.

具体来说,从Gallery发送到Messaging的Intent具有与之android.intent.action.SEND_MSG不同的动作android.intent.action.SEND.与股票消息传递应用程序不同,Sense消息传递应用程序无法处理SEND.

那么问题就变成了,Sense Gallery应用程序如何创建一个结合了SEND和SEND_MSG的活动选择器对话框?

我已经完成了一些研究并且最终得到了......下面的代码可以工作,但是对话框中的"消息"条目显示在顶部而不是按照字母顺序排列.毫无疑问,对意图的更多研究会纠正这一点,但至少这有效:

    // Create a chooser for things that can ACTION_SEND images
    Intent intent = new Intent(Intent.ACTION_SEND);
    Uri data = Uri.parse("content://media/external/images/media/98");
    intent.putExtra(Intent.EXTRA_STREAM, data);
    intent.setType("image/jpeg");
    Intent chooser = Intent.createChooser(intent, "Blah");

    // Add the stupid HTC-Sense-specific secondary intent
    Intent htcIntent = new Intent("android.intent.action.SEND_MSG");
    htcIntent.putExtra(Intent.EXTRA_STREAM, data);
    htcIntent.setType("image/jpeg");  
    chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { htcIntent });

    // Show the chooser
    startActivity(chooser);
Run Code Online (Sandbox Code Playgroud)