android项目——手机卫士_遇到的问题

1 。 在黑名单电话的拦截和擦除通话记录的过程中,曾经遇到的状况:

endCall();

deleteCall_log();

无法成功删除 content://call_log/calls  中的通话记录。

原因:由于在 deleteCall_log(); 执行的时候,记录还没来得及写入到call_log/calls (在文件的数据库的路径是:com.android.provider.contacts   contacts2.db)表中,就将calllog表中不存在的通话记录删除掉,这肯定是不能执行成功的,而,在 deleteCall_log();操作执行完毕后,记录才写到calllog表。

综上所述:deleteCall_log(); 与 向calllog表存记录的 操作不同步。

解决方案:注册一个内容监听者(),代码如下:

注册观察者:

Uri uri = Uri.parse("content://call_log/calls");
getContentResolver().registerContentObserver(uri, true, new CallLogContentObserver (new Handler(),incomingNumber));

创建观察者

final class CallLogContentObserver extends  ContentObserver {
String incomingNumber;
public CallLogContentObserver(Handler handler,String incomingNumber) {
super(handler);
this.incomingNumber = incomingNumber;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
deleteCallLog(incomingNumber);
//记得显示的 解除 内容观察者,否则 可能出现内存的泄漏

解除邦定观察者
getContentResolver().unregisterContentObserver(this);
}
}


2.在activity中创建 dailog时,出现如下Bug:

The specified child already has a parent. You must call removeView() on the child's parent first

protect void onCreate (){
createDialog()
}
private void createDialog() {

Log.i(TAG, "createDialog()");
builder = new Builder(BlackListActivity.this);
builder.setTitle("黑名单添加");
ll_view = (LinearLayout) View.inflate(getApplicationContext(), R.layout.blacklist_dialog_view, null);
et_dialog_name = (EditText)  ll_view.findViewById(R.id.et_dialog_name);
et_dialog_num = (EditText)  ll_view.findViewById(R.id.et_dialog_num);
builder.setView(ll_view);
builder.setPositiveButton("添加", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//修改黑名单记录
String>String>blackListService.add( name, num);
notifyAdapterWithData();
}
});
builder.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
notifyAdapterWithData();
}
});
builder.create();
}


@Override
public void onClick(View v) {
if(v.getId() == R.id.tv_blackList_add){
show();//错误点
}
}

但是至今这个问题没有真正明白,虽然检查出来了bug产生的地方,向往高手指点,错误的原因

我个人的推测:在AlertDialog 第二次show();的时候,ll_view 直接放在了  activity加载的setContent(view)的组件上了,所以出错了


3.自己创建的sqlite数据库,只有在有数据的情况下,才会创建的,否则不会创建



4.在开发这个 管理程序模块的 时候,遇到如下bug:

PackageManager.GET_ACTIVITIES  开始的时候,我是没写的,这就意味着  找该包的时候,只有包信息,而没有 该包的 所有的activity 的信息,所以,会出现找不到 String>

case R.id.ll_softmgr_popuwidow_start://运行程序
position = (Integer) ll_softmgr_popuwidow_uninstall.getTag();
packname = newSoftInfos.get(position).getPackname();
try {
//拿到指定包的 包信息
PackageInfo> |        PackageManager.GET_ACTIVITIES);
//拿到指定包 的所有的activity的信息
ActivityInfo []>if(activityInfos != null && activityInfos.length > 0 ){
String>// Log.i(TAG, packname+"   "+name);
Intent>startIntent.setClassName(packname, name);
startActivity(startIntent);
}else {
Toast.makeText(this, "无法启动该程勋", 0).show();
}
} catch (NameNotFoundException e) {
Toast.makeText(this, "找不到相关的程序信息", 0).show();
e.printStackTrace();
}
break;

4.2 在创建popuwindow的时候,对其进行定位是,注意如下几点:

4.2.1 一定要对 popuwindow 设置背景,即使是空的背景也要设(popu.setBackgroundDrawable(new ColorDrawable());)

popu.setBackgroundDrawable(new ColorDrawable());
popu.setWidth(220);
popu.setHeight(70);
popu.setFocusable(true);

4.2.1 

int[]>view.getLocationInWindow(loc);//拿到itemview 在窗口的位置
popu.showAtLocation(view, Gravity.LEFT|Gravity.TOP, loc[0]+40, loc[1]);


5. 程序锁模块:

5.1 在自定义的 contentProvider 的过程中,产生如下bug:nullpointerexception;



public class AppLockContentProvider extends ContentProvider {


private  AppLockInfoService appLockInfoService  = new AppLockInfoService(getContext());  


@Override
public Uri insert(Uri uri, ContentValues values) {
if(matcher.match(uri) == INSERT){
String packname = values.getAsString("packname");
appLockInfoService.add(packname);
getContext().getContentResolver().notifyChange(changeUri, null);
}else {
throw new IllegalArgumentException(uri+"不正确");
}

return null;
}


出现bug的原因:

contentprovider

持续更新中。。。。。。。。。。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值