2016-03-15 25 views

回答

1

您的原生Android活動

<activity> 
    <intent-filter> 
     <data android:scheme="my.special.scheme" /> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.DEFAULT"></category> 
    </intent-filter> 
</activity> 

使用Linking openURL API創建的意圖過濾器。

Linking.openURL('my.special.scheme://other/parameters/here') 

Link to sample application working

+0

得到錯誤: console.error: 「出錯」,{ 「framesToPop」:1, 「代碼」: 「EUNSPECIFIED」},棧: 錯誤@ 56404:12 @ 15859:94 – Shivang

+0

線以下是丟失: Shivang

2

您可以創建一個模塊,並暴露ReactMethod到JS將打開活動爲您服務。

public class RctActivityModule extends ReactContextBaseJavaModule { 
    public static final String REACT_CLASS = "RctActivity"; 

    public RctActivityModule(ReactApplicationContext reactContext) { 
     super(reactContext); 
    } 

    @Override 
    public String getName() { 
     return REACT_CLASS; 
    } 

    @ReactMethod @SuppressWarnings("unused") 
    public void startActivity(String extraParam) { 
     Activity context = ContextProvider.getActivityContext(); 
     if (context != null && !context.isFinishing()) { 
      Intent rctActivityIntent = new Intent(context, RctActivity.class); 
      rctActivityIntent.putExtra(RctActivity.EXTRA_PARAM, extraParam); 
      context.startActivity(rctActivityIntent); 
     } 
    } 
} 

不要忘了你的新模塊添加到您的包

public class RCCPackage implements ReactPackage { 

    @Override 
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) { 
     return Arrays.<NativeModule>asList(
       new RctActivityModule(reactContext) 
     ); 
    } 

    @Override 
    public List<Class<? extends JavaScriptModule>> createJSModules() { 
     return Collections.emptyList(); 
    } 

    @Override 
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) { 
    ... 
    } 
} 

創建代表你的模塊(RctActivity.js)JS文件。現在將其放置在react-native項目的根目錄中。

RctActivity.js:

import { NativeModules } from 'react-native'; 
module.exports = NativeModules.RctActivity; 

在你的JavaScript代碼(index.js),導入RctActivity模塊:

import RctActivity from './RctActivity'

,並使用你露出這樣的方法: RctActivity.startActivity('MyExtraParam');

編輯: 爲了打開一個新的活動,我必須保持對當前正在運行的活動的引用。所以我用這個小幫手類:

public class ContextProvider { 
    private static WeakReference<Activity> sActivityWR; 

    public static void setActivityContext(Activity activity) { 
     if (sActivityWR == null) { 
      sActivityWR = new WeakReference<>(activity); 
     } 
    } 

    public static Activity getActivityContext() { 
     return sActivityWR != null ? sActivityWR.get() : null; 
    } 

    public static void clearActivityContext() { 
     if (sActivityWR != null) { 
      sActivityWR.clear(); 
     } 
     sActivityWR = null; 
    } 
} 

要使用它,其連接到你的基地活動onResume和方法:

public class RctActivity extends com.facebook.react.ReactActivity { 
    @Override 
    protected void onResume() { 
     Log.v(getTag(), "onResume"); 
     ContextProvider.setActivityContext(this); 
     super.onResume(); 
    } 

    @Override 
    protected void onPause() { 
     Log.v(getTag(), "onPause"); 
     ContextProvider.clearActivityContext(); 
     super.onPause(); 
    } 
} 

不要忘了,現在你的MainActivity需要延長RctActivity

+0

無法解析類「RctActivityModule」中的「ContextProvider」。 – Shivang

+0

上下文提供者是我寫的一個小幫助類。我將它添加到答案 –

+0

我正在導入js文件: import'./home/ttnd/ReactTestProject/android/app/src/main/java/com/reacttestproject/RctActivity'..... and facing錯誤......... 要求未知模塊「./home/ttnd/ReactTestProject/android/app/src/main/java/com/reacttestproject/RctActivity」。如果您確定該模塊在那裏,請嘗試重新啓動打包程序 – Shivang