手机桌面的动态设置,有几点小问题

<service
    android:name=".VideoLiveWallpaper"
    android:label="@string/app_name"
    android:permission="android.permission.BIND_WALLPAPER"
    android:process=":wallpaper">
    <!-- 为实时壁纸配置intent-filter -->
    <intent-filter>
        <action android:name="android.service.wallpaper.WallpaperService" />
    </intent-filter>
    <!-- 为实时壁纸配置meta-data -->
    <meta-data
        android:name="android.service.wallpaper"
        android:resource="@xml/livewallpaper" />
</service>
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
package com.mvp.livewall;

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.view.SurfaceHolder;

import java.io.IOException;
public class VideoLiveWallpaper extends WallpaperService {

    @Override
    public Engine onCreateEngine() {
        return new VideoEngine();
    }

    public static final String VIDEO_PARAMS_CONTROL_ACTION = "com.zhy.livewallpaper";
    public static final String KEY_ACTION = "action";
    public static final int ACTION_VOICE_SILENCE = 110;
    public static final int ACTION_VOICE_NORMAL = 111;

    public static void voiceSilence(Context context) {
        Intent intent = new Intent(VideoLiveWallpaper.VIDEO_PARAMS_CONTROL_ACTION);
        intent.putExtra(VideoLiveWallpaper.KEY_ACTION, VideoLiveWallpaper.ACTION_VOICE_SILENCE);
        context.sendBroadcast(intent);
    }

    public static void voiceNormal(Context context) {
        Intent intent = new Intent(VideoLiveWallpaper.VIDEO_PARAMS_CONTROL_ACTION);
        intent.putExtra(VideoLiveWallpaper.KEY_ACTION, VideoLiveWallpaper.ACTION_VOICE_NORMAL);
        context.sendBroadcast(intent);
    }
    public static void setToWallPaperNu(Context context) {
        final Intent intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
        intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT,
                new ComponentName(context, VideoLiveWallpaper.class));

        context.startActivity(intent);
    }
    public static String FILE_SELECT_Path = "";



    class VideoEngine extends Engine {

        private MediaPlayer mMediaPlayer;

        private BroadcastReceiver mVideoParamsControlReceiver;
        @Override
        public void onCreate(SurfaceHolder surfaceHolder) {
            super.onCreate(surfaceHolder);

            IntentFilter intentFilter = new IntentFilter(VIDEO_PARAMS_CONTROL_ACTION);
            registerReceiver(mVideoParamsControlReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    int action = intent.getIntExtra(KEY_ACTION, -1);

                    switch (action) {
                        case ACTION_VOICE_NORMAL:
                            mMediaPlayer.setVolume(1.0f, 1.0f);
                            break;
                        case ACTION_VOICE_SILENCE:
                            mMediaPlayer.setVolume(0, 0);
                            break;

                    }
                }
            }, intentFilter);


        }

        @Override
        public void onDestroy() {
            unregisterReceiver(mVideoParamsControlReceiver);
            super.onDestroy();

        }

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

        private class MyCallBack implements SurfaceHolder.Callback {
            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                mMediaPlayer.setDisplay(holder);
            }

            @Override
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

            }

            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {

            }
        }
//      FILE_SELECT_Path = Environment.getExternalStorageDirectory()+ File.separator+"Camera"+File.separator+"fillgood.mp4";


        @Override
        public void onSurfaceCreated(SurfaceHolder holder) {
            super.onSurfaceCreated(holder);
            mMediaPlayer = new MediaPlayer();
            mMediaPlayer.setSurface(holder.getSurface());
            try {
                MainActivity activity =new MainActivity();
                activity.setCallFunc(new MyCallInterface() {
                    @Override
                    public void printName(String path) {
                        FILE_SELECT_Path = path;
                    }
                });
//                activity.call();
                activity.callurl();
                AssetManager assetMg = getApplicationContext().getAssets();
                AssetFileDescriptor fileDescriptor = assetMg.openFd("test1.mp4");
                //抖音:http://aweme.snssdk.com/aweme/v1/playwm/?video_id=701debb376bd443791486199f588b137&line=0
//                mMediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getLength());

                mMediaPlayer.setDataSource(getBaseContext(),Uri.parse("http://aweme.snssdk.com/aweme/v1/playwm/?video_id=701debb376bd443791486199f588b137&line=0"));

                /*if(!"".equals(FILE_SELECT_Path) && FILE_SELECT_Path!=null){
//                    mMediaPlayer.setDataSource(FILE_SELECT_Path);
                    mMediaPlayer.setDataSource(getBaseContext(),Uri.parse(FILE_SELECT_Path));
                }*/


                /*if(!"".equals(FILE_SELECT_Path) && FILE_SELECT_Path!=null){
//                  mMediaPlayer.setDataSource(FILE_SELECT_Path);
                    mMediaPlayer.setDataSource(getBaseContext(),Uri.parse(FILE_SELECT_Path));
                }*/
                mMediaPlayer.setLooping(true);
                mMediaPlayer.setVolume(0, 0);
                mMediaPlayer.prepare();
                mMediaPlayer.start();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            }

        }

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

        @Override
        public void onSurfaceDestroyed(SurfaceHolder holder) {
            super.onSurfaceDestroyed(holder);
            mMediaPlayer.release();
            mMediaPlayer = null;

        }
    }
}
public class MainActivity extends AppCompatActivity {
    @BindView(R.id.id_cb_voice)
    CheckBox idCbVoice;
    @BindView(R.id.openwall)
    TextView openwall;
    @BindView(R.id.myfile)
    TextView myfile;
    @BindView(R.id.urllink)
    EditText urllink;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        idCbVoice.setOnCheckedChangeListener(
                new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(
                            CompoundButton buttonView, boolean isChecked) {

                        if (isChecked) {
                            // 静音
                            VideoLiveWallpaper.voiceSilence(getApplicationContext());
                        } else {
                            VideoLiveWallpaper.voiceNormal(getApplicationContext());
                        }
                    }
                });
    }

    private static final int FILE_SELECT_CODE = 0;

    //选取文件
    private void showFileChooser() {
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("*/*");//    " video/* "
        intent.addCategory(Intent.CATEGORY_OPENABLE);

        try {
            startActivityForResult(Intent.createChooser(intent, "Select a File to Upload"), FILE_SELECT_CODE);
        } catch (ActivityNotFoundException ex) {
            Toast.makeText(this, "Please install a File Manager.", Toast.LENGTH_SHORT).show();
        }
    }

    public static String videoPath = "";
    public static String videoName = "";
    public static String videoinput = "";

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case FILE_SELECT_CODE:
                if (resultCode == RESULT_OK) {
                    // Get the Uri of the selected file
                    Uri uri = data.getData();
                    String path = FileUtils.getPath(this, uri);

//                    videoPath = "\""+path+"\"";
                    videoPath = path;
                    openwall.setText(videoPath);
                    videoName = path.substring((path.lastIndexOf("/") + 1));
//                    videoPath = getFileName(path);
                    myfile.setText(videoName);
                }
                break;
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

    public String getFileName(String pathandname) {

        int start = pathandname.lastIndexOf("/");
        int end = pathandname.lastIndexOf(".");
        if (start != -1 && end != -1) {
            return pathandname.substring(start + 1, end);
        } else {
            return null;
        }

    }

    @OnClick({R.id.videowall, R.id.camerawall, R.id.urlsure, R.id.sure, R.id.openwall})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.videowall:
                VideoLiveWallpaper.setToWallPaperNu(this);
                break;
            case R.id.camerawall:
                final Intent pickWallpaper = new Intent(Intent.ACTION_SET_WALLPAPER);
                Intent chooser = Intent.createChooser(pickWallpaper, "设置壁纸");
                startActivity(chooser);
                break;
            case R.id.urlsure:
                String input=urllink.getText().toString();
//                videoinput="\""+input+"\"";
                videoinput=input;
                FileUtils.total_pathurl = input;
                if (!"".equals(videoinput) && videoinput != null) {
                    VideoLiveWallpaper.setToWallPaperNu(this);
                }

                break;
            case R.id.openwall:
                showFileChooser();
                break;
            case R.id.sure:
                if (!"".equals(videoPath) && videoPath != null) {
                    VideoLiveWallpaper.setToWallPaperNu(this);
                }
                break;
        }
    }
    private MyCallInterface callInterface;

    public void setCallFunc(MyCallInterface callInterface) {
        this.callInterface = callInterface;
    }
    public void callurl() {
        if (!"".equals(videoinput) && videoinput != null) {
            callInterface.printName(videoinput);
        }
    }
    public void call() {
        if (!"".equals(videoPath) && videoPath != null) {
            callInterface.printName(videoPath);
        }
    }
}
public class FileUtils {
    public static String getPath(Context context, Uri uri) {

        if ("content".equalsIgnoreCase(uri.getScheme())) {
            String[] projection = { "_data" };
            Cursor cursor = null;

            try {
                cursor = context.getContentResolver().query(uri, projection,null, null, null);
                int column_index = cursor.getColumnIndexOrThrow("_data");
                if (cursor.moveToFirst()) {
                    return cursor.getString(column_index);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        else if ("file".equalsIgnoreCase(uri.getScheme())) {
            return uri.getPath();
        }

        return null;
    }

    public static String total_pathurl;
}
public interface MyCallInterface {
    public void printName(String path);
}
最重要的xml文件
@xml/livewallpaper
<?xml version="1.0" encoding="utf-8"?>
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android"
           android:thumbnail="@mipmap/ic_launcher" >

</wallpaper>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值