Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag

这篇具有很好参考价值的文章主要介绍了Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在做一个人脸识别相关的项目,调用context.startActivity(intent)方法,报错如下:
android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?


分析:Activity继承自Context,查看Context.startActivity(Intent, Bundle),下图是该方法注释的一部分:

Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag,Android,React-native,android,android studio,ide

说明:

如果这个方法被一个不是Activity的Context调用,那么这个Intent必须包括Intent.FLAG_ACTIVITY_NEW_TASK这个flag,如果是被Activity的Context调用,则不需要。

这是因为,如果不是被一个已存在的Activity启动,就没有已存在的栈去替换新的Activity,所以需要让它在自身的栈中。所以需要这个Intent设置启动参数Intent.FLAG_ACTIVITY_NEW_TASK这个flag,让新Activity在它自身的栈中。

由于我是在React-native当中通过自定义模块,让react-native调用android原生接口(Android native和React-native相互调用和传参_晒干的老咸鱼的博客-CSDN博客),该自定义的module初始化如下:

Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag,Android,React-native,android,android studio,ide

 定义Context的时候使用

private ReactApplicationContext mContext;

在使用的时候,先判断ReactApplicationContext有没有currentActivity,如果有,就拿到Activity对象,然后通过该对象来启动新的Activity。

if (mContext.hasCurrentActivity()){
               Activity currentActivity = mContext.getCurrentActivity();
               Log.d(TAG, "currentActivity: " + currentActivity);
               WbCloudFaceVerifySdk.getInstance().startWbFaceVerifySdk(currentActivity, new WbCloudFaceVerifyResultListener() {
                  @Override
                  public void onFinish(WbFaceVerifyResult result) {
                     if (result != null) {
                        if (result.isSuccess()) {
                           Log.d(TAG, "刷脸成功!");
                        } else {
                           Log.d(TAG, "刷脸失败!");
                        }
                     }
                     //刷脸结束后,及时释放资源
                     WbCloudFaceVerifySdk.getInstance().release();
                  }
               });
            }
//            callback.invoke(STATUS_SUCCESS);
         }

这里为什么不在一开始初始化的时候定义mContext为Activity的Context,可以参考如下说明(ReactContextBaseJavaModule getCurrentActivity 返回空问题_晒干的老咸鱼的博客-CSDN博客)文章来源地址https://www.toymoban.com/news/detail-617260.html

到了这里,关于Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包