Задать вопрос
@geyurgfuyewgfyuguy

Java, React Native Module почему не работает вызов?

Всем привет, прошу помощи, есть класс для установления живых обоев на андроид. Вроде бы все подключил и должно работать как надо, но ничего не работает. Подскажите, что не так?

package com.packagename;

import android.content.res.AssetManager;
import android.os.Environment;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import android.content.Context;

import android.media.ThumbnailUtils;
import android.os.Build;
import android.util.DisplayMetrics;
import android.view.WindowManager;

import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Promise;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.WallpaperManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.service.wallpaper.WallpaperService;
import android.text.TextUtils;
import android.util.Log;
import android.view.SurfaceHolder;
import android.os.Build;

import 	android.app.PendingIntent;

import android.app.Activity;

import java.io.IOException;

public class ReactVideoWallpaperModule extends ReactContextBaseJavaModule {
	Context context;

    private File file;
	private VideoWallpaper mVideoWallpaper;

    public ReactVideoWallpaperModule(ReactApplicationContext reactContext) {
        super(reactContext);
        context = reactContext.getApplicationContext();
    }

    @Override
    public String getName() {
        return "ReactVideoWallpaper";
    }

    @ReactMethod
    void setWallpaperVideo(final String videoUri) {
    	mVideoWallpaper = new VideoWallpaper();

		file = new File(videoUri);

        mVideoWallpaper.setToWallPaper(context, file.getAbsolutePath());
    }

	public class VideoWallpaper extends WallpaperService {
	    private final String TAG = VideoWallpaper.class.getName();
	    private String sVideoPath;
	    protected int playheadTime = 0;

	    public void setToWallPaper(Context context,String videoPath) {
	        try {
	            context.clearWallpaper();
	        } catch (IOException e) {
	            e.printStackTrace();
	        }

	        sVideoPath = videoPath;
	        Intent intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
			intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, new ComponentName(context, VideoWallpaper.class));
			intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

	        context.startActivity(intent);
	    }

	    @Override
	    public Engine onCreateEngine() {
	    	Log.i( TAG, "( START VideoEngine )");
	        return new VideoWallpagerEngine();
	    }

	    private class VideoWallpagerEngine extends Engine {
	    	private final String TAG = getClass().getSimpleName();
	        private MediaPlayer mediaPlayer;

	        public VideoWallpagerEngine() {
	        	super();
	        	Log.i( TAG, "( VideoEngine )");
	        	mediaPlayer = new MediaPlayer();
	        	try {
		        	mediaPlayer.setDataSource(sVideoPath);
					mediaPlayer.setLooping(true);
				}  catch (IOException e) {
	                e.printStackTrace();
	            }
	        }

	        @Override
	        public void onCreate(SurfaceHolder surfaceHolder) {
	            super.onCreate(surfaceHolder);
	        }

	        @Override
	        public void onDestroy() {
	            super.onDestroy();
	        }

	        @Override
	        public void onVisibilityChanged(boolean visible) {
	            if (visible){
	                mediaPlayer.start();
	            }else {
	              mediaPlayer.pause();
	            }
	        }

	        @Override
	        public void onSurfaceCreated(SurfaceHolder holder) {
	        	Log.i( TAG, "onSurfaceCreated" );
				mediaPlayer.setSurface(holder.getSurface());
				mediaPlayer.start();
	        }

	        @Override
	        public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
	            super.onSurfaceChanged(holder, format, width, height);
	        }

	        @Override
	        public void onSurfaceDestroyed(SurfaceHolder holder) {
	        	Log.i( TAG, "( INativeWallpaperEngine ): onSurfaceDestroyed" );
	            playheadTime = mediaPlayer.getCurrentPosition();
				mediaPlayer.reset();
				mediaPlayer.release();
	        }
	    }
	}
}


Вызов на стороне реката:

const result = await NativeModules.ReactVideoWallpaper.setWallpaperVideo(dirFile);


Файл передается, но не устанавливается, лог тоже ничего не показывает.

Так же сделал дебаг и странно, что не вызывается класс VideoWallpaper при intent когда передается компонент, совсем ничего не происходит, в чем может быть проблема?

За импорты не пинайте, почищу)
  • Вопрос задан
  • 99 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы