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),下图是该方法注释的一部分:

说明:

如果这个方法被一个不是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初始化如下:

 定义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博客)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晒干的老咸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值