目录
工程中使用的大多是 android.os 包里面的Handler
os.Handler 篇
-
工程中使用的大多是 android.os 包里面的Handler
Handler 发送不成功,或者 Handler 内部handlerMessage 方法未响应:
一、检查发送的方法是否使用的 send 开头的方法,请勿直接调用handlerMessage(),
二、Handler Looper被关闭,检查代码,或者直接在创建Handler的时候传入一个线程Looper
if (mhandler == null) {
//handler不执行 主动添加Looper
HandlerThread handlerThread = new HandlerThread("handler_thread");
handlerThread.start();
mhandler = new Mhandler(activity, handlerThread.getLooper());
}
//_______________________________________________
private static class Mhandler extends Handler {
SoftReference<Activity> softReference;
public Mhandler(BluttoothUtilBaseActivity softReference, Looper looper) {
super(looper);
this.softReference = new SoftReference< Activity >(softReference);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
}
蓝牙问题
-
蓝牙扫描设备问题
-
根据华为提供的《Google Q 版本应用兼容性整改指导》中说明
-
2.6.5 WiFi/蓝牙扫描需要打开位置开关 电话,Wi-Fi,蓝牙 API 所需的精确位置权限
2.6.6 电话,Wi-Fi,蓝牙 API 所需的精确位置权限
1、应用的targetSdkVersion>=Q:除非应用具有ACCESS_FINE_LOCATION权限,否则在 Android Q上运行时,应用无法在Wi-Fi,Wi-Fi Aware或蓝牙API中使用多种方法
2、应用的targetSdkVersion<Q:不受影响,只需要申请ACCESS_COARSE_LOCATION或 者ACCESS_FINE_LOCATION即可
3、具体影响的接口有:
模块
类
接口
Telephony
TelephonyManager
getAvailableNetworks() getServiceStateForSubscriber getServiceState()
TelephonyScanManager
requestNetworkScan()
PhoneStateListener
onCellLocationChanged() onCellInfoChanged() onServiceStateChanged()
NetworkScanCallback
onResults()
Wi-Fi WifiScanner startScan()
WifiManager startScan() getScanResults()
WifiAwareManager WifiP2pManager WifiRTTManager
Bluetooth
BluetoothAdapter
startDiscovery()
startLeScan()
LeScanCallback() -
蓝牙重点看表格的最后一行,蓝牙适配器 的接口中,就有扫描接口
-
还有一个问题可能存在的原因:蓝牙适配器需要重新去获取对象
弹窗问题
1、popupWindow 或者Diolog 弹窗报错
四个常见报错
参考资料https://www.jianshu.com/p/4c5fafe08fa7
1.Unable to add window --token null is not valid; is your activity running
2.Unable to add window --token null is not for an application
3.Unable to add window -- token android.os.BinderProxy@XXX is not valid;
is your activity running
4.Unable to add window -- token android.app.LocalActivityManager
$LocalActivityRecord @xxx is not valid; is your activity running
以上四个问题都属于弹窗引起的,popupWindow 或者Diolog
具体解决 方案请查看作者原作https://www.jianshu.com/p/4c5fafe08fa7
2、弹窗在Activity#onCreate中调用不显示
原因:在Activity界面未显示之前,就进行弹窗,是显示不出来的,非要onCreate 中调用的话需要用以下代码,让弹窗在activity界面初始化之后再弹出
this.getWindow().getDecorView().post(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
initData();
}
});
}
});
文章会持续更新,若有问题或者更多解决方案,欢迎分享