当前位置: 首页 > 知识库问答 >
问题:

react native AppState在Android上没有“inactive”状态

拓拔坚
2023-03-14

我试图改变用户界面之前,用户离开应用程序(用户是在多任务视图或切换到一些其他应用程序)。更具体的是,当用户离开应用程序时,我想添加一个带有应用程序徽标的全屏视图。

这是Android上的bug吗?如果没有,我有什么选择让它在Android上工作。

谢了。

共有1个答案

容飞掣
2023-03-14

如果需要,可以通过向MainActivity.java添加一些代码来监听其生命周期事件来模拟与iOS相同的状态

//onResume = 'active'  
//onPause = 'inactive'  
//onStop = 'background' 

@Override
public void onResume() {
    super.onResume();
    ReactContext reactContext = getReactInstanceManager().getCurrentReactContext();
    WritableMap params = Arguments.createMap();
    params.putString("event", "active");

    // when app starts reactContext will be null initially until bridge between Native and React Native is established
    if(reactContext != null) {
        getReactInstanceManager().getCurrentReactContext()
            .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
            .emit("ActivityStateChange", params);
    }
}

@Override
public void onPause() {
    super.onPause();
    ReactContext reactContext = getReactInstanceManager().getCurrentReactContext();
    WritableMap params = Arguments.createMap();
    params.putString("event", "inactive");

    if(reactContext != null) {
        getReactInstanceManager().getCurrentReactContext()
                .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                .emit("ActivityStateChange", params);
    }
}

@Override
public void onStop() {
    super.onStop();
    ReactContext reactContext = getReactInstanceManager().getCurrentReactContext();
    WritableMap params = Arguments.createMap();
    params.putString("event", "background");

    if(reactContext != null) {
        getReactInstanceManager().getCurrentReactContext()
                .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                .emit("ActivityStateChange", params);
    }
}

然后在您的JS中使用DeviceEventEmitter监听这些生命周期变化

const nativeEventListener = DeviceEventEmitter.addListener('ActivityStateChange',
  (e)=>{
      console.log(e.event);
})
 类似资料:
  • 我想知道是否有一种方法,使通知弹出状态栏上方,像传统的祝酒词消息,当第一次收到。默认情况下,当收到通知时,通知标签会显示在状态栏中,并暂时隐藏其他通知图标(如果有的话),直到通知标签显示完毕。然后,通知图标通常被添加到等待用户交互的图标的水平列表中。我想要最初的接收报价只是上升到状态栏之上,然后添加图标与其余的他们。

  • 问题内容: 我们正在开发S60版本,该平台具有不错的Python API。 但是,关于Android上的Python尚无任何官方资料,但是由于Jython存在,有没有办法让蛇和机器人一起工作? 问题答案: 一种方法是使用: 开源Python库,用于快速开发利用创新用户界面的应用程序,例如多点触控应用程序。 可在和上运行。你可以在所有受支持的平台上运行相同的代码。

  • 我试图使用这个SO答案使线性布局的角变圆。所以这是我的shape.xml: 但这给了我一个有着丑陋的黑色边框的矩形。它在另一个具有美丽背景图像的线性布局中看起来很可怕。我想去掉那条黑边。我搜索了其他SO帖子和google,结果发现我可以使用图层隐藏一些边框。不可能使用上述形状的一些技巧。直接使用xml? 编辑: 这是我的主要布局.xml: 编辑2:这是ide中的截图(截图):

  • 我刚刚意识到,在Lollipop下面的Android版本上,不可能通过appcompat改变状态栏的颜色。我目前正在运行Android Kitkat 4.4.2,并收到了一个应用程序的更新,以下是截图 我的问题是,他们是如何在运行比Lollipop低版本的设备上不使用appcompat而改变状态栏颜色的? 怎么可能改变颜色?

  • 我只是通过终端安装android studio,我的ubuntu版本是14.04。我的计算机上已经安装了Java8。我安装android studio的程序正是这样的: sudo apt-add-repository ppa:paolorotolo/android-studio

  • 我正在开发什么样的应用程序状态保护程序,我不明白如何才能让它在Android11上工作。由于存储所有存储访问受到限制,谷歌拒绝了我的更新,因为使用了所有文件访问(管理外部存储)权限。 但我测试了另一个应用程序,它运行良好,甚至可以在根目录下保存文件。此应用请求此权限允许访问照片、媒体和文件,当我在应用设置中检查权限时,它表示应用可以访问所有文件的管理。即使应用程序具有“所有文件”权限,也不会显示此