0

我有一个带有标签的简单 Android 应用程序。我希望第二个选项卡在单击时打开一个 google play 商店 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)

有什么建议么?

4

1 回答 1

0

就像异常状态一样,您得到 a 是SecurityException因为您请求将外部意图启动到您拥有的容器中。几乎你唯一的选择就是加载你在本地创建URL的那个 play store url 的版本。WebView

相反,如果您希望它加载实际的 Play 商店应用程序,您仍然可以通过发送意图来完成,但您将无法将其加载到您的容器中......相反,您必须让您的代码实际启动单击选项卡时播放商店 url的外部Intent

编辑:您可能能够以某种方式获得对您想要单击的选项卡的实际视图的引用,以便OnClickListener通过一些技巧将其放置在上面TabHost这里是一个如何使用当前选项卡执行此操作的示例,尽管如何获取任意选项卡的视图并不是很明显。如果您真的想采用这种方法,您可能可以TabHost在创建它后迭代它的子视图并找到正确的视图。

相反,您可以使用典型的TabHost.OnTabChangedListener,它会在单击选项卡时为您提供一个事件。您可以在选项卡内容中放置某种虚拟布局(您正在设置播放意图 atm 的位置)(也许让它在恢复时切换到其他地方或其他地方?由您决定)......然后在OnTabChanged这个选项卡中,启动您的上述意图。IE :

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
   }}
});
于 2013-01-18T00:44:51.423 回答