如果上下文不是活动上下文而是应用程序上下文,如何启动 Intent

Posted

技术标签:

【中文标题】如果上下文不是活动上下文而是应用程序上下文,如何启动 Intent【英文标题】:How to start an Intent if context is not Activity Context but Application Context 【发布时间】:2012-03-03 11:49:53 【问题描述】:

我正在尝试从扩展 BroadcastReceiver 的类开始一个活动。

public void onReceive(Context context, Intent intent) 

问题在于参数上下文是应用程序上下文而不是活动上下文。

有没有办法使用应用程序上下文启动意图?

【问题讨论】:

【参考方案1】:

这里是如何使用上下文调用另一个活动的示例代码, 根据您的要求设置标志:

public void onReceive(Context context, Intent intent)  
    
    Intent intent = new Intent();   
    intent.setClass(context, xxx.class); 
    intent.setAction(xxx.class.getName()); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 
    context.startActivity(intent);  

【讨论】:

这个答案虽然有效,但在回答问题时含糊不清。为了使用应用程序上下文调用 startActivity,请包含标志 FLAG_ACTIVITY_NEW_TASK。还要考虑将名称从上下文更改为 appContext,以便清楚您期望的上下文。 为什么我们需要提供 NEW_TASK 标志?因为我尝试从应用程序上下文没有这个标志开始一个活动,它工作正常。【参考方案2】:

是的,只需使用上下文并从该上下文调用 startActivity() 方法。

【讨论】:

这是不正确的;除非 Intent 包含 FLAG_ACTIVITY_NEW_TASK 标志,否则不允许应用程序上下文启动活动。 android 馅饼上 FLAG_ACTIVITY_NEW_TASK 没有帮助 @AnandKhinvasara 你对开发者文档有引用吗?还是这是一种无证行为?

以上是关于如果上下文不是活动上下文而是应用程序上下文,如何启动 Intent的主要内容,如果未能解决你的问题,请参考以下文章

如何获取所选列表视图项中的id以打开上下文菜单并通过下一个活动来实现目标。

SharedPreferences 应用程序上下文与活动上下文

严重:上下文 [/javaproj] 启动因先前的错误而失败?

在 MVP 模式中,了解活动/上下文的演示者是不是是个坏主意?

如何检查上下文菜单是不是在 Autodesk Forge 上打开

多线程上下文切换