zoukankan      html  css  js  c++  java
  • 解决内部存储空间紧张,不加载桌面壁纸,桌面壁纸显示

    说明:

    当内部存储空间不足的情况下不加载壁纸,以节省资源。


    修改方式:在WallpaperManagerService.java中进行修改;

    思路:首先在加载壁纸之前我们需要判断当前存储空间是否紧张。代码如下:(源码地址

    public boolean isStorageLow(){
      try{
          if(mIpackageManager!=null){
              return mIPackageManager.isStorageLow();
          }

      }catch(RemoteException e){
        
      }
      return false;
    }



         boolean bindWallpaperComponentLocked(ComponentName componentName, boolean force,
    0813             boolean fromUser, WallpaperData wallpaper, IRemoteCallback reply) {
    0814         if (DEBUG) Slog.v(TAG, "bindWallpaperComponentLocked: componentName=" + componentName);

    if(isStorageLow()){
        return false;
    }

    0815         // Has the component changed?
    0816         if (!force) {
    0817             if (wallpaper.connection != null) {
    0818                 if (wallpaper.wallpaperComponent == null) {
    0819                     if (componentName == null) {
    0820                         if (DEBUG) Slog.v(TAG, "bindWallpaperComponentLocked: still using default");
    0821                         // Still using default wallpaper.
    0822                         return true;
    0823                     }
    0824                 } else if (wallpaper.wallpaperComponent.equals(componentName)) {
    0825                     // Changing to same wallpaper.
    0826                     if (DEBUG) Slog.v(TAG, "same wallpaper");
    0827                     return true;
    0828                 }
    0829             }
    0830         }
    0831         
    0832         try {
    0833             if (componentName == null) {
    0834                 String defaultComponent = 
    0835                     mContext.getString(com.android.internal.R.string.default_wallpaper_component);
    0836                 if (defaultComponent != null) {
    0837                     // See if there is a default wallpaper component specified
    0838                     componentName = ComponentName.unflattenFromString(defaultComponent);
    0839                     if (DEBUG) Slog.v(TAG, "Use default component wallpaper:" + componentName);
    0840                 }
    0841                 if (componentName == null) {
    0842                     // Fall back to static image wallpaper
    0843                     componentName = IMAGE_WALLPAPER;
    0844                     //clearWallpaperComponentLocked();
    0845                     //return;
    0846                     if (DEBUG) Slog.v(TAG, "Using image wallpaper");
    0847                 }
    0848             }
    0849             int serviceUserId = wallpaper.userId;
    0850             ServiceInfo si = mIPackageManager.getServiceInfo(componentName,
    0851                     PackageManager.GET_META_DATA | PackageManager.GET_PERMISSIONS, serviceUserId);
    0852             if (si == null) {
    0853                 // The wallpaper component we're trying to use doesn't exist
    0854                 Slog.w(TAG, "Attempted wallpaper " + componentName + " is unavailable");
    0855                 return false;
    0856             }
    0857             if (!android.Manifest.permission.BIND_WALLPAPER.equals(si.permission)) {
    0858                 String msg = "Selected service does not require "
    0859                         + android.Manifest.permission.BIND_WALLPAPER
    0860                         + ": " + componentName;
    0861                 if (fromUser) {
    0862                     throw new SecurityException(msg);
    0863                 }
    0864                 Slog.w(TAG, msg);
    0865                 return false;
    0866             }
    0867             
    0868             WallpaperInfo wi = null;
    0869             
    0870             Intent intent = new Intent(WallpaperService.SERVICE_INTERFACE);
    0871             if (componentName != null && !componentName.equals(IMAGE_WALLPAPER)) {
    0872                 // Make sure the selected service is actually a wallpaper service.
    0873                 List<ResolveInfo> ris =
    0874                         mIPackageManager.queryIntentServices(intent,
    0875                                 intent.resolveTypeIfNeeded(mContext.getContentResolver()),
    0876                                 PackageManager.GET_META_DATA, serviceUserId);
    0877                 for (int i=0; i<ris.size(); i++) {
    0878                     ServiceInfo rsi = ris.get(i).serviceInfo;
    0879                     if (rsi.name.equals(si.name) &&
    0880                             rsi.packageName.equals(si.packageName)) {
    0881                         try {
    0882                             wi = new WallpaperInfo(mContext, ris.get(i));
    0883                         } catch (XmlPullParserException e) {
    0884                             if (fromUser) {
    0885                                 throw new IllegalArgumentException(e);
    0886                             }
    0887                             Slog.w(TAG, e);
    0888                             return false;
    0889                         } catch (IOException e) {
    0890                             if (fromUser) {
    0891                                 throw new IllegalArgumentException(e);
    0892                             }
    0893                             Slog.w(TAG, e);
    0894                             return false;
    0895                         }
    0896                         break;
    0897                     }
    0898                 }
    0899                 if (wi == null) {
    0900                     String msg = "Selected service is not a wallpaper: "
    0901                             + componentName;
    0902                     if (fromUser) {
    0903                         throw new SecurityException(msg);
    0904                     }
    0905                     Slog.w(TAG, msg);
    0906                     return false;
    0907                 }
    0908             }
    0909             
    0910             // Bind the service!
    0911             if (DEBUG) Slog.v(TAG, "Binding to:" + componentName);
    0912             WallpaperConnection newConn = new WallpaperConnection(wi, wallpaper);
    0913             intent.setComponent(componentName);
    0914             intent.putExtra(Intent.EXTRA_CLIENT_LABEL,
    0915                     com.android.internal.R.string.wallpaper_binding_label);
    0916             intent.putExtra(Intent.EXTRA_CLIENT_INTENT, PendingIntent.getActivityAsUser(
    0917                     mContext, 0,
    0918                     Intent.createChooser(new Intent(Intent.ACTION_SET_WALLPAPER),
    0919                             mContext.getText(com.android.internal.R.string.chooser_wallpaper)),
    0920                     0, null, new UserHandle(serviceUserId)));
    0921             if (!mContext.bindServiceAsUser(intent, newConn,
    0922                     Context.BIND_AUTO_CREATE | Context.BIND_SHOWING_UI,
    0923                     new UserHandle(serviceUserId))) {
    0924                 String msg = "Unable to bind service: "
    0925                         + componentName;
    0926                 if (fromUser) {
    0927                     throw new IllegalArgumentException(msg);
    0928                 }
    0929                 Slog.w(TAG, msg);
    0930                 return false;
    0931             }
    0932             if (wallpaper.userId == mCurrentUserId && mLastWallpaper != null) {
    0933                 detachWallpaperLocked(mLastWallpaper);
    0934             }
    0935             wallpaper.wallpaperComponent = componentName;
    0936             wallpaper.connection = newConn;
    0937             wallpaper.lastDiedTime = SystemClock.uptimeMillis();
    0938             newConn.mReply = reply;
    0939             try {
    0940                 if (wallpaper.userId == mCurrentUserId) {
    0941                     if (DEBUG)
    0942                         Slog.v(TAG, "Adding window token: " + newConn.mToken);
    0943                     mIWindowManager.addWindowToken(newConn.mToken,
    0944                             WindowManager.LayoutParams.TYPE_WALLPAPER);
    0945                     mLastWallpaper = wallpaper;
    0946                 }
    0947             } catch (RemoteException e) {
    0948             }
    0949         } catch (RemoteException e) {
    0950             String msg = "Remote exception for " + componentName + " " + e;
    0951             if (fromUser) {
    0952                 throw new IllegalArgumentException(msg);
    0953             }
    0954             Slog.w(TAG, msg);
    0955             return false;
    0956         }
    0957         return true;
    0958     }

    注!

    红色部分为增加代码。


  • 相关阅读:
    新增访客数量MR统计之NewInstallUserMapper相关准备
    新增访客数量MR统计之NewInstallUserMapper中维度信息准备
    编译器编译原理理解
    构造函数的理解和应用场景
    大小字节序的深入理解和鉴定系统字节序方法
    定义结构体和初始化的方法
    Source Insight 光标变粗设置NotePad++光标设置
    栈实现java
    快速排序java
    希尔排序java
  • 原文地址:https://www.cnblogs.com/bill-technology/p/4130804.html
Copyright © 2011-2022 走看看