添加控制wifi白名单的接口

在frameworks/base/core/java/android/app/customized/ICustomizedService.aidl中添加接口

package android.app.customized;
 
interface ICustomizedService{
   void setWifiWhiteList(inout List<String> wifiiNameList);
   List<String> getWifiWhiteList();
   boolean isWifiControl (String wifiName);
   void removeWifiWhiteList (inout List<String> wifiiNameList);
   void addWifiWhiteList (inout List<String> wifiiNameList);
}

在frameworks/base/core/java/android/app/customized/CustomizedManager.java中定义

 
package android.app.customized;
 
import android.util.Log;
import android.content.Context;
import android.content.Intent;
import android.os.Binder;
import android.os.RemoteException;
import android.provider.Settings;
import java.io.IOException;
import android.os.ServiceManager;
import android.os.IBinder;
import java.util.List;
import android.app.ActivityManager;
import android.graphics.Bitmap;

public class CustomizedManager{
    private static final String TAG="CustomizedManager";
    private static final boolean DBG=true;
    
    private static ICustomizedService mService;
    private final Context mContext;
 
 
    public CustomizedManager(Context context){
        mContext = context;
        mService = ICustomizedService.Stub.asInterface(
                ServiceManager.getService("customized"));
    }
    private static ICustomizedService getService(){
        if (mService != null) {
            return mService;
        }
        
        IBinder b = ServiceManager.getService("customized");
        if(b==null){
	    System.out.println("IBinder is null");	
	}else{
	    System.out.println("IBinder is not null");
	}
 
        mService = ICustomizedService.Stub.asInterface(b);
        if(mService==null){
	    System.out.println("mService is null");	
	}else{
	    System.out.println("mService is not null");
	}
        return mService;
    }

  
// 6 add interface setWifiWhiteList(List<String> wifiiNameList) {}  
    public void setWifiWhiteList(List<String> wifiiNameList) {
        ICustomizedService service = getService();
        try{
          service.setWifiWhiteList(wifiiNameList);
        }catch (RemoteException e) {}
    }

    // 7 add interface getWifiWhiteList () {} 
    public List<String> getWifiWhiteList () {
        ICustomizedService service = getService();
        try{
          return service.getWifiWhiteList ();
        }catch (RemoteException e) {}
	return null;
    }

    // 8 add interface isWifiControl (String wifiName) {} 
    public boolean isWifiControl (String wifiName) {
        ICustomizedService service = getService();
        try{
          return service.isWifiControl (wifiName);
        }catch (RemoteException e) {}
        return false;
    }

    // 9 add interface removeWifiWhiteList (List<String> wifiiNameList) {} 
    public void removeWifiWhiteList(List<String> wifiiNameList) {
        ICustomizedService service = getService();
        try{
          service.removeWifiWhiteList(wifiiNameList);
        }catch (RemoteException e) {}
    }

    // 10 add interface addWifiWhiteList (List<String> wifiiNameList) {}
    public void addWifiWhiteList(List<String> wifiiNameList) {
        ICustomizedService service = getService();
        try{
          service.addWifiWhiteList(wifiiNameList);
        }catch (RemoteException e) {}
    }
}

 在frameworks/base/services/core/java/com/android/server/customized/CustomizedService.java实现接口

package com.android.server.customized;
 
import android.os.IBinder;
import android.os.ServiceManager;
import android.content.Context;
import android.content.Intent;
import android.os.Binder;
import android.app.customized.ICustomizedService;
import android.content.BroadcastReceiver;
import java.util.List;
import java.util.ArrayList;
import android.content.ContentValues;
import com.android.server.SystemService;
import android.content.BroadcastReceiver;
import android.content.IntentFilter;
import java.util.Timer;
import java.util.TimerTask;
import android.content.ContentResolver;
import java.util.HashSet;
import android.content.pm.PackageInstaller;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;
import android.content.IIntentSender;
import android.content.IIntentReceiver;
import android.content.IntentSender;
 
 
public class CustomizedService extends ICustomizedService.Stub {
    private static final String TAG = "CustomizedService ";
    private Context mContext;
    private Uri mUri = Telephony.Carriers.CONTENT_URI;
    private static final String PREFERRED_APN_URI = "content://telephony/carriers/preferapn";
    private ContentResolver mContentResolver;
    public static final String WEBSITE = "website";
    public static final String IS_WHITE = "is_white";
    public static final String WEBSITE_ID = "ws_id";
    public final static String AUTHORITY = "com.android.providers.settings.MyControl";
    public final static Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/controlbroswer");
    public static List<String> appList = new ArrayList<String>();
    public static List<String> markUrlList = new ArrayList<String>();
    public static List<String> btpairlList = new ArrayList<String>();
    public static List<String> noUninstallList = new ArrayList<String>();
    public static List<String> wifiList = new ArrayList<String>();
    public static List<String> controlBarList = new ArrayList<String>();
 
    public static class Lifecycle extends SystemService {
        private CustomizedService mService;
 
       public Lifecycle(Context context) {
            super(context);
        }
 
        @Override
        public void onStart() {
            mService = new CustomizedService (getContext());
            publishBinderService(Context.CUSTOMIZED, mService);
        }
 
       @Override
        public void onBootPhase(int phase) {
        }
 
        @Override
        public void onUnlockUser(int userHandle) {
        }
    }
 
    public CustomizedService (Context context) {
       mContext = context;
   }
 
 
    private void sentControl(String action, String key, boolean iscontrol) {
       long jh = Binder.clearCallingIdentity();
       Intent i = new Intent();
       i.setAction(action);
       if (iscontrol) {
           i.putExtra(key, true);
       } else {
           i.putExtra(key, false);
       }
       mContext.sendBroadcast(i);
       sentControl (action,iscontrol);
       Binder.restoreCallingIdentity(jh);
    }
 
    private void sentControl(String action, boolean iscontrol) {
       long jh = Binder.clearCallingIdentity();
       int key;
       if (iscontrol) {
           key = 0;
       } else {
           key = 1;
      }
       Log.i ("custom",",action "+ action + ";   key"+key);   
       Settings.Secure.putInt(mContext.getContentResolver(),action,key);
      Binder.restoreCallingIdentity(jh);
  }
 
    /**
     *  6 add interface setWifiWhiteList(List<String> wifiiNameList) {}  
     */
    public void setWifiWhiteList(List<String> wifiiNameList){
       Binder.clearCallingIdentity();
        clearControlBrowserUrl("WIFI");
        String ISWHITE = "WIFI";
        wifiiNameList = delRepeat(wifiiNameList);
        if(wifiiNameList != null){
           int size = wifiiNameList.size();
           for(int i =0; i < size; i++){
               ContentValues values = new ContentValues();
               values.put(WEBSITE_ID, i);
               values.put(IS_WHITE,ISWHITE);
               values.put(WEBSITE, wifiiNameList.get(i));
               mContentResolver.insert(CONTENT_URI, values);
           }
        updateMarkUrl();
        }
        Binder.restoreCallingIdentity(DUMP_TRANSACTION);
    }


    /**
     *  7 add interface getWifiWhiteList () {} 
     */
    public List<String> getWifiWhiteList(){
        if(wifiList == null){
            Log.d("gaodz","appList listUrl is null");
            return null;
        }
        if(wifiList.size() < 1){
            updateMarkUrl();
        }
       delRepeat(wifiList);
       return wifiList;
     }

    /**
     *  8 add interface isWifiControl (String wifiName) {} 
     */
     public boolean isWifiControl (String wifiName) {
        Log.d("gaodz","isWifiControl wifiName = "+wifiName);
        if(wifiName == null){
            Log.d("gaodz","packageName url is null");
            return false;
        }
        if(wifiList == null){
            Log.d("gaodz","appList listUrl is null");
            return false;
        }

        if(wifiList.size() < 1){
            updateMarkUrl();
        }

        if(wifiList.size() < 1 ){
            Log.d("gaodz","appList listUrl size is 0");
            return false;
        }

        return wifiList.contains(wifiName);
    }

    /**
     *  9 add interface removeWifiWhiteList (List<String> wifiiNameList) {} 
    */
    public void removeWifiWhiteList (List<String> wifiiNameList) {
        if(wifiList == null || wifiiNameList == null){
            Log.d("gaodz","wifiList listUrl is null");
            return;
        }

        if(wifiList.size() < 1){
            updateMarkUrl();
        }

        if(wifiList.size() < 1){
            Log.d("gaodz","wifiList.size() < 1");
            return;
        }
        Log.d("gaodz","removeWifiWhiteList");

        for(int i=0;i<wifiiNameList.size();i++){
            if(wifiList.contains(wifiiNameList.get(i))){
                wifiList.remove(wifiiNameList.get(i));
            }
        }

        setWifiWhiteList(wifiList);
    }

    /**
     *  10 add interface addWifiWhiteList (List<String> wifiiNameList) {}
     */
    public void addWifiWhiteList (List<String> wifiiNameList) {
       if(wifiiNameList == null)return;
       for(int j=0;j<wifiiNameList.size();j++){
           wifiList.add(wifiiNameList.get(j));
       }
        setWifiWhiteList(wifiList);
    }

   public void clearControlBrowserUrl(String which){
        Binder.clearCallingIdentity();
        String[] selectionArgs = new String[]{which};
        String selection = "" + IS_WHITE + "=?";
        mContentResolver.delete(CONTENT_URI,selection,selectionArgs);
        Binder.restoreCallingIdentity(DUMP_TRANSACTION);
    }

    public void updateMarkUrl(){
        appList.clear();
        markUrlList.clear();
        btpairlList.clear();
        noUninstallList.clear();
        wifiList.clear();
        controlBarList.clear();
        Cursor cursor = mContentResolver.query(CONTENT_URI, null, null, null, null);
        if (cursor != null && cursor.moveToFirst()) {
            int index[] = new int[] { cursor.getColumnIndex(WEBSITE_ID),
            cursor.getColumnIndex(IS_WHITE),
            cursor.getColumnIndex(WEBSITE) };
            do {
                if (cursor.getString(index[1]).equals("APP")){
                    appList.add(cursor.getString(index[2]));
                } else if (cursor.getString(index[1]).equals("IPL")) {
                    markUrlList.add(cursor.getString(index[2]));
                } else if (cursor.getString(index[1]).equals("BT")) {
                    btpairlList.add(cursor.getString(index[2]));
                } else if (cursor.getString(index[1]).equals("NODEL")) {
                    noUninstallList.add(cursor.getString(index[2]));
                } else if (cursor.getString(index[1]).equals("WIFI")) {
                    wifiList.add(cursor.getString(index[2]));
                } else if (cursor.getString(index[1]).equals("NOTI")) {
                    controlBarList.add(cursor.getString(index[2]));
                }
            } while (cursor.moveToNext());
        }
        cursor.close();
    }

    private List<String> delRepeat(List<String> list){
        if(list == null)return null;
        if(list.size() > 1){
            HashSet h = new HashSet(list);
            list.clear();
            list.addAll(h);
        }
        return list;
    }
 
    private boolean getControl(String action){
 	    return Settings.Secure.getInt(mContext.getContentResolver(), action, 1) == 0;
    }
 
}
 

在frameworks/base/packages/SettingsProvider/AndroidManifest.xml添加provider

<provider android:name=".MyControl" android:authorities="com.android.providers.settings.MyControl"
        android:multiprocess="false"
        android:exported="true"
        android:writePermission="android.permission.WRITE_SETTINGS"
        android:initOrder="100" />

新建frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/MyControl.java

package com.android.providers.settings;

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.net.Uri;
import android.util.Log;

public class MyControl extends ContentProvider {
    public static final String ID = "_id";
    public static final String WEBSITE_ID = "ws_id";
    public static final String WEBSITE = "website";
    public static final String IS_WHITE = "is_white";
    public static final String DATABASE_NAME = "mycontrol.db";
    private static final String TABLE_NAME = "controlbroswer";
    public final static String AUTHORITY = "com.android.providers.settings.MyControl";
    public final static Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/controlbroswer");
    private static final int DB_VERSION = 2;
    private SQLiteDatabase sqDb;
    private SqliteHelper helper;
    private static final String DATABASE_CREATE = "Create table " + TABLE_NAME
            + "( " + ID + " integer primary key autoincrement,"
            + WEBSITE_ID + " TEXT,"
           + IS_WHITE + " TEXT,"
            + WEBSITE + " TEXT);";

    class SqliteHelper extends SQLiteOpenHelper {

        public SqliteHelper(Context context, String name,
                CursorFactory factory, int version) {
            super(context, name, factory, version);
        }
       
	@Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(DATABASE_CREATE);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
            onCreate(db);
        }
    }

    @Override
    public boolean onCreate() {
        helper = new SqliteHelper(getContext(), DATABASE_NAME, null, DB_VERSION);
        return helper == null ? false : true;
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        sqDb = helper.getWritableDatabase();
        int count = sqDb.delete(TABLE_NAME, selection, selectionArgs);
        return count;
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        sqDb = helper.getWritableDatabase();
        long rowid = sqDb.insert(TABLE_NAME, WEBSITE_ID, values);
        Uri insertUri = ContentUris.withAppendedId(uri, rowid);
        return insertUri;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {
       sqDb = helper.getWritableDatabase();
        Cursor cursor = sqDb.query(TABLE_NAME, projection, selection,
                selectionArgs, null, null, sortOrder);
        return cursor;
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection,
            String[] selectionArgs) {
        sqDb = helper.getWritableDatabase();
        int count = sqDb.update(TABLE_NAME, values, selection, selectionArgs);
        return count;

    }
    @Override
    public String getType(Uri uri) {
        return "vnd.android.cursor.dir/controlbroswer";
    }
}

 在frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java中添加

import android.app.customized.CustomizedManager;  //导入CustomizedManager

private CustomiezdManager customManager;

customManager = new CustomiezdManager(getActivity()); //初始化CustomiezdManager

for (AccessPoint accessPoint : accessPoints) {
      if (customManager.getWifiWhiteList().size() > 0         
              && !customManager.isWifiControl(accessPoint.getSsidStr()))  {  
                      continue;
       }
}

修改packages/apps/Settings/src/com/android/settings/wifi/WifiSettings.java

import android.app.customized.CustomizedManager;  //导入CustomizedManager

private CustomiezdManager customManager;

customManager = new CustomiezdManager(getActivity()); //初始化CustomiezdManager

for (AccessPoint accessPoint : accessPoints) {
      if (customManager.getWifiWhiteList().size() > 0         
              && !customManager.isWifiControl(accessPoint.getSsidStr()))  {  
                      continue;
       }
}

 其他的文件我就不一一添加了,前面的文章有提到如何自定义service,把其他的文件补齐,编译完成就可以调用接口了~

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值