launch uri from tab android



我有一个简单的Android应用程序与选项卡。我想要第二个选项卡打开谷歌播放商店URL时点击。

标签加载,但当我点击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)

有什么建议吗?

就像异常状态一样,你得到一个SecurityException,因为你请求一个外部意图被发射到你自己的容器中。基本上你唯一的选择就是在本地创建的WebView中加载该play store url的URL版本。

相反,如果你想让它加载实际的play store应用,你仍然可以通过发送意图来实现,但你将无法将它加载到你的容器中…相反,您必须使您的代码在单击选项卡时为play store url实际启动外部Intent

编辑:你可能会以某种方式得到一个参考实际视图的标签,你想要一个点击,以便把一个OnClickListener上它的一些伎俩与TabHost,这里是一个例子,如何做到这一点与当前标签,虽然它不是立即明显如何获得任何任意标签的视图。如果你真的想采用这种方法,你可以在创建TabHost后迭代它的子视图并找到正确的视图。

相反,您可以使用典型的TabHost。OnTabChangedListener,当选项卡被单击时,它会给你一个事件。你可以在标签内容中添加一些虚拟布局(游戏邦注:你可以在这里设置游戏意图)(游戏邦注:也许可以将其切换到简历或其他地方?由你决定)……然后在此选项卡的OnTabChanged中,启动上述意图。即:

m_tabhost.setOnTabChangedListener(new OnTabChangedListener(){
  @Override 
  public void onTabChanged(String tabId){
  if(tabId.equals(SOME_TAB_ID_FOR_THIS_TAB)){
    Intent i = new   Intent(Intent.ACTION_VIEW).setData(Uri.parse("market://search?q=pub:Google Inc."));
    startActivity(i);
    //more stuff if you need
   }}
});

最新更新