美文网首页安卓
Android 保活方法之应用壁纸设置

Android 保活方法之应用壁纸设置

作者: 清朝公主大清正黄旗 | 来源:发表于2021-06-22 18:57 被阅读0次

1、看到我的标题,不要太惊讶,不做过多解释,其实就是用App给手机设置一个壁纸,以提升当前应用的进程等级,这个时候基本应用关闭了,进程还是在的。

2、直接上代码

一、设置壁纸用啥呢?就用 WallpaperService 具体干嘛的,自己去查查吧


public class LiveWallpaperServiceextends WallpaperService {

private static final StringTAG ="LiveWallpaperService";

    private int mIndex =0;

    @Override

    public EngineonCreateEngine() {

return new WallpaperEngine(this);

    }

public class WallpaperEngineextends Engine {

private MediaPlayermediaPlayer =null;

        private Contextcontext;

        public WallpaperEngine(LiveWallpaperService liveWallpaperService) {

this.context = liveWallpaperService;

        }

@Override

        public void onSurfaceCreated(SurfaceHolder holder) {

super.onSurfaceCreated(holder);

            mIndex++;

        }

public void showWall() {

try {

Canvas canvas = getSurfaceHolder().lockCanvas();

                if (canvas ==null)

return;

                Bitmap bitmap = creatBitamp();

                if (bitmap !=null) {

canvas.drawBitmap(bitmap, 0.0F, 0.0F, new Paint());

                }else {

canvas.drawColor(Color.WHITE);

                }

getSurfaceHolder().unlockCanvasAndPost(canvas);

return;

            }catch (Exception exception) {

return;

            }

}

public BitmapcreatBitamp() {

Bitmap bitmap =null;

            // 获取壁纸管理器

            // 获取壁纸

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

try {

if (mIndex <=1 && !isLiveWallpaperRunning(context, getPackageName())) {

Drawable showDrawable = getResources().getDrawable(R.mipmap.wall_pager_img);

                        if (showDrawable ==null) {

return null;

                        }

bitmap = drawableToBitmap(showDrawable);

                        bitmap = Bitmap.createScaledBitmap(bitmap,

                                ScreenUtils.getScreenSize(context)[0],

                                ScreenUtils.getScreenSize(context)[1], true);

                    }else {

WallpaperManager wallpaperManager = WallpaperManager.getInstance(getApplicationContext());

                        Drawable wallpaperDrawable = wallpaperManager.getDrawable();

                        bitmap = drawableToBitmap(wallpaperDrawable);

                    }

}catch (Exception e) {

e.printStackTrace();

                }

}

return bitmap;

        }

/**

        * Drawable转换成一个Bitmap

*

        * @param drawable drawable对象

        * @return

        */

        public BitmapdrawableToBitmap(Drawable drawable) {

Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(),

                    drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);

            Canvas canvas =new Canvas(bitmap);

            drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),

                    drawable.getIntrinsicHeight());

            drawable.draw(canvas);

            return bitmap;

        }

@Override

        public void onSurfaceDestroyed(SurfaceHolder holder) {

super.onSurfaceDestroyed(holder);

        }

@Override

        public void onDestroy() {

Log.i("方法方法付", "onDestroy()");

            if (mediaPlayer !=null) {

mediaPlayer.reset();

                mediaPlayer.release();

                mediaPlayer =null;

            }

super.onDestroy();

        }

@Override

        public void onVisibilityChanged(boolean visible) {

super.onVisibilityChanged(visible);

            if (visible) {

showWall();

            }

}

}

// 这个是用来判断当前App 设置的壁纸是否还在活着,(可能会被其他App替换,这样就会导致保活失效)

public static boolean isLiveWallpaperRunning(Context context, String tagetPackageName) {

// 得到壁纸管理器

        WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);

        // 如果系统使用的壁纸是动态壁纸话则返回该动态壁纸的信息,否则会返回null

        WallpaperInfo wallpaperInfo = wallpaperManager.getWallpaperInfo();

        if (wallpaperInfo !=null) {

// 如果是动态壁纸,则得到该动态壁纸的包名,并与想知道的动态壁纸包名做比较

            String currentLiveWallpaperPackageName = wallpaperInfo.getPackageName();

            if (currentLiveWallpaperPackageName.equals(tagetPackageName)) {

return true;

            }

}

return false;

    }

}

上面就一个外部class 类,ScreenUtils 是用来设置bitmap的宽高的,因为设置壁纸,肯定要把图设置的和手机屏幕宽高一样,所以他就是或者屏幕宽高的,代码就不贴合出来了,自己写吧,这种代码多的很。

二、第二部就是在你的闪屏也,每次进来的时候判断,用上面的最后一个方法就可以判断当前App设置的壁纸是否还在,不在的话,为了保活效果,需要在设置一次。在的就直接进入App

App如果进入设置壁纸页面后,需要闪屏页重写 onActivityResult 方法,可以通过判断壁纸是否设置完成。剩下的就不用管了。完成 了。

接下来的就是你想要保活所要的事情了,接收推送?还是固定时间做什么事,等等,你还可以在进入应用开启一个service,这个service会告诉你你的应用是否还在活着,因为现在service 都必须设置为前台可见的service通知,所以能看到。具体想干什么,就去做吧......

三、当前这个设置壁纸的service是需要在在清单文件中注册的,怎么写呢?

先写一个xml : live_wall_paper.xml


<wallpaper xmlns:android="http://schemas.android.com/apk/res/android"

    android:thumbnail="@mipmap/ic_launcher" />

xml 就上面那点东西就行啦

然后注册壁纸


<service

 android:name=".service.LiveWallpaperService"

    android:label="@string/app_name"

    android:permission="android.permission.BIND_WALLPAPER">

    <!-- 为实时壁纸配置intent-filter -->

        <action android:name="android.service.wallpaper.WallpaperService" />

    <!-- 为实时壁纸配置meta-data -->

        android:name="android.service.wallpaper"

        android:resource="@xml/live_wall_paper" />

</service>

好了,这才结束吗!快去试试吧!

作为android 开发是喜欢,作为用户吗,我讨厌做这个事的人,不喜欢后天一直运行App,会让手机耗电快,卡,,,,,

相关文章

  • Android 保活方法之应用壁纸设置

    请看另一个链接,这个链接代码块看起来费劲,改掉了换到另一个里面去了 https://www.jianshu.com...

  • Android 保活方法之应用壁纸设置

    1、看到我的标题,不要太惊讶,不做过多解释,其实就是用App给手机设置一个壁纸,以提升当前应用的进程等级,这个时候...

  • ANDROID进程保活

    参考资料 安卓保活大全 保活手段 Android闹钟设置的解决方案 背景 随着Android系统的不断升级以及各大...

  • android应用保活

    https://juejin.cn/post/7121643256495996936#heading-0[http...

  • 【转】Android应用保活

    目前市面上的应用,貌似除了微信和手Q都会比较担心被用户或者系统(厂商)杀死问题。本文对 Android 进程拉活进...

  • Android应用保活实践

    最近在做的项目中需要app在后台常驻,用于实时上传一些健康信息数据,便于后台实时查看用户的健康状况。自从Andro...

  • Android应用保活实践

    最近在做的项目中需要app在后台常驻,用于实时上传一些健康信息数据,便于后台实时查看用户的健康状况。自从Andro...

  • Android:应用保活实践

    最近在做的项目中需要app在后台常驻,用于实时上传一些健康信息数据,便于后台实时查看用户的健康状况。 自从Andr...

  • Android应用保活实践

    最近在做的项目中需要app在后台常驻,用于实时上传一些健康信息数据,便于后台实时查看用户的健康状况。自从Andro...

  • Android应用保活实践

    最近在做的项目中需要app在后台常驻,用于实时上传一些健康信息数据,便于后台实时查看用户的健康状况。自从Andro...

网友评论

    本文标题:Android 保活方法之应用壁纸设置

    本文链接:https://www.haomeiwen.com/subject/wiumyltx.html