0

タブ付きのシンプルな Android アプリがあります。2 番目のタブをクリックすると、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

例外の状態とまったく同じSecurityExceptionです。所有するコンテナーに外部インテントを起動するように要求しているためです。あなたが望むことをするためのほとんどの唯一のオプションはURL、そのプレイストアのURLのバージョンを、WebViewローカルに作成した.

逆に、実際の Play ストア アプリをロードする場合は、インテントを送信することで実行できますが、コンテナーにロードすることはできません...代わりに、コードを実際に起動する必要がありますIntentタブがクリックされたときの Play ストア URLの外部。

編集: クリックしたいタブの実際のビューへの参照をどうにかして取得できるかもしれませOnClickListenerん.任意のタブのビューを取得する方法はすぐにはわかりません。本当にそのアプローチを取りたい場合は、作成した子ビューを繰り返し処理して、適切なビューを見つけることができます。TabHostTabHost

逆に、タブがクリックされたときにイベントを発生させる典型的なTabHost.OnTabChangedListenerを使用できます。ある種のダミー レイアウトをタブ コンテンツ (プレイ インテント atm を設定している場所) に配置できます (おそらく、履歴書などで別の場所に切り替えるようにしますか? あなた次第です) ... そして、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
   }}
});
于 2013-01-18T00:44:51.423 に答える