3

クロムがインストールされている場合はクロムのカスタムタブが正常に機能しますが、クロムがインストールされていない場合はエラーがスローされます

CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder();
intentBuilder.setShowTitle(true);
CustomTabActivityHelper.openCustomTab(activityy, intentBuilder.build(), Uri.parse(link), new WebviewFallback());

LogCat エラー情報

FATAL EXCEPTION: main
Process: opensource.itspr.recycler, PID: 13114
   android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=http://www.google.com/... pkg=com.android.chrome (has extras) }
       at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1889)
       at android.app.Instrumentation.execStartActivity(Instrumentation.java:1579)
       at android.app.Activity.startActivityForResult(Activity.java:3921)
       at android.app.Activity.startActivityForResult(Activity.java:3881)
       at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:784)
       at android.app.Activity.startActivity(Activity.java:4208)
       at android.app.Activity.startActivity(Activity.java:4176)
       at android.support.customtabs.CustomTabsIntent.launchUrl(CustomTabsIntent.java:165)
       at opensource.itspr.recycler.Util.customtabs.CustomTabActivityHelper.openCustomTab(CustomTabActivityHelper.java:41)
       at opensource.itspr.recycler.HolderNews.ItemLink$1.onClick(ItemLink.java:55)
       at android.view.View.performClick(View.java:5201)
       at android.view.View$PerformClick.run(View.java:21163)
       at android.os.Handler.handleCallback(Handler.java:746)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:148)
       at android.app.ActivityThread.main(ActivityThread.java:5443)
       at java.lang.reflect.Method.invoke(Native Method)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)                                                     

エラー情報画像

WebViewFallback.java

public class WebviewFallback implements CustomTabActivityHelper.CustomTabFallback {
@Override
public void openUri(Activity activity, Uri uri) {
    Log.d("I came here", String.valueOf(uri));
    Intent intent = new Intent(activity, WebViewActivity.class);
    intent.putExtra(WebViewActivity.EXTRA_URL, uri.toString());
    activity.startActivity(intent);
}

}

WebViewActivity.java

public class WebViewActivity extends AppCompatActivity {
public static final String EXTRA_URL = "extra.url";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_webview);
    String url = getIntent().getStringExtra(EXTRA_URL);
    WebView webView = (WebView)findViewById(R.id.web_view);
    webView.setWebViewClient(new WebViewClient());
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    setTitle(url);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    webView.loadUrl(url);
}
4

2 に答える 2

8

あなたの質問は「Chrome がインストールされていないことを検出して処理するにはどうすればよいですか?」だと思います。では、どうぞ…

キーは次のようになりますPackageManager.queryIntentActivities (Intent intent, int flags)

指定されたインテントに対して実行できるすべてのアクティビティを取得します。

パラメーター

インテント- による目的のインテントresolveActivity()

flags - 追加のオプション フラグ。最も重要なことはMATCH_DEFAULT_ONLY、解決策をサポートする活動のみに限定することCATEGORY_DEFAULTです。MATCH_ALL結果のフィルタリングを防止するように設定することもできます。

戻り値

一致するList<ResolveInfo>ごとに 1 つのエントリを含むActivity。これらは、最もよく一致するものから最も一致しないものへと並べられます。つまり、リストの最初の項目が によって返されるものresolveActivity(Intent, int)です。一致するアクティビティがない場合は、空のリストが返されます。

このようなもの:

CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder();
intentBuilder.setShowTitle(true);
final Intent customTabsIntent = intentBuilder.build();
final List<ResolveInfo> customTabsApps = activityy.getPackageManager().queryIntentActivities(customTabsIntent, 0);

if (customTabsApps.size() > 0) {
    CustomTabActivityHelper.openCustomTab(activityy, customTabsIntent, Uri.parse(link), new WebviewFallback());
} else {
    // Chrome not installed. Display a toast or something to notify the user
}
于 2016-01-16T04:24:24.553 に答える