2016-04-13 10 views
2

私は多くの活動を調べるかなり大きなアプリを持っています。最も人気のある例外の一つが予期せぬ意図のある行動WEB_SEARCH

何の活動も意思取り扱いがわかっている{ 行為を= android.intent.action.WEB_SEARCH(持っているエクストラ)}

一体何?私はコード内に "WEB_SEARCH"がどこにも見当たりません。私はそれを再現することはできません。私は原因を探す場所を知らない(Activity)。 Exceptionのスタックの下に、私のパッケージのクラスはありません...これを追跡して修正するには?

Fatal Exception: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.WEB_SEARCH (has extras) } 
    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1659) 
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1434) 
    at android.app.Activity.startActivityForResult(Activity.java:3432) 
    at android.app.Activity.startActivityForResult(Activity.java:3393) 
    at android.support.v4.app.FragmentActivity.startActivityForResult(Unknown Source) 
    at android.app.Activity.startActivity(Activity.java:3628) 
    at android.app.Activity.startActivity(Activity.java:3596) 
    at android.webkit.SelectActionModeCallbackSec.onActionItemClicked(SelectActionModeCallbackSec.java:390) 
    at com.android.internal.policy.impl.PhoneWindow$DecorView$ActionModeCallbackWrapper.onActionItemClicked(PhoneWindow.java:3264) 
    at android.support.v7.view.SupportActionModeWrapper$CallbackWrapper.onActionItemClicked(Unknown Source) 
    at android.support.v7.app.AppCompatDelegateImplV7$ActionModeCallbackWrapperV7.onActionItemClicked(Unknown Source) 
    at android.support.v7.app.AppCompatDelegateImplV7$ActionModeCallbackWrapperV7.onActionItemClicked(Unknown Source) 
    at android.support.v7.view.StandaloneActionMode.onMenuItemSelected(Unknown Source) 
    at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(Unknown Source) 
    at android.support.v7.view.menu.MenuItemImpl.invoke(Unknown Source) 
    at android.support.v7.view.menu.MenuBuilder.performItemAction(Unknown Source) 
    at android.support.v7.view.menu.MenuBuilder.performItemAction(Unknown Source) 
    at android.support.v7.view.menu.MenuPopupHelper.onItemClick(Unknown Source) 
    at android.widget.AdapterView.performItemClick(AdapterView.java:301) 
    at android.widget.AbsListView.performItemClick(AbsListView.java:1490) 
    at android.widget.AbsListView$PerformClick.run(AbsListView.java:3275) 
    at android.widget.AbsListView$1.run(AbsListView.java:4518) 
    at android.os.Handler.handleCallback(Handler.java:725) 
    at android.os.Handler.dispatchMessage(Handler.java:92) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:5283) 
    at java.lang.reflect.Method.invokeNative(Method.java) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
    at dalvik.system.NativeStart.main(NativeStart.java) 
+0

あなたのアプリケーションにこのようなコードがありますか? インテントi =新しいインテント(Intent.ACTION_WEB_SEARCH); i.setData(Uri.parse(Url)); startActivity(i); –

+0

いいえ、私は質問しました:_私はどこにでも "WEB_SEARCH" anywhere_(ctrl + shift + f)を表示しません – snachmsm

+0

まあ、私は、特定のものをクリックすると、ステップのプロセスを参照してください –

答えて

4

私は別の将来の調査員のために私自身の質問に答える必要があります。 WebViewActivityで使用する場合、または安全のためのいくつかのBase/MainActivity親:

@Override 
public void startActivityForResult(Intent i, int reqCode, Bundle b){ 
    boolean activityExists = i.resolveActivityInfo(getPackageManager(), 0) != null; 
    if(activityExists) 
     super.startActivityForResult(i, reqCode, b); 
    else{ 
     if(Intent.ACTION_WEB_SEARCH.equals(i.getAction()) && i.getExtras()!=null){ 
      String query = i.getExtras().getString(SearchManager.QUERY, null); 
      Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.google.pl/search?q="+query)); 
      boolean browserExists = i.resolveActivityInfo(getPackageManager(), 0) != null; 
      if(browserExists && query!=null){ 
       startActivity(browserIntent); 
       return; 
      } 
     } 
     Toast.makeText(this, R.string.error_no_app_for_intent, Toast.LENGTH_LONG).show(); 
    } 
} 
2

メット最近、同じ問題、いくつかの発掘をした、私はsnachmsmの答えは良いと思います、と私は他のサーチャーのためのいくつかの分析を行いたいです。

明らかに、WEB_SEARCHでインテントを開始するコードはありません。また、クラッシュログに基づいて、インテントはandroid.webkit.SelectActionModeCallbackSec.onActionItemClickedによって呼び出されます。そのため、Webviewを使用すると、ユーザーは長い間クリックしてテキストを選択し、いくつかの電話機やテーマやROMでは、 "find"と "web search"を含むActionMenuを表示するか、またはそれらのうちの1つだけをさまざまな実装に応じて表示します。ユーザーが「ウェブ検索」をクリックすると、WEB_SEARCHでインテントが開始されます。

解決策は簡単です.Webviewを使用するアクティビティでは、startActivityForResultをオーバーライドして特定のインテントを処理します。なぜ彼はstartActivityをオーバーライドしませんか? startActivityは最終的にstartActivityForResultを呼び出します。

関連する問題