美文网首页安卓
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.haomeiwen.com/subject/wiumyltx.html