2016-11-03 23 views
6

Tôi đang cố thay đổi giao diện người dùng ngay trước khi người dùng rời khỏi ứng dụng (người dùng ở chế độ xem nhiều tác vụ hoặc chuyển sang một số ứng dụng khác). Để cụ thể hơn khi người dùng rời khỏi ứng dụng, tôi muốn thêm chế độ xem toàn màn hình với biểu tượng ứng dụng.phản ứng AppState gốc không có trạng thái 'không hoạt động' trên Android

Tôi đang sử dụng AppState cho điều đó.

Trên iOS, nó hoạt động như mong đợi: trong ứng dụng xem đa nhiệm bị trạng thái không hoạt động và sau khi được chuyển sang trạng thái ứng dụng khác sẽ chuyển sang nền. Khi trạng thái không hoạt động, tôi vẫn có thể thay đổi giao diện người dùng.

Tuy nhiên, trên Android, trạng thái là hoạt động hoặc nền. Vấn đề là ở trạng thái nền, tôi không thể thay đổi giao diện người dùng nữa.

Đây có phải là lỗi trên Android không? Nếu không, các tùy chọn của tôi để làm cho nó hoạt động trên Android là gì.

Cảm ơn.

+1

Đó không phải lỗi. Việc triển khai Android của thành phần AppState chỉ có trạng thái 'hoạt động' và 'nền'. Chỉ tò mò thôi, tại sao bạn muốn hiển thị chế độ xem toàn màn hình với biểu tượng ứng dụng khi người dùng sắp rời khỏi ứng dụng? – Jickson

+1

Tôi muốn hiển thị nó để dữ liệu nhạy cảm không hiển thị trong giao diện đa nhiệm. Tôi đoán tôi cần đào sâu vào nội dung gốc. – algizmo

Trả lời

5

Nếu bạn cần, bạn có thể mô phỏng các trạng thái tương tự như iOS bằng cách thêm một số mã để MainActivity.java để nghe sự kiện vòng đời của nó

//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); 
    } 
} 

Sau đó, trong JS của bạn lắng nghe những thay đổi vòng đời sử dụng DeviceEventEmitter

const nativeEventListener = DeviceEventEmitter.addListener('ActivityStateChange', 
    (e)=>{ 
     console.log(e.event); 
}) 
+0

Tôi không thấy bất kỳ sự khác biệt nào về điều này và phản ứng việc triển khai của người bản xứ. Nó không xem xét các đoạn https://github.com/facebook/react-native/blob/master/ReactAndroid/src/main/java/com/facebook/react/modules/appstate/AppStateModule.java – evanjmg

Các vấn đề liên quan