[英]Opening Tag URI with Chrome Custom Tabs “ActivityNotFoundException: No Activity found to handle Intent”
[英]Chrome Custom Tabs throwing an error when chrome is not installed : No Activity found to handle Intent
Chrome自定義標簽頁在安裝chrome時工作正常,但在未安裝chrome時拋出錯誤
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);
}
我假設您的問題是“如何檢測和處理未安裝的Chrome?” 所以你去...
關鍵可能是PackageManager.queryIntentActivities (Intent intent, int flags)
:
檢索可以針對給定意圖執行的所有活動。
參數
意圖 -所需的意圖按照
resolveActivity()
標志 -其他選項標志。 最重要的是
MATCH_DEFAULT_ONLY
,以將分辨率限制為僅支持CATEGORY_DEFAULT
那些活動。 您也可以設置MATCH_ALL
以防止結果過濾。返回
一個
List<ResolveInfo>
,其中每個匹配Activity
都有一個條目。 這些按從最佳到最差的順序排列-也就是說,列表中的第一項是resolveActivity(Intent, int)
返回的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
}
您必須首先檢查chrome是否已安裝。 此代碼可以幫助您檢查是否已安裝應用。
isAppInstalled("com.android.chrome");
private boolean isAppInstalled(String packageName) {
PackageManager pm = getPackageManager();
boolean installed = false;
try {
pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
installed = true;
} catch (PackageManager.NameNotFoundException e) {
installed = false;
}
return installed;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.