2012-01-30 3 views
4

Мое приложение включает в себя функцию отправки, которая представляет список установленных программ, используемых для отправки документа. Он делает это с помощью:Android: google docs отправляет намерение?

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 нет. В приложениях конкурентов, которые используют один и тот же тип документа, Документы Google отображаются как намерение. Должен ли я использовать какой-либо другой метод или тип намерения, чтобы отображать Документы Google?

ответ

8

Вы можете исследовать его самостоятельно, запустить DDMS или LogCat в Eclipse и посмотреть журнал отладки, записанный, когда ваше или другое приложение начнет активность для намерения 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 = application/zip, другие типы приложений mime type */*. Это означает, что приложение Docs не предназначено для отправки zip-файлов.

Исследуя дальше, использовать хорошее приложение AppXPlore, открытые Документы, повторно создать манифест Docs приложения, и смотреть на блоке с 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-файлы в списке. Я бы опирался на 1-й вариант и использовал фактический тип mime.

+0

Спасибо, это было очень полезно. (Наградит 21 час) – ab11

Смежные вопросы