日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

android byte[] 转string 好多问号_Android 仿抖音实现动态壁纸

發(fā)布時(shí)間:2025/3/15 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android byte[] 转string 好多问号_Android 仿抖音实现动态壁纸 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

code小生,一個(gè)專注 Android 領(lǐng)域的技術(shù)平臺(tái)

公眾號(hào)回復(fù) Android 加入我的安卓技術(shù)群

作者:7_px
鏈接:https://www.jianshu.com/p/fc5cf284abbb
聲明:本文已獲7_px授權(quán)發(fā)表,轉(zhuǎn)發(fā)等請(qǐng)聯(lián)系原作者授權(quán)

一、概述:

壁紙運(yùn)行在一個(gè)Android服務(wù)之中,這個(gè)服務(wù)的名字叫做WallpaperService。當(dāng)用戶選擇了一個(gè)壁紙之后,此壁紙所對(duì)應(yīng)的WallpaperService便會(huì)啟動(dòng)并開(kāi)始進(jìn)行壁紙的繪制工作。

Engine是WallpaperService中的一個(gè)內(nèi)部類,實(shí)現(xiàn)了壁紙窗口的創(chuàng)建以及Surface的維護(hù)工作。Engine內(nèi)部實(shí)現(xiàn)了SurfaceView,我們只需要在其內(nèi)部利用MediaPlayer + SurfaceView就可以播放動(dòng)態(tài)壁紙了。

二、實(shí)現(xiàn):

WallpaperService需要一個(gè)xml去配置,然后在AndroidManifest.xml中聲明

<wallpaper?xmlns:android="http://schemas.android.com/apk/res/android"android:thumbnail="@mipmap/icon_lacation_black___cm">
wallpaper>

繼承WallpaperService實(shí)現(xiàn)我們自己的壁紙服務(wù)VideoLiveWallpaper

public?class?VideoLiveWallpaper?extends?WallpaperService?{

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

????class?VideoEngine?extends?Engine?{
????????private?MediaPlayer?mMediaPlayer;

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

????????}

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

????????}

????????@Override
????????public?void?onSurfaceCreated(SurfaceHolder?holder)?{
????????????super.onSurfaceCreated(holder);
????????????mMediaPlayer?=?new?MediaPlayer();
????????????mMediaPlayer.setSurface(holder.getSurface());
????????????try?{
????????????????mMediaPlayer.setDataSource(new?File(FileUtil.getDCIMCameraDir(),?"hlj_wallpaper").getAbsolutePath());
????????????????mMediaPlayer.setLooping(true);
????????????????mMediaPlayer.setVolume(0,?0);
????????????????mMediaPlayer.prepare();
????????????????mMediaPlayer.setOnPreparedListener(new?MediaPlayer.OnPreparedListener()?{
????????????????????@Override
????????????????????public?void?onPrepared(MediaPlayer?mp)?{
????????????????????????mMediaPlayer.start();
????????????????????}
????????????????});

????????????}?catch?(IOException?e)?{
????????????????e.printStackTrace();
????????????}
????????}


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

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

接著聲明這個(gè)服務(wù)同時(shí)聲明我們上面寫(xiě)的xml配置

?<serviceandroid:name=".VideoLiveWallpaper"android:label="@string/app_name"android:permission="android.permission.BIND_WALLPAPER"android:process=":wallpaper">
????????????
????????????<intent-filter>
????????????????<action?android:name="android.service.wallpaper.WallpaperService"?/>
????????????intent-filter>
????????????
????????????<meta-dataandroid:name="android.service.wallpaper"android:resource="@xml/wallpaper"?/>
????????service>

重點(diǎn)在onSurfaceCreated方法中,這里為了可以動(dòng)態(tài)切換不同的壁紙,我是指定去加載一個(gè)固定目錄下的視頻文件,然后不斷的復(fù)制新文件到這個(gè)目錄,因?yàn)橐坏╅_(kāi)啟切換壁紙這個(gè)方法就會(huì)調(diào)用,所以當(dāng)調(diào)用后再動(dòng)態(tài)通知去更改路徑不起作用。

所以我在更換壁紙前先清空

?try?{
????????????????????????????????WallpaperManager.getInstance(getContext())
????????????????????????????????????????.clear();
????????????????????????????}?catch?(IOException?e)?{
????????????????????????????????e.printStackTrace();
????????????????????????????}

再去復(fù)制需要替換的壁紙到指定目錄

?copyFile(file.getAbsolutePath(),
????????????????????????????????????new?File(FileUtil.getDCIMCameraDir(),
????????????????????????????????????????????"hlj_wallpaper").getAbsolutePath());
??/**
?????*?復(fù)制單個(gè)文件
?????*
?????*?@param?oldPath?String?原文件路徑?如:c:/fqf.txt
?????*?@param?newPath?String?復(fù)制后路徑?如:f:/fqf.txt
?????*?@return?boolean
?????*/
????public?void?copyFile(final?String?oldPath,?final?String?newPath)?{
????????progressBar.setVisibility(View.VISIBLE);
????????Observable.create(new?Observable.OnSubscribe()?{@Overridepublic?void?call(Subscriber?super?Boolean>?subscriber)?{try?{int?byteSum?=?0;int?byteRead?;
????????????????????File?oldFile?=?new?File(oldPath);if?(oldFile.exists())?{?//文件存在時(shí)
????????????????????????InputStream?inStream?=?new?FileInputStream(oldPath);?//讀入原文件
????????????????????????FileOutputStream?fs?=?new?FileOutputStream(newPath);byte[]?buffer?=?new?byte[1444];while?((byteRead?=?inStream.read(buffer))?!=?-1)?{
????????????????????????????byteSum?+=?byteRead;?//字節(jié)數(shù)?文件大小
????????????????????????????System.out.println(byteSum);
????????????????????????????fs.write(buffer,?0,?byteRead);
????????????????????????}
????????????????????????inStream.close();
????????????????????????subscriber.onNext(true);
????????????????????????subscriber.onCompleted();
????????????????????}
????????????????}?catch?(Exception?e)?{
????????????????????System.out.println("復(fù)制單個(gè)文件操作出錯(cuò)");
????????????????????e.printStackTrace();
????????????????????subscriber.onCompleted();
????????????????}
????????????}
????????})
????????????????.subscribeOn(Schedulers.io())
????????????????.observeOn(AndroidSchedulers.mainThread())
????????????????.subscribe(new?Observer()?{@Overridepublic?void?onCompleted()?{
????????????????????????progressBar.setVisibility(View.GONE);
????????????????????}@Overridepublic?void?onError(Throwable?e)?{
????????????????????????progressBar.setVisibility(View.GONE);
????????????????????}@Overridepublic?void?onNext(Boolean?aBoolean)?{
????????????????????????progressBar.setVisibility(View.GONE);
????????????????????????setToWallPaper(getContext());
????????????????????}
????????????????});
????}

setToWallPaper 方法就是真正的開(kāi)啟設(shè)置壁紙操作了

public?static?void?setToWallPaper(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);
????}

至此,一個(gè)簡(jiǎn)單的動(dòng)態(tài)壁紙就搞定了。

推薦閱讀

該用路由來(lái)管理你的界面跳轉(zhuǎn)了

Android:手把手教你如何優(yōu)雅的實(shí)現(xiàn)APP啟動(dòng)速度優(yōu)化

登不上高峰,看到的風(fēng)景始終有限

總結(jié)

以上是生活随笔為你收集整理的android byte[] 转string 好多问号_Android 仿抖音实现动态壁纸的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲永久精品一区二区 | 小嫩嫩精品导航 | 中文字字幕在线 | 欧美日韩人妻精品一区在线 | 亚洲高清色 | 桃色一区二区三区 | 福利视频99 | 操操网站 | 欧美激情在线一区 | 国产人妻互换一区二区 | 国产免费激情视频 | 直接看av的网站 | 特黄大片又粗又大又暴 | 亚洲欧美日本一区二区三区 | 97se.com | 国产91精品高潮白浆喷水 | 欧美三级欧美一级 | 最新av免费 | 亲子伦视频一区二区三区 | 亚洲精品视频一区二区 | 国产成人在线观看网站 | 天天艹天天爽 | 国产农村妇女精品一区 | 日韩久久久| 亚洲女优在线观看 | 欧美亚一区二区三区 | 欧美少妇性生活 | 亚洲区小说区 | 国产三级播放 | 亚洲a√| 看片久久| 999久久久久 | 亚洲精品无码不卡在线播he | 熟女俱乐部五十路六十路av | 超碰96在线| 久久九九视频 | 国产嫩bbwbbw高潮 | av片免费在线播放 | 国产成人在线视频观看 | 欧美一区三区三区高中清蜜桃 | 欧美一级一片 | 99热这里只有精品在线观看 | 久热最新| 噼里啪啦国语高清 | 亚洲视频中文字幕 | 一区国产视频 | 久久久亚洲精品视频 | 亚洲国产日韩一区二区 | 日本三级少妇 | 成人在线一区二区 | 免费av在线播放 | 久久精品视频18 | 天堂网8 | 精品欧美一区二区三区免费观看 | 性欧美一区 | 在线三级av | 欧av在线 | 日本强好片久久久久久aaa | 国产吞精囗交久久久 | 牛牛精品一区 | www..99热| 另类图片亚洲色图 | 国产黑丝精品 | 徐锦江一级淫片免费看 | 台湾无码一区二区 | 狠狠干女人 | 牛牛精品一区二区 | av毛片精品 | 日韩美女中文字幕 | 影音先锋成人资源网站 | www.99色| 亚洲一区你懂的 | 国产一卡二卡三卡四卡 | 先锋影视av | 先锋资源av网 | 日本黄色片. | 免费午夜影院 | 丰满肥臀噗嗤啊x99av | 强伦人妻一区二区三区 | 在线香蕉| 亚洲一区二区三区四区在线观看 | 中文无码精品一区二区三区 | 日本理论片午伦夜理片在线观看 | 一级片手机在线观看 | 成人福利网址 | 最近最经典中文mv字幕 | 日韩高清久久 | 亚洲精品视频免费 | 国产成人精品久久二区二区 | 亚洲国产精品久 | 精品人妻一区二区三区日产乱码卜 | 久久国产毛片 | 成人久草 | 欧美日韩精品区别 | 中字幕一区二区三区乱码 | 欧美午夜精品理论片a级按摩 | 熟妇人妻系列aⅴ无码专区友真希 | 免费在线h | 国产手机在线播放 |