mirror of
				https://gitcode.com/gh_mirrors/re/react-native-pushy.git
				synced 2025-10-31 13:23:12 +08:00 
			
		
		
		
	bugfix: switchVersion failed on Android after 0.29
This commit is contained in:
		| @@ -1,15 +1,22 @@ | ||||
| package cn.reactnative.modules.update; | ||||
|  | ||||
| import android.app.Activity; | ||||
| import android.app.Application; | ||||
| import android.content.Intent; | ||||
| import android.util.Log; | ||||
|  | ||||
| import com.facebook.react.ReactApplication; | ||||
| import com.facebook.react.ReactInstanceManager; | ||||
| import com.facebook.react.bridge.Promise; | ||||
| import com.facebook.react.bridge.ReactApplicationContext; | ||||
| import com.facebook.react.bridge.ReactContextBaseJavaModule; | ||||
| import com.facebook.react.bridge.ReactMethod; | ||||
| import com.facebook.react.bridge.ReadableMap; | ||||
| import com.facebook.react.bridge.UiThreadUtil; | ||||
| import com.facebook.react.cxxbridge.JSBundleLoader; | ||||
|  | ||||
| import java.lang.reflect.Field; | ||||
| import java.lang.reflect.Method; | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
|  | ||||
| @@ -112,10 +119,32 @@ public class UpdateModule extends ReactContextBaseJavaModule{ | ||||
|             @Override | ||||
|             public void run() { | ||||
|                 updateContext.switchVersion(hash); | ||||
|                 Activity activity = getCurrentActivity(); | ||||
|                 Intent intent = activity.getIntent(); | ||||
|                 activity.finish(); | ||||
|                 activity.startActivity(intent); | ||||
|                 try { | ||||
|                     Activity activity = getCurrentActivity(); | ||||
|                     Application application = activity.getApplication(); | ||||
|                     ReactInstanceManager instanceManager = ((ReactApplication) application).getReactNativeHost().getReactInstanceManager(); | ||||
|  | ||||
|                     if (instanceManager.getClass().getSimpleName().equals("XReactInstanceManagerImpl")) { | ||||
|                         JSBundleLoader loader = JSBundleLoader.createFileLoader(application, UpdateContext.getBundleUrl(application)); | ||||
|                         Field jsBundleField = instanceManager.getClass().getDeclaredField("mBundleLoader"); | ||||
|                         jsBundleField.setAccessible(true); | ||||
|                         jsBundleField.set(instanceManager, loader); | ||||
|                     } else { | ||||
|                         Field jsBundleField = instanceManager.getClass().getDeclaredField("mJSBundleFile"); | ||||
|                         jsBundleField.setAccessible(true); | ||||
|                         jsBundleField.set(instanceManager, UpdateContext.getBundleUrl(application)); | ||||
|                     } | ||||
|  | ||||
|                     final Method recreateMethod = instanceManager.getClass().getMethod("recreateReactContextInBackground"); | ||||
|  | ||||
|                     final ReactInstanceManager finalizedInstanceManager = instanceManager; | ||||
|  | ||||
|                     recreateMethod.invoke(finalizedInstanceManager); | ||||
|  | ||||
|                     activity.recreate(); | ||||
|                 } catch (Throwable err) { | ||||
|                     Log.e("pushy", "Failed to restart application", err); | ||||
|                 } | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 tdzl2003
					tdzl2003