Sergio Chan

Full Stack, Born hacker, Professional Manager

Crazy fan of Hackathons all around the world.
Founded Hackathon team hACKbUSTER.


坑 - 2016.11.30

今天发布会,忙了几个月的新产品终于要发布了。应该今晚官网就会上线了。

最近几天都在 iOS 安卓和 Unity 切来切去的写,头大的和一锅粥一样。遇到了两个问题比较坑:

Unity 音箱噪音问题

只要 Unity 运行,Android 外接的音箱在默认场景就会有一丝丝奇怪电磁干扰的声音。Unity 当中没有任何 Audio Source,我试着把所有 Camera 上的 Audio Listener 都禁用了,还是不行。

在 Unity Forum 上发现了一个相同问题,但是一年了并没有人解决。恩,如果你看到了一个回答那是我刚回答的……最后试了几种方法,主要都是去修改 Project Setting 里面的 Audio Setting,除了 Disable Unity Audio 可以解决这个奇怪的噪音问题,别无他法,还好 Unity 并不负责播放声音。

更蹊跷的是插上耳机就听不到这个噪音 = = 猜测可能是音箱有类似放大器的部分,将原本非常微弱的由 Unity 产生的声音放大了之后变成了听到的噪音。

坑。

安卓启动蓝牙服务的问题

用安卓 BluetoothBLE 和 iOS 的 CoreBluetooth 连接,iOS 做外设,安卓做主机。BLE 取消了 2.0 时代的蓝牙 Socket 连接方式,改成了现在的根据特征值读取,写入和订阅的这种传输数据方式。用框架开发并不困难,问题就出在当应用在开机自启动的时候,可能在创建 BluetoothManager 的时候,系统蓝牙服务尚未初始化成功,因此就会报错,而你也不知道要什么时候才能去初始化。

因此在这里你需要加一个 BroadCastReceiver 来监听系统蓝牙服务状态变化的通知,然后根据通知来决定初始化的时机,而不是在你应用启动的时候就去初始化。

在应用或服务 create 的时候注册 Receiver :

IntentFilter filter1 = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(mBroadcastReceiver, filter1);

声明 Receiver :

private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
switch (state) {
case BluetoothAdapter.STATE_OFF:
Log.d("FUCK","STATE_OFF");
break;
case BluetoothAdapter.STATE_TURNING_OFF:
Log.d("FUCK","STATE_TURNING_OFF");
break;
case BluetoothAdapter.STATE_ON:
Log.d("FUCK","STATE_ON");
// 如果蓝牙服务中途重启,这里需要关闭之前的 Manager 所附带的所有连接
if (bleManager != null) close();
bleManager = BleManager.getInstance();
bleManager.init(BleController.this);
close();
scanAndConnect();
break;
case BluetoothAdapter.STATE_TURNING_ON:
Log.d("FUCK","STATE_TURNING_ON");
break;
}
}
}
};

在你的应用或服务 Destroy 的时候注销这个 Receiver :

unregisterReceiver(mBroadcastReceiver);

完事,不得不说 BLE 的连接还是很稳定的。

记得最早看安卓和 iOS 蓝牙连接的时候看到了知乎这篇回答,看来整理一下代码也可以去好好回答一下了🌚 都没几个有用的回答。

坑。

闲扯

恩。周末终于强逼自己撸完了 Popularity Widget for GitHub , 还在审核中,这是一个可以统计你过往五个月每天的新增 star 变化趋势,其实是可以细化到每一个 star 你的用户和对应的仓库的,后面版本慢慢会更新,也可以统计到(虽然没有有效历史数据)过往四周的 follower 变化趋势。对于想要运营或维护,或者只是了解一下自己在 GitHub 上的人气值的朋友们应该挺有用。

还有给 EarthQuick 在 GitHub 搭的后端 = = 因为拿 Mac mini 做服务端处理数据存到 GitHub 的仓库作为 RESTful API 访问竟然还被人喷了,不太明白现在 GitHub 早都去掉了连续提交成就之后还在关心小绿块的人的心态……最主要的是,我哪有时间和钱(妈个鸡别和我提钱)单独去搞个服务器维护啊 word 哥。