diff --git a/android/src/main/java/com/befovy/fijkplayer/FijkEngine.java b/android/src/main/java/com/befovy/fijkplayer/FijkEngine.java index 6ac4e9d8..99c8bf59 100644 --- a/android/src/main/java/com/befovy/fijkplayer/FijkEngine.java +++ b/android/src/main/java/com/befovy/fijkplayer/FijkEngine.java @@ -33,15 +33,18 @@ interface FijkEngine { + @Nullable TextureRegistry.SurfaceTextureEntry createSurfaceEntry(); + @Nullable BinaryMessenger messenger(); + @Nullable Context context(); + @Nullable String lookupKeyForAsset(@NonNull String asset, @Nullable String packageName); - void onPlayingChange(int delta); void onPlayableChange(int delta); diff --git a/android/src/main/java/com/befovy/fijkplayer/FijkPlayer.java b/android/src/main/java/com/befovy/fijkplayer/FijkPlayer.java index 9c1877a7..2e8e9531 100644 --- a/android/src/main/java/com/befovy/fijkplayer/FijkPlayer.java +++ b/android/src/main/java/com/befovy/fijkplayer/FijkPlayer.java @@ -22,6 +22,7 @@ package com.befovy.fijkplayer; +import android.content.Context; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.SurfaceTexture; @@ -131,7 +132,7 @@ int getPlayerId() { void setup() { if (mJustSurface) return; - if (mHostOptions.getIntOption(HostOption.ENABLE_SNAPSHOT,0) > 0) { + if (mHostOptions.getIntOption(HostOption.ENABLE_SNAPSHOT, 0) > 0) { mIjkMediaPlayer.setAmcGlesRender(); mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", "fcc-_es2"); } @@ -142,13 +143,20 @@ long setupSurface() { if (mSurfaceTextureEntry == null) { TextureRegistry.SurfaceTextureEntry surfaceTextureEntry = mEngine.createSurfaceEntry(); mSurfaceTextureEntry = surfaceTextureEntry; - mSurfaceTexture = surfaceTextureEntry.surfaceTexture(); - mSurface = new Surface(mSurfaceTexture); + if (surfaceTextureEntry != null) { + mSurfaceTexture = surfaceTextureEntry.surfaceTexture(); + mSurface = new Surface(mSurfaceTexture); + } if (!mJustSurface) { mIjkMediaPlayer.setSurface(mSurface); } } - return mSurfaceTextureEntry.id(); + if (mSurfaceTextureEntry != null) + return mSurfaceTextureEntry.id(); + else { + Log.e("FIJKPLAYER", "setup surface, null SurfaceTextureEntry"); + return 0; + } } void release() { @@ -332,7 +340,7 @@ private void applyOptions(Object options) { for (Object o : optionsMap.keySet()) { Object option = optionsMap.get(o); if (o instanceof Integer && option instanceof Map) { - Integer cat = (Integer) o; + int cat = (Integer) o; Map optionMap = (Map) option; for (Object key : optionMap.keySet()) { Object value = optionMap.get(key); @@ -404,11 +412,12 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result } } try { - if (openAsset) { - AssetManager assetManager = mEngine.context().getAssets(); + Context context = mEngine.context(); + if (openAsset && context != null) { + AssetManager assetManager = context.getAssets(); InputStream is = assetManager.open(uri.getPath() != null ? uri.getPath() : "", AssetManager.ACCESS_RANDOM); mIjkMediaPlayer.setDataSource(new RawMediaDataSource(is)); - } else { + } else if (context != null){ if (TextUtils.isEmpty(uri.getScheme()) || "file".equals(uri.getScheme())) { String path = uri.getPath() != null ? uri.getPath() : ""; IMediaDataSource dataSource = new FileMediaDataSource(new File(path)); @@ -416,8 +425,13 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result } else { mIjkMediaPlayer.setDataSource(mEngine.context(), uri); } + } else { + Log.e("FIJKPLAYER", "context null, can't setDataSource"); } handleEvent(PLAYBACK_STATE_CHANGED, initialized, -1, null); + if (context == null) { + handleEvent(PLAYBACK_STATE_CHANGED, error, -1, null); + } result.success(null); } catch (FileNotFoundException e) { result.error("-875574348", "Local File not found:" + e.getMessage(), null); @@ -468,7 +482,7 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result } else if (call.method.equals("snapshot")) { if (mHostOptions.getIntOption(HostOption.ENABLE_SNAPSHOT, 0) > 0) { mIjkMediaPlayer.snapShot(); - } else { + } else { mMethodChannel.invokeMethod("_onSnapshot", "not support"); } result.success(null); diff --git a/android/src/main/java/com/befovy/fijkplayer/FijkPlugin.java b/android/src/main/java/com/befovy/fijkplayer/FijkPlugin.java index b6f91c0c..78f60c89 100644 --- a/android/src/main/java/com/befovy/fijkplayer/FijkPlugin.java +++ b/android/src/main/java/com/befovy/fijkplayer/FijkPlugin.java @@ -151,7 +151,6 @@ public void onDetachedFromActivityForConfigChanges() { @Override public void onReattachedToActivityForConfigChanges(ActivityPluginBinding binding) { mActivity = new WeakReference<>(binding.getActivity()); - if (mActivity.get() instanceof FijkVolume.CanListenVolumeKey) { FijkVolume.CanListenVolumeKey canListenVolumeKey = (FijkVolume.CanListenVolumeKey) mActivity.get(); canListenVolumeKey.setVolumeKeyListener(this); @@ -164,6 +163,7 @@ public void onDetachedFromActivity() { } @Override + @Nullable public TextureRegistry.SurfaceTextureEntry createSurfaceEntry() { if (mBinding != null) { return mBinding.getTextureRegistry().createSurfaceTexture(); @@ -174,6 +174,7 @@ public TextureRegistry.SurfaceTextureEntry createSurfaceEntry() { } @Override + @Nullable public BinaryMessenger messenger() { if (mBinding != null) { return mBinding.getBinaryMessenger(); @@ -184,19 +185,27 @@ public BinaryMessenger messenger() { } @Override + @Nullable public Context context() { - return mContext.get(); + if (mContext != null) + return mContext.get(); + else + return null; } + @Nullable private Activity activity() { if (mRegistrar != null) { return mRegistrar.activity(); - } else { + } else if (mActivity != null) { return mActivity.get(); + } else { + return null; } } @Override + @Nullable public String lookupKeyForAsset(@NonNull String asset, @Nullable String packageName) { String path = null; if (mBinding != null) { @@ -262,6 +271,7 @@ public void onCancel(Object o) { @Override public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { + Activity activity; switch (call.method) { case "getPlatformVersion": result.success("Android " + android.os.Build.VERSION.RELEASE); @@ -305,8 +315,8 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { } case "setOrientationPortrait": boolean changedPort = false; - if (activity() != null) { - final Activity activity = activity(); + activity = activity(); + if (activity != null) { int current_orientation = activity.getResources().getConfiguration().orientation; if (current_orientation == Configuration.ORIENTATION_LANDSCAPE) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { @@ -321,8 +331,8 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { break; case "setOrientationLandscape": boolean changedLand = false; - if (activity() != null) { - final Activity activity = activity(); + activity = activity(); + if (activity != null) { int current_orientation = activity.getResources().getConfiguration().orientation; if (current_orientation == Configuration.ORIENTATION_PORTRAIT) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { @@ -336,8 +346,8 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { result.success(changedLand); break; case "setOrientationAuto": - if (activity() != null) { - final Activity activity = activity(); + activity = activity(); + if (activity != null) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_USER); } else { @@ -481,7 +491,6 @@ public void setScreenOn(boolean on) { */ private boolean isScreenKeptOn() { Activity activity = activity(); - if (activity == null || activity.getWindow() == null) return false; int flag = activity.getWindow().getAttributes().flags; @@ -491,12 +500,11 @@ private boolean isScreenKeptOn() { private float getScreenBrightness() { Activity activity = activity(); - if (activity == null || activity.getWindow() == null) return 0; float brightness = activity.getWindow().getAttributes().screenBrightness; if (brightness < 0) { - Context context = mContext.get(); + Context context = context(); Log.w("FIJKPLAYER", "window attribute brightness less than 0"); try { if (context != null) { @@ -512,7 +520,6 @@ private float getScreenBrightness() { private void setScreenBrightness(float brightness) { Activity activity = activity(); - if (activity == null || activity.getWindow() == null) return; WindowManager.LayoutParams layoutParams = activity.getWindow().getAttributes(); @@ -549,7 +556,7 @@ private void requestAudioFocus() { } @TargetApi(26) - @SuppressWarnings("deprecation") + // @SuppressWarnings("deprecation") private void abandonAudioFocus() { AudioManager audioManager = audioManager(); if (audioManager == null) @@ -581,7 +588,7 @@ public void audioFocus(boolean request) { @Nullable private AudioManager audioManager() { - Context context = mContext.get(); + Context context = context(); if (context != null) { return (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); } else {