早期代码
import android.app.Service;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
/* 这个类的目的 在于 不让setting 里面的APN设置 起效果*/
public class CheckCurrentApnService extends Service {
public final String TAG="CheckCurrentApnService";
private SharedPreferences sp;
Context mContext;
private static final Uri PREFERRED_APN_URI = Uri
.parse("content://telephony/carriers/preferapn");
private static String[] projection = { "_id" };
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
mContext = this;
// 这里有无斜杠"/"
Uri uri = Uri.parse("content://telephony/carriers/preferapn");
getContentResolver().registerContentObserver(uri, true,
new MyObserver(new Handler()));
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Intent i=new Intent(this,CheckCurrentApnService.class);
startService(i);
super.onDestroy();
}
private class MyObserver extends ContentObserver {
public MyObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
Log.i(TAG, "-Service监测到当前APN数据有变化");
sp = getSharedPreferences("APN_SETTING", 0);
int lastID = sp.getInt("lastID", -1);
// 去获取当前的ID
Cursor cur1 = mContext.getContentResolver().query(
PREFERRED_APN_URI, projection, null, null, null);
int curID = -1;
if (cur1 != null && cur1.moveToFirst()) {
curID = cur1.getInt(cur1.getColumnIndex("_id"));
}
if (cur1 != null) {
cur1.close();
cur1 = null;
}
// 不相同--表明是系统service自己改的 --所以要改回来。
if (curID!=lastID) {
ContentValues values = new ContentValues();
values.put("apn_id", lastID);
getContentResolver().update(PREFERRED_APN_URI, values, null,
null);
Log.i(TAG, "lastID:-" + lastID+ "curID:--" + curID);
}
super.onChange(selfChange);
}
}
}