一:是A1手机项目中
Location位置信息->Mode模式-->加速定位
BUG描述:之前这个点击打开,然后会弹出第三方的界面对话框,高通代码,我们看不到,选择那个链接地址,由于这个手机没有安装浏览器,所以程序会崩。
知识点:
interface IXTSrv
{
boolean disable();
boolean getStatus();
String getText(int which);
void showDialog();
void registerCallback(IXTSrvCb cb);
void unregisterCallback(IXTSrvCb cb);
}
这个接口是底层写的,他的原理是为什么里面的方法看不到,他会有另外一个中间类来转化到另外一个类,里面来实现这个接口里面的方法,这个接口被高通封了。
这种aidl文件的用法:mXTService = IXTSrv.Stub.asInterface((IBinder)service);固定的
解决的方法:当时是remove();这个preference
新的BUG描述:现在是打开界面是看不到这个控件了,但是如果之前的版本是开了加速定位的,也就是保存了这个开着的值,现在升级版本,你虽然看不到这个控件了,但是这个控件其实还是开着的,就是相当于,这个加速定位还是开着的。现在就想真实的关闭
解决的方法:只要手机开机就会走这个BootCompletedReceiver广播接收者。因为这个广播接受者不能bindService绑定服务,所以将处理的方法,放到他启动的一个服务里面,模仿LocationMode这个类中处理的写法
mServiceConn = new XTServiceConnection();
Intent i = new Intent(IXTSrv.class.getName());
izatConnResult = getActivity().bindService(i, mServiceConn, Context.BIND_AUTO_CREATE);将i和new出来新的绑定服务。
private class XTServiceConnection implements ServiceConnection{ @Override public void onServiceConnected(ComponentName name, IBinder service){ mXTService = IXTSrv.Stub.asInterface((IBinder)service);mXTService.disable();//这句话重要
}
@Override
public void onServiceDisconnected(ComponentName name){
}
通过mXTService.disable();这句话就可以将状态变为false。然后locationMode每次进入界面的chek状态选择的都是false也就是每次都是关着的状态。
补充:之前的bug是这样的,location->mode里面四个选项,第四个是第三方软件默认是关闭的。
第一个bug描述:比如版本一:打开了第四项,升级到版本二的时候需求是去掉第四项,结果去了,但是其实选项还是开着的,会耗电。
处理:mIZat的点击事件做处理,结果就是使他一直是关闭状态,不让打开
if(null != mIZat){
mIZat.setOnPreferenceChangeListener(
new Preference.OnPreferenceChangeListener(){
public boolean onPreferenceChange(Preference preference, Object newValue){
final boolean chooseValue = (Boolean) newValue;
if(chooseValue){
try{
if(null != mXTService){
mXTService.showDialog();
}
}catch(RemoteException e){
e.printStackTrace();
}
}else{
try{
if(null != mXTService){
mXTService.disable();
}
}catch(RemoteException e){
e.printStackTrace();
}
}
return true;
}
}
);
最后在前面设状态。
mIZat.setChecked(mXTService.getStatus());
第二个bug描述:就是上来手机默认初始化时打开这个第三方软件的
处理:
二:是R1手机settings的快捷方式拖出去以后会弹出一个界面
BUG:因为辅助功能和屏幕保护2个不需要,所以要去掉
解决方法:CreateShortcut这个类就是那个快捷方式的activity,进来就执行这个onQueryPackageManager查询方法,将manist中带SHORTCUT这个字段的activity全查出来,显示到这个list上
else if(info.activityInfo.name.endsWith(AccessibilitySettingsActivity.class.getSimpleName())){
activities.remove(i);
}
这样就把匹配的值就去了,注意import com.android.settings.Settings.DreamSettingsActivity;加这个导入系统的。
三:是A1手机Settings里面的导航条actionBar全部去掉
解决方法:找到每个界面对应的xml布局文件注销掉<include layout="@layout/add_item_foot" />
搜到每一个include,都注销掉。然后,每一个里面的控件都要找到实例化的都的注销掉
知识点:可以写一个布局,通用这个布局的话就按照上面的那种写法的方式。改也好改。
四:是A1手机Settings里面raderWheel中的问题
BUG:就是查询出设备了,点击连接,同时快速的扣电池。正常来说,已经连上了,但是开机之后发现自动连接不上,还要进去之后才能点击连上。
知识点:
解决的方法:在linearLayout的点击事件里面将editor.putString("RadgerWheel_Connect_Address_old", "null");注销掉,可以解决!经理说,不是这个问题,是sharedpreferences存储问题,需要时间
五:是A1手机Settings里面raderWheel的设备和手机连接之后,点下去设备但是不按上来,点下去之后我关闭蓝牙开关或者退出连接。
BUG:就是按关机键会一直出来呼叫那个界面,意思就是按下了,上来键没执行,所以一直是呼叫状态。
解决方法:
ptt_key_ = characteristic.getIntValue(format, 0);接受设备按键数据是0或者1
if (ptt_key_ == 1) { if (DBG) Log.d(TAG,"CODA BT_PTT_Msg === Pressed");intent.putExtra("event_action", KeyEvent.ACTION_DOWN);} else if (ptt_key_ == 0) { if (DBG) Log.d(TAG,"CODA BT_PTT_Msg === Released");intent.putExtra("event_action", KeyEvent.ACTION_UP);}sendBroadcast(intent);
打完log之后可以看到,广播少发了一条上键的消息,所以要加发一条,分别在:
else if(action.equals("BluetoothDisconnect")){ if(ptt_key_==1){ Intent intent2 = new Intent("com.android.bluetooth.support.BTPTTKey");if (DBG) Log.v("lwn","zoul up");intent2.putExtra("event_action", KeyEvent.ACTION_UP);sendBroadcast(intent2);}
---------------------------------------------设备断开连接
else if(action.equals("BluetoothSwitchOff")){ if(ptt_key_==1){ Intent intent2 = new Intent("com.android.bluetooth.support.BTPTTKey");if (DBG) Log.v("lwn","zoul up");intent2.putExtra("event_action", KeyEvent.ACTION_UP);sendBroadcast(intent2);}
--------------------------------------------关闭蓝牙开关
六:是A1手机Settings里面raderWheel的设备和手机连接之后,关闭设备,关机开机之后显示的还是连接的设备,其实我的设备已经关闭了。
原因:开机之后后台跑的服务,条件是"RadgerWheel_Connect_Address_old"这个地址不为null就连接了。
解决:因为连接上之后,一旦手机断开,或者设备断开,这个时候的RadgerWheel_Connect_Address这个字符串全都应该值为null。
if(! (sharedpreferences.getString("RadgerWheel_Connect_Address_old","null")).equals("null")){ editor.putString("RadgerWheel_Connect_Address","null");//[liuweinan2015-5-11add]editor.commit();//[liuweinan2015-5-11add]mHandler.sendEmptyMessage(0); }
----------------------------------------------------还应该在设备关闭那个地方也加上将当前地址值为null
七:是A1手机Settings里面DataUsageSummary数据流量的问题。
BUG:插上手机卡之后,会显示选择框,紧接着是流量使用周期,旁边是spinner。现在就是进来之后,按下键,会跑到第一个checkBox,再按2次下键才能到了spinner控件上。客户只想按一次。
知识点:当listView需要添加headView的时候,可以通过这个addHeaderView(mHeader, null, false);方法进行添加,如果header不想被选中可以设为false,想被选就设为true
解决方法:因为每个条目都是listView,给每个条目用inflate转化添加
mHeader = (ViewGroup) inflater.inflate(R.layout.data_usage_header, mListView, false);
mListView.addHeaderView(new View(context), null, false);这个是填空的view,将true改为false
mListView.addHeaderView(mHeader, null, false);将mheader添加上去将,true改为false
新的BUG:虽然可以实现点一次就可以了,但是新的问题,点了spinner会直接到了下面的listView,自己失去焦点了。而且会刷新2秒
解决方法:注销沉睡的2S, mListView.addHeaderView(mHeader, null, true);这个listView的可以点击。
八:是A1手机Settings里面DataUsageSummary数据流量的问题。
BUG:插上卡,点击spinner控件到最下面