2012-01-30 64 views
4

我的应用程序包含一个发送功能,它显示用于发送文档的已安装程序的列表。它是这样做的:Android:google文档发送意图?

Intent sendIntent = new Intent(Intent.ACTION_SEND); 
sendIntent.setType("application/zip"); 
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+ docPath)); 
startActivity(Intent.createChooser(sendIntent, "Email")); 

像Gmail和Dropbox这样的应用程序出现在列表中,但Google Docs没有。在使用相同文档类型的竞争对手的应用中,Google文档确实显示为意图。我是否必须使用其他方法或意图类型才能让Google文档显示?

回答

8

您可以自己研究它,在Eclipse中运行DDMS或LogCat视图,并观察在您的或其他应用程序为ACTION_SEND意图启动活动时编写的调试日志。

你会看到:

ActivityManager: START {act=android.intent.action.CHOOSER cmp=android/com.android.internal.app.ChooserActivity (has extras)} 

然后按照还会记录实际上当你选择的应用程序发送。你会看到这样的事情:

ActivityManager: START {act=android.intent.action.SEND typ=application/zip flg=0x13000000 cmp=com.android.bluetooth/.opp.BluetoothOppLauncherActivity (has extras)} 

或者你也可以看到这一点:

ActivityManager: START {act=android.intent.action.SEND typ=*/* flg=0x13000000 cmp=com.google.android.apps.docs/.shareitem.UploadSharedItemActivity (has extras)} 

你在这里看到的差异。一个应用程序设置实际的MIME类型=应用程序/ ZIP,其他应用程序设置MIME类型*/*。这意味着Docs应用程序不是用来发送zip文件的。

进一步探索,使用好的应用AppXPlore,打开文件,重新创建清单文档应用的,并期待在块与UploadSharedItemActivity(其匹配*/*类型的),其意图滤波器块上:

<activity label="Docs" name=".shareitem.UploadSharedItemActivity"> 
<intent-filter> 
    <action name="android.intent.action.SEND" /> 
    <action name="android.intent.action.SEND_MULTIPLE" /> 
    <category name="android.intent.category.DEFAULT" /> 
    <data mimeType="video/*" /> 
    <data mimeType="image/*" /> 
    <data mimeType="text/*" /> 
    <data mimeType="application/x-vnd.oasis.opendocument.spreadsheet" /> 
    <data mimeType="application/vnd.ms-powerpoint" /> 
    <data mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" /> 
    <data mimeType="application/msword" /> 
    <data mimeType="application/pdf" /> 
    <data mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" /> 
    <data mimeType="application/pdf" /> 
    <data mimeType="application/rtf" /> 
    <data mimeType="application/vnd.ms-excel" /> 
    <data mimeType="application/vnd.oasis.opendocument.text" /> 
    <data mimeType="application/vnd.sun.xml.writer" /> 
</intent-filter> 

这证明Docs应用程序旨在发送预定义的文件类型,Zip不在其中。

您的应用可以尊重Docs应用的这一决定,也可以使用*/* MIME类型发送,但在这种情况下,用户可能会困惑为什么会有意外的应用不处理列表中的Zip文件。我会依靠第一个选项,并使用实际的MIME类型。

+0

谢谢,这是非常有帮助的。 (将授予21小时) – ab11 2012-02-02 20:43:19