Cursor提供的意图未正确触发(LiveFolders)

时间:2010-04-15 13:08:03

标签: android android-livefolders

在我试图让LiveFolders工作的绝望中,我在LiveFolder ContentProvider中尝试了以下内容:

public Cursor query(Uri uri, String[] projection, String selection,
        String[] selectionArgs, String sortOrder) {
    MatrixCursor mc = new MatrixCursor(new String[] { LiveFolders._ID, LiveFolders.NAME, LiveFolders.INTENT } );
    Intent i = null;

    for (int j=0; j < 5; j++) {
        i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com/"));
        mc.addRow(new Object[] { j, "hello", i} );
    }

    return mc;
}

一切正常,应该在点击LiveFolder中的项目时启动浏览器并显示Google主页。但事实并非如此。它会出现Application is not installed on your phone错误。不,我没有为我的LiveFolder定义基本意图。

logcat说:

I/ActivityManager(   74): Starting activity: Intent { act=android.intent.action.VIEW dat=Intent { act=android.intent.action.VIEW dat=http://www.google.com/ } flg=0x10000000 }

它似乎嵌入Intent我在实际解雇data的{​​{1}}部分中提供它。它为什么这样做?我真的开始相信这是一个平台错误。


更新:我已提交an issue并删除了LiveFolders功能。我将在我的应用程序中包含它,当我在这里或那里得到回复澄清这件事。如果我有时间,我认为我会将演示应用程序上传到该问题。


更新:我收到通知,说明赏金在3天后到期。没人想要吗? :)


2010年4月25日更新:我在Android项目上更新了the issue并上传了测试应用程序。如果有人可以在设备上测试这个应用程序会很好,也许这是一个微妙的问题,它只出现在模拟器上。

3 个答案:

答案 0 :(得分:1)

我面对同样的;并且可以不幸地确认它:意图被包含在要触发的意图的数据部分中。

我想知道是否正确评估了其他预定义的CURSOR列;我想要为案件提交一个错误自定义图标(每个条目,而不是所有条目)将被退回;但失败了。在整个网络中,我没有找到任何成功使用这些列的示例或人;只有名字和ID似乎有效。

这是Android的主要USP功能之一,它看起来很难被普遍接受。

答案 1 :(得分:1)

我也有类似的问题。我认为这是因为当Cursor将数据发送到CursorWindow中的fillWindow时,它只能putBlobputStringputLong等等。我不是确定如何传递实际的Bitmap对象(ICON_BITMAP)或Intent对象(INTENT)。 MatrixCursor将对任何对象执行.toString()。在Intent对象上会出现类似:“Intent { act=android.intent.action.EDIT dat=URI }”。我不认为系统正确地将其解释回正确的URI。

我已尝试将意图序列化为putBlob,但意图不可序列化。我所要做的就是将URI作为Intent字段传递。这只会为您提供特定URI的默认操作,但有效。我也遇到了问题,如果我为Intent指定“null”也会出错,即使我指定了EXTRA_LIVE_FOLDER_BASE_INTENT。如果我没有在游标中指定字段,则基本意图有效,但如果我将字段指定为null则失败。它似乎没有回到基本意图。

希望这会有所帮助......

答案 2 :(得分:0)

您可以尝试硬编码组件名称。

Intent intent = new Intent();
ComponentName comp = new ComponentName("com.google.android.browser",
                                   "com.google.android.browser.BrowserActivity");
intent.setComponent(comp);
intent.setAction("android.intent.action.VIEW");
intent.addCategory("android.intent.category.BROWSABLE");
Uri uri = Uri.parse(url);
intent.setData(uri);