问题
I have an app that sometimes links to imdb. I can do this with http://m.imdb.com/find
or if it is available imdb:///find
. My trouble is I can't find a way to check whether the imdb://
is available before it is too late.
Because the link is clicked on by the user, I can't catch the android.content.ActivityNotFoundException
exception.
Am I missing something obvious?
Solution:
By inazaruk's suggestion I'm now using the follwing code:
public static boolean isUriAvailable(Context context, String uri) {
Intent test = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
return context.getPackageManager().resolveActivity(test, 0) != null;
}
The method must be called with a direct uri to what you are requesting, like imdb:///find
rather than just imdb://
.
回答1:
You can use resolveActivity() to detect whether there is any Activity
in the system capable of handling your intent. Of course you need to construct the intent that mimics the "uri" click. That might be done using Intent.setData() function, though I didn't test/verify that myself.
回答2:
Following worked for me:
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri uri = Uri.parse("imdb:///title/tt1457767/");
intent.setData(uri);
this.getActivity().startActivity(intent);
You can replace String in Uri.parse("");
with any of followings:
imdb:///name/<nameID>
imdb:///find?q=<search_query>
imdb:///title/<titleID>
imdb:///boxoffice
imdb:///name/<nameID>
imdb:///find?q=toystory
来源:https://stackoverflow.com/questions/7050068/check-if-intent-uri-is-available