摘要:先上效果圖準(zhǔn)備,桌面是一個(gè)小視頻,要求,符合手機(jī)尺寸,最好不要超過,我這個(gè)只有幾,開發(fā)環(huán)境,由于沒后更新。
先上效果圖
準(zhǔn)備:1,桌面是一個(gè)小視頻,要求,符合手機(jī)尺寸,最好不要超過100M,我這個(gè)只有幾M
2,開發(fā)環(huán)境,由于沒后更新。使用的還是Android studio 2.3.3
前言:對(duì)于動(dòng)態(tài)的壁紙大部分手機(jī)廠商還是保留的,不過發(fā)現(xiàn)oppo某一款就沒有這個(gè)功能了,不過絲毫不影響本應(yīng)用的開發(fā),它只是在沒做動(dòng)態(tài)壁紙的界面而已,系統(tǒng)還是保留的
上代碼:
1,簡(jiǎn)單的布局:
2,動(dòng)態(tài)桌面一直在后臺(tái)跑,肯定就需要service了。繼承WallpaperService
public class MyWallpaper extends WallpaperService { public static final String MYWALLPAPER_ACTION="com.zxyoyo.hosion.dynamicdesk"; public static final String KEY_ACTION="key_action"; public static final int SOUND_OPEN=1; public static final int SOUND_CLOSE=0; @Override public Engine onCreateEngine() { return new MyEngine(); } public static void openSound(Context context) { Intent intent = new Intent(MYWALLPAPER_ACTION); intent.putExtra(KEY_ACTION, SOUND_OPEN); context.sendBroadcast(intent); } public static void closeSound(Context context) { Intent intent = new Intent(MYWALLPAPER_ACTION); intent.putExtra(KEY_ACTION, SOUND_CLOSE); context.sendBroadcast(intent); } public static void setDynamicWallPaper(Context context){ final Intent intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER); intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, new ComponentName(context,MyWallpaper.class)); context.startActivity(intent); } }
其中的MyEngine是內(nèi)部類,繼承wallpaper的engine
class MyEngine extends Engine { private MediaPlayer mediaPlayer; private BroadcastReceiver broadcastReceiver; @Override public void onCreate(SurfaceHolder surfaceHolder) { super.onCreate(surfaceHolder); IntentFilter intentFilter = new IntentFilter(MYWALLPAPER_ACTION); registerReceiver(broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { int action = intent.getIntExtra(KEY_ACTION, -1); switch (action) { case SOUND_OPEN: mediaPlayer.setVolume(1.0f, 1.0f); break; case SOUND_CLOSE: mediaPlayer.setVolume(0, 0); break; } } }, intentFilter); } @Override public void onDestroy() { unregisterReceiver(broadcastReceiver); super.onDestroy(); } @Override public void onVisibilityChanged(boolean visible) { if (visible) { mediaPlayer.start(); } else { mediaPlayer.pause(); } } @Override public void onSurfaceCreated(SurfaceHolder holder) { super.onSurfaceCreated(holder); mediaPlayer = new MediaPlayer(); mediaPlayer.setSurface(holder.getSurface()); try{ AssetManager aManager = getApplicationContext().getAssets(); AssetFileDescriptor fileDescriptor = aManager.openFd("3sheng3shi.mp4"); mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getLength()); //循環(huán)播放我們的視頻 mediaPlayer.setLooping(true); //默認(rèn)將音量設(shè)置成最小 mediaPlayer.setVolume(0,0); mediaPlayer.prepare(); mediaPlayer.start(); }catch (IOException 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); //釋放,置空 mediaPlayer.release(); mediaPlayer = null; } }
3,最后就是在MainActivity中調(diào)用了
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cbSound = (CheckBox) findViewById(R.id.cb_sound); //監(jiān)聽是否開啟聲音 cbSound.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked){ //開啟聲音 MyWallpaper.openSound(MainActivity.this); }else { //關(guān)閉聲音 MyWallpaper.closeSound(MainActivity.this); } } }); } //按鈕的點(diǎn)擊事件 public void setDynamicDesk(View view){ MyWallpaper.setDynamicWallPaper(this); }
總結(jié):兩個(gè)類就實(shí)現(xiàn)了動(dòng)態(tài)桌面效果,很簡(jiǎn)單吧,自己可以動(dòng)手試試了,還是挺實(shí)用的;
本質(zhì)其實(shí)就是系統(tǒng)的一個(gè)api,有關(guān)wallpaper的更多內(nèi)容我就不詳細(xì)說明,下篇文章繼續(xù)寫這個(gè)項(xiàng)目的升級(jí)版! [附上git源碼][2]
最后終極版本已提交企鵝寶求給五星好評(píng)點(diǎn)擊前往,以后的文章就是一步步拆分這個(gè)這應(yīng)用,包括服務(wù)器的搭建,數(shù)據(jù)添加!謝謝支持!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67750.html
摘要:前言上一篇文章已經(jīng)實(shí)現(xiàn)了將文件中設(shè)置成動(dòng)態(tài)壁紙安卓實(shí)戰(zhàn)項(xiàng)目動(dòng)態(tài)桌面簡(jiǎn)單實(shí)現(xiàn)需求既然文件能用于動(dòng)態(tài)桌面,那么手機(jī)中的視頻也可以吧,有沒有大膽的想法上效果圖分析,類似于上面圖片的搜索效果,通過點(diǎn)擊,搜索出我們需要的文件圖片中用演示,此時(shí)用到 前言:上一篇文章已經(jīng)實(shí)現(xiàn)了將assets文件中設(shè)置成動(dòng)態(tài)壁紙:安卓實(shí)戰(zhàn)項(xiàng)目-動(dòng)態(tài)桌面-簡(jiǎn)單實(shí)現(xiàn) 需求:既然assets文件能用于動(dòng)態(tài)桌面,那么手機(jī)中...
摘要:咱媽說別亂點(diǎn)鏈接之淺談攻擊閱讀掘金作者馬達(dá)編輯迷鹿馬達(dá),精通開發(fā)開發(fā),擅長接口設(shè)計(jì)以及平臺(tái)化建設(shè),獨(dú)自主導(dǎo)過多個(gè)產(chǎn)品。一題目購物應(yīng)用分環(huán)境要求安全學(xué)習(xí)資料匯總掘金安全學(xué)習(xí)資料匯總安全學(xué)習(xí)網(wǎng)站收集 咱媽說別亂點(diǎn)鏈接之淺談 CSRF 攻擊 - 閱讀 - 掘金作者 | 馬達(dá)編輯 | 迷鹿 馬達(dá), 精通PHP開發(fā)、Web開發(fā),擅長api接口設(shè)計(jì)以及平臺(tái)化建設(shè),獨(dú)自主導(dǎo)過多個(gè)Web產(chǎn)品。目前就職...
閱讀 1371·2021-09-10 10:51
閱讀 2836·2019-08-30 15:54
閱讀 3377·2019-08-29 17:11
閱讀 936·2019-08-29 16:44
閱讀 1399·2019-08-29 13:47
閱讀 1095·2019-08-29 13:47
閱讀 1496·2019-08-29 12:23
閱讀 1052·2019-08-28 18:18