2017-07-17 214 views
1

我试图让我的反应原生应用中播放视频。 I'm trying to use react-native-video而是通过react-native run-android运行应用程序时出现错误消息:反应原生视频与反应原生导航工作

“不确定是不是一个对象(evaluating'_reactNative.NativeModules.UIManager.RCT Video.Constants')

此消息并没有真正告诉我想了很多,但在尝试让它工作一段时间后,我开始怀疑react-native-navigation这是我用于我的应用的导航,它与它有关,所以我创建了一个新的react-native项目并添加了反应,本机视频到它,并得到它的工作没有太多的麻烦。

所以我的问题是,如果任何人都经历过同样的事情,并可以提供解决方案让这两个软件包一起工作?

我settings.gradle:

rootProject.name = 'newproj' 
include ':react-native-video' 
project(':react-native-video').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-video/android') 

include ':app' 
include ':react-native-navigation' 
project(':react-native-navigation').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-navigation/android/app/') 

的build.gradle模块反应天然视频

apply plugin: 'com.android.library' 

android { 
    compileSdkVersion 23 
    buildToolsVersion '25.0.1' 

    defaultConfig { 
     minSdkVersion 16 
     targetSdkVersion 22 
     versionCode 1 
     versionName "1.0" 
     ndk { 
      abiFilters "armeabi-v7a", "x86" 
     } 
    } 
} 

dependencies { 
    provided 'com.facebook.react:react-native:+' 
    compile 'com.yqritc:android-scalablevideoview:1.0.1' 
} 

依赖于build.grade模块:应用

dependencies { 
    compile fileTree(dir: "libs", include: ["*.jar"]) 
    compile "com.android.support:appcompat-v7:23.0.1" 
    compile "com.facebook.react:react-native:+" // From node_modules 
    compile project(':react-native-navigation') 
    compile project(':react-native-video') 
} 

MainApplication.java

import android.app.Application; 

import com.facebook.react.ReactApplication; 
import com.brentvatne.react.ReactVideoPackage; 
import com.facebook.react.ReactNativeHost; 
import com.facebook.react.ReactPackage; 
import com.facebook.react.shell.MainReactPackage; 
import com.facebook.soloader.SoLoader; 
import com.reactnativenavigation.NavigationApplication; 

import java.util.Arrays; 
import java.util.List; 

public class MainApplication extends NavigationApplication { 

    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { 
    @Override 
    public boolean getUseDeveloperSupport() { 
     return BuildConfig.DEBUG; 
    } 

    @Override 
    protected List<ReactPackage> getPackages() { 
     return Arrays.<ReactPackage>asList(
      new MainReactPackage(), 
      new ReactVideoPackage() 
    ); 
    } 
    }; 

    @Override 
    public ReactNativeHost getReactNativeHost() { 
    return mReactNativeHost; 
    } 

    @Override 
    public void onCreate() { 
    super.onCreate(); 
    SoLoader.init(this, /* native exopackage */ false); 
    } 

    @Override 
    public boolean isDebug() { 
     // Make sure you are using BuildConfig from your own application 
     return BuildConfig.DEBUG; 
    } 

    @Override 
    public List<ReactPackage> createAdditionalReactPackages() { 
     return null; 
    } 

} 

在我反应过来本地项目:

import Video from 'react-native-video'; 

    <View style={styles.container}> 
     <Video source={{uri: "youtube.com"}} 
      ref={(ref) => { 
      this.player = ref 
      }} 
resizeMode="cover" 
style={styles.backgroundVideo} 
/> 
</View> 
+0

能否请您与您的代码更新您的文章? –

+0

不知道它如何帮助解决这个问题,但我已经更新了代码! – smuvv

+1

'react-navigation'和'react-native-video'之间没有联系,'undefined不是一个对象'通常在你忘记声明参数时发生。因此,如果您发布该特定屏幕的完整代码(js代码不是java代码) –

回答

1

createAdditionalReactPackages应该返回的包。

更改此

@Override 
public List<ReactPackage> createAdditionalReactPackages() { 
    return null; 
} 

这样:

@Override 
public List<ReactPackage> createAdditionalReactPackages() { 
    return getPackages(); 
} 
+0

这将会很有帮助,这导致了正确的答案,谢谢! – smuvv