我正在设计一个系统,除了用户名/密码验证之外,用户还可以注册并随后使用客户端证书进行身份验证.
客户端证书必须是由配置的证书颁发机构列表颁发的有效证书,并在出现时进行检查(验证).
在注册阶段,我需要将客户端证书的一部分存储在用户存储库(DB,LDAP,等等)中,以便我可以将使用客户端证书进行身份验证的用户映射到内部"用户".
一个相当明显的选择是使用证书指纹; 但指纹本身是不够的,因为可能会发生冲突(即使它们不可能),因此我们需要存储证书中的其他信息.这个SO问题在这方面也提供了信息.
RFC 2459定义(4.1.2.2)证书序列号在给定CA中必须是唯一的.
综合所有这些,我正在考虑为每个注册用户存储证书序列号和证书颁发者.鉴于客户端证书将被验证并且有效,这应该唯一地标识每个客户端证书.这样,即使续订客户端证书,它仍然有效(序列号保持不变,发行者也是如此).
我错过了什么?
我想在屏幕上绘制一个(鼠标指针)图标,而不是服务中的其他应用程序.我已经实现了功能,除了导航栏,我可以在屏幕上绘图.我研究过一些 其他 的问题在这里和尝试TYPE_SYSTEM_OVERLAY,TYPE_TOAST,TYPE_SYSTEM_ERROR和一些其他的窗口类型没有成功.
我不是想捕捉焦点,只是在屏幕上画一两秒钟.当我尝试绘制导航栏时,它只是在下面(实际上,RelativeLayout在导航栏的边界上结束 - 即使我指定高度的手动尺寸).下面的屏幕截图显示了屏幕右下方的手形指针.这是我可以定位的最低点.请注意,我不是要在我的应用程序中隐藏导航栏 - 试图绘制其他应用程序.

我甚至尝试在实例中设置xpos和ypos偏移设置WindowManager.LayoutParams,但这只是偏移布局并仍然在导航栏下方).
我用来显示这个窗口的布局参数:
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
PixelFormat.TRANSPARENT);
Run Code Online (Sandbox Code Playgroud)
然后我将RelativeLayout这些参数添加到WindowManager:windowManager.addView(relativeLayout, params);
所以我能够在正常情况下连接到BLE设备.我想要做的是处理异常情况,例如当与设备的连接失败或已建立的连接丢失时(可能是从悬崖上抛出或被公共汽车撞到)
我正在使用CyPress BLE模块对此进行测试,我正在做的其中一项测试是从模块上移除电源.但是,onConnectionStateChange永远不会被调用!我所看到的只是成功的联系.它将花费数小时尝试连接,并且永远不会放弃.我会延迟取消连接尝试,但是没有办法取消BluetoothDevice上的连接尝试(我知道)!据我所知,它会继续尝试,直到电池电量耗尽.
这就是我的onConnectionStateChange现在在Gatt回调中的样子.请注意,我正在尝试捕获并记录任何类型的回调涉及任何类型的连接状态更改...除非连接成功,否则永远不会被调用.请注意,这是代码不在活动本身.它在一个由单身人士持有的物体中.(我希望保持多个活动之间的连接)
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
mGatt = gatt;
Logy.CallPrint(LOGY_ENABLE, CLASSNAME, "Status: "+status+ " Newstate: "+newState);
switch(status)
{
case BluetoothGatt.GATT_SUCCESS:
mReconnectAttempts = MAX_ATTEMPTS;
if(newState == BluetoothGatt.STATE_CONNECTED)
{
DispatchEvent(Event.Type.BT_ON_CONNECT);
bIsConnected = true;
gatt.discoverServices();
} else if (newState == BluetoothGatt.STATE_DISCONNECTED)
{
DispatchEvent(Event.Type.BT_ON_DISCONNECT);
bIsConnected = false;
}
break;
default:
if(newState == BluetoothGatt.STATE_DISCONNECTED)
{
bIsConnected = false;
if(mReconnectAttempts > 0)
{ // if we have attempts left, auto attempt to reconnect
DispatchEvent(Event.Type.BT_RECONNECTING);
mReconnectAttempts--;
gatt.connect();
bIsConnected = …Run Code Online (Sandbox Code Playgroud) _vscprintf在Android上不可用.也vsprintf(NULL, fmt, ap)不起作用(产生seg故障),所以似乎无法计算vsnprintf成功所需的缓冲区大小?
Android 源代码表明__android_log_print函数只是使用vsnprintf将字符串截断为1024 ...
你如何处理这种情况?
在我的活动中,我有一个 onKeyUp 和 onKeyDown 事件处理程序,它们为普通字符甚至某些 unicode 字符(如 cedilla (ç))调用。但不适用于 á, à, ü, é, ?, š, ž, è, ...
这是为什么?我怎样才能注册这些按键(或者更好的是,字符)?
我正在带有软键盘(三星和 swype 键盘)的三星 Galaxy S2 上对此进行测试,其中重音字符可通过长按键获得。有趣的是,即使长按相同的 cedilla (ç) 也确实注册了 onKeyUp/Down 事件处理程序。
我在活动中使用 onKeyUp/Down。主视图上没有文本框或任何相关文本。只是一个修改过的 ImageView。
我也在模拟器中对此进行了测试(默认 android 图像 2.3.3)并且行为类似于真实设备。