确定当前设备上是否存在活动?

有没有办法检查并查看设备上是否存在活动? 如果我有一个YouTubevideo链接,我想指定它在YouTube PlayerActivity中打开。 但是,如果由于某种原因,我不想崩溃。

有没有办法检查并查看活动是否存在? 我不认为我可以捕获运行时exception,因为startActivity()不会抛出它。

Solutions Collecting From Web of "确定当前设备上是否存在活动?"

我不认为我可以捕捉运行时exception

其实,这个工作:

try { startActivity(new Intent(..)); } catch (ActivityNotFoundException e) { Toast.makeText(this, "Not installed.", LENGTH_SHORT).show(); } 

你可以用必要的组件信息创build一个Intent对象,然后检查这个intent是否可以被调用。我在这里偶然发现了这个片段,没有链接到实际的线程。

 private boolean isCallable(Intent intent) { List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); return list.size() > 0; } 

这是最简单的方法:

 boolean activityExists = intent.resolveActivityInfo(getPackageManager(), 0) != null; 

这也是Google推荐的 :

要首先validation应用程序是否存在以接收意图,请调用您的Intent对象上的resolveActivity() 。 如果结果是非空的,至less有一个应用程序可以处理意图,并且可以安全地调用startActivity() 。 如果结果为空,则不应使用该意图,并且如果可能,应该禁用调用意图的function。

我结束了:

  Intent intent = new Intent(); intent.setClassName( "com.google.android.gsf", "com.google.android.gsf.login.AccountIntroActivity" ); if(getContext().getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null) { getContext().startActivity( intent ); } else { getContext().startActivity(new Intent(Settings.ACTION_ADD_ACCOUNT)); } 

这确保了谷歌特定的添加帐户意图存在,如果没有,回落到一般更通用的ACTION_ADD_ACCOUNTS。

以下是我如何检查设备上是否存在“ Activity ”:

  Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tell//:" + phoneNumber)); PackageManager manager = context.getPackageManager(); List<ResolveInfo> activities = manager.queryIntentActivities( intent, 0); if (!manager.hasSystemFeature( PackageManager.FEATURE_TELEPHONY) || activities == null || activities .size() < 1) { Toast.makeText( context, "Sorry, there were no apps that worked with that request.", Toast.LENGTH_SHORT).show(); } else { context.startActivity(intent); }