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

3

在我试图让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主页。但实际上没有这样做。它会出现“您的手机上未安装该应用程序”的错误。不,我没有为我的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嵌入到实际触发的Intentdata部分中。为什么会这样?我真的开始相信这是平台的错误。


更新:我已经提交了一个问题并移除了LiveFolders功能。当我在这里或那里得到澄清时,我会将其包含在我的应用程序中。如果我有时间,我想我会在那个问题上上传一个演示应用程序。

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


更新于04/25/2010: 我已经在Android项目中更新了这个问题,并上传了一个测试应用程序。如果有人能在设备上测试这个应用程序,那就太好了,也许这只是一个微妙的问题,只会出现在模拟器上。

不过,我也没有尝试在较新版本的Android上使用它。 - Felix
1
我已经尝试过Android 2.3.3,但它不起作用。 - CeccoCQ
3个回答

1

我也遇到了同样的问题,并不幸地确认:意图被包装到要触发的数据部分中。

我想知道其他预定义的CURSOR列是否得到正确评估;我考虑提交一个错误报告,针对需要返回自定义图标(每个条目而非所有条目)的情况;但是失败了。在整个网络中,我找不到任何使用这些列成功的例子或人员;只有名称和ID似乎有效。

这是Android的主要USP功能之一,但看起来它并没有被普遍接受。


很沮丧...尤其是因为还没有人回应我的安卓项目问题。 - Felix

1

我也遇到了类似的问题。我认为这是因为当游标在fillWindow中向CursorWindow发送数据时,它只能使用putBlobputStringputLong等方法。我不确定如何传递实际的Bitmap对象(ICON_BITMAP)或意图对象(INTENT)。MatrixCursor将对任何对象执行.toString()操作。在Intent对象上,可能是这样的:"Intent { act=android.intent.action.EDIT dat=URI }"。我认为系统没有正确地将其解释回正确的URI。

我尝试将意图序列化为putBlob,但是Intent不可序列化。我已经成功地通过将URI作为Intent字段传递来解决了这个问题。这只会给您特定URI上的默认操作,但有效。我还遇到了一个问题,如果我指定Intent为"null",即使我指定了EXTRA_LIVE_FOLDER_BASE_INTENT,它也会出错。如果我在游标中根本不指定该字段,则基本意图起作用,但如果我将该字段指定为空,则失败。它似乎没有回退到基本意图。

希望这可以帮助到您...


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

谢谢回答,但是同样的问题仍然存在(应用程序未安装错误)。在logcat中,我得到了:Starting activity: Intent { act=android.intent.action.VIEW dat=Intent { act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=http://www.google.com/ cmp=com.google.android.browser/.BrowserActivity } flg=0x10000000 } - Felix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接