如何绕过“使用...完成操作”?

Posted

技术标签:

【中文标题】如何绕过“使用...完成操作”?【英文标题】:How do I bypass the "Complete Action Using ..."? 【发布时间】:2010-12-24 03:16:27 【问题描述】:

当在 android 中显示“使用完成操作”对话框时,我有一个关于以编程方式选择应用程序的问题。

一个例子如下: 在我的代码中,我有这样的声明:

startActivity(new Intent(Intent.ACTION_VIEW,
                         Uri.parse("http://www.youtube.com/watch?v=98yl260nMEA")));

然后我会看到一个包含两个选项的对话框: 使用浏览器或 YouTube 完成操作

知道如何在不显示对话框的情况下选择 YouTube 吗?

【问题讨论】:

您找到解决方案了吗? 这能回答你的问题吗? Android Eliminate Complete Action Using dialog @Tomerikoo 这似乎是另一种情况,他们试图启动他们自己的应用程序的组件。请注意,答案建议修改意图过滤器:他们不能很好地修改 YouTube 或其浏览器的意图过滤器。 【参考方案1】:

我认为您将需要有关您要默认启动的应用程序(在本例中为 youtube 应用程序)的意图过滤器的更多信息。该目标应用程序可能有多个意图过滤器,其中一个可能更具体。您可以使用该特定意图调用 startActivity,然后将直接启动预期的应用程序。但是,这需要您对目标应用程序有更多的了解(这在大多数情况下很难,例如 Youtube 应用程序)。

除此之外,我不认为您可以在您的应用程序中做很多事情。 Intent 解析是由 Android 框架完成的,因此如果用户应用程序可以以某种方式覆盖它,这将是安全方面的缺陷。

【讨论】:

嗯……有点道理。谢谢,杰伊什。我有这段代码(但它只向我显示了建议使用的应用程序 - 在这种情况下是浏览器和 YouTube) PackageManager pm = getPackageManager(); List 活动 = pm.queryIntentActivities(new Intent(Intent.ACTION_VIEW, Uri.parse(youtube.com/watch?v=Zi_XLOBDo_Y)), 0);迭代器 actList = activity.iterator(); while(actList.hasNext()) ResolveInfo curr = actList.next(); Log.d("意图 =====> ", curr.toString() + " " + curr.match + " " + curr.isDefault); 【参考方案2】:
PackageManager pm = getPackageManager(); 
List<ResolveInfo> activities = pm.queryIntentActivities(new Intent(Intent.ACTION_VIEW, Uri.parse(youtube.com/watch?v=Zi_XLOBDo_Y)), 0); 
Iterator<ResolveInfo> actList = activities.iterator(); 
while(actList.hasNext())  
   ResolveInfo curr = actList.next(); 
   Log.d("Intents =====> ", curr.toString() + " " + curr.match + " " + curr.isDefault); 

【讨论】:

以上是关于如何绕过“使用...完成操作”?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用SQLMap绕过WAF

如何使用SQLMap绕过WAF

如何绕过 Google reCAPTCHA 使用 Selenium 进行测试

如何使用 Selenium 和 Python 绕过 Google 验证码?

如何使用 springfox 在 Swagger UI 中绕过授权

DataTables:如何绕过过滤规则?