我有一个带标签的简单Android应用。我希望第二个标签在点击时打开Google Play商店网址。
选项卡加载但是当我点击tab2时应用程序崩溃。
TabSpec spec = m_tabhost.newTabSpec("tab1")
.setIndicator("tab1")
.setContent(new Intent().setClass(this, GridActivity.class).putExtra("tabindex", 0));
m_tabhost.addTab(spec);
spec = m_tabhost.newTabSpec("tab2")
.setIndicator("tab2")
.setContent(new Intent(Intent.ACTION_VIEW).setData(Uri.parse("market://search?q=pub:Google Inc.")));
m_tabhost.addTab(spec);
这是错误:
01-16 18:53:58.734: W/dalvikvm(10611): threadid=1: thread exiting with uncaught exception (group=0x4001e578)
01-16 18:53:58.738: W/System.err(10611): java.lang.SecurityException: Requesting code from com.android.vending (with uid 10060) to be run in process soundboard.code.bhak (with uid 10130)
01-16 18:53:58.757: W/System.err(10611): at android.app.ActivityThread.getPackageInfo(ActivityThread.java:1296)
01-16 18:53:58.757: W/System.err(10611): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1546)
01-16 18:53:58.757: W/System.err(10611): at android.app.ActivityThread.startActivityNow(ActivityThread.java:1491)
01-16 18:53:58.757: W/System.err(10611): at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
01-16 18:53:58.757: W/System.err(10611): at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
01-16 18:53:58.757: W/System.err(10611): at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:657)
01-16 18:53:58.757: W/System.err(10611): at android.widget.TabHost.setCurrentTab(TabHost.java:329)
01-16 18:53:58.757: W/System.err(10611): at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:133)
01-16 18:53:58.757: W/System.err(10611): at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:456)
01-16 18:53:58.761: W/System.err(10611): at android.view.View.performClick(View.java:2538)
01-16 18:53:58.761: W/System.err(10611): at android.view.View$PerformClick.run(View.java:9152)
01-16 18:53:58.761: W/System.err(10611): at android.os.Handler.handleCallback(Handler.java:587)
01-16 18:53:58.761: W/System.err(10611): at android.os.Handler.dispatchMessage(Handler.java:92)
01-16 18:53:58.765: W/System.err(10611): at android.os.Looper.loop(Looper.java:130)
01-16 18:53:58.765: W/System.err(10611): at android.app.ActivityThread.main(ActivityThread.java:3687)
01-16 18:53:58.765: W/System.err(10611): at java.lang.reflect.Method.invokeNative(Native Method)
01-16 18:53:58.765: W/System.err(10611): at java.lang.reflect.Method.invoke(Method.java:507)
01-16 18:53:58.769: W/System.err(10611): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
01-16 18:53:58.769: W/System.err(10611): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
01-16 18:53:58.769: W/System.err(10611): at dalvik.system.NativeStart.main(Native Method)
01-16 18:53:58.792: D/BugSenseHandler(10611): Transmitting stack trace: java.lang.SecurityException: Requesting code from com.android.vending (with uid 10060) to be run in process soundboard.code.bhak (with uid 10130)
有什么建议吗?
答案 0 :(得分:0)
正如异常状态一样,您得到SecurityException
,因为您要求将外部意图发送到您拥有的容器中。几乎是你做你想做的唯一选择是在你在本地创建的URL
中加载该游戏商店网址的WebView
版本。
相反,如果您希望它加载实际的Play商店应用程序,您仍然可以通过发送意图来执行此操作,但您将无法将其加载到容器中...相反,您必须使用单击选项卡时,代码实际上会为play store url启动外部Intent
。
编辑:您可能会以某种方式参考您想要点击的标签的实际视图,以便通过OnClickListener
,{{{{}}的一些技巧将TabHost
放在其上3}}是如何使用当前选项卡执行此操作的示例,尽管如何获取任意选项卡的视图并不是很明显。如果你真的想采用这种方法,你可能会在创建它之后迭代TabHost
的子视图并找到正确的视图。
相反,您可以使用典型的here,这会在单击选项卡时为您提供事件。您可以在选项卡内容中放置某种虚拟布局(您可以在其中设置播放意图atm)(也许可以让它在简历或其他地方切换到其他地方?由您决定)...然后在{{1}中对于此选项卡,启动您的上述意图。即:
OnTabChanged