在我试图让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并上传了测试应用程序。如果有人可以在设备上测试这个应用程序会很好,也许这是一个微妙的问题,它只出现在模拟器上。
答案 0 :(得分:1)
我面对同样的;并且可以不幸地确认它:意图被包含在要触发的意图的数据部分中。
我想知道是否正确评估了其他预定义的CURSOR列;我想要为案件提交一个错误自定义图标(每个条目,而不是所有条目)将被退回;但失败了。在整个网络中,我没有找到任何成功使用这些列的示例或人;只有名字和ID似乎有效。
这是Android的主要USP功能之一,它看起来很难被普遍接受。
答案 1 :(得分:1)
我也有类似的问题。我认为这是因为当Cursor将数据发送到CursorWindow
中的fillWindow
时,它只能putBlob
,putString
,putLong
等等。我不是确定如何传递实际的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);