<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>