<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[allenhiman的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/allenhiman</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; allenhiman]]></copyright><item><title><![CDATA[Android Studio 源值7已过时, 将在未来所有发行版中删除]]></title><link>https://blog.youkuaiyun.com/allenhiman/article/details/108325025</link><guid>https://blog.youkuaiyun.com/allenhiman/article/details/108325025</guid><author>allenhiman</author><pubDate>Mon, 31 Aug 2020 17:05:58 +0800</pubDate><description><![CDATA[最近用android studio编译工程(kotlin)，总是报告这个警告, 去网上搜也没找到正确的解决办法

后来摸索这改了下面三个地方警告消失，具体原因不详

1.(ctrl+alt+s)打开设置



2.(ctrl+alt+shift+s)打开工程设置




...]]></description><category></category></item><item><title><![CDATA[如何查看apk签名方式(v1 v2, v3]]></title><link>https://blog.youkuaiyun.com/allenhiman/article/details/108239692</link><guid>https://blog.youkuaiyun.com/allenhiman/article/details/108239692</guid><author>allenhiman</author><pubDate>Wed, 26 Aug 2020 14:46:54 +0800</pubDate><description><![CDATA[查看apk签名情况,是v1, v2, v3 v1+v2 什么的
cmd.exe 打开apksigner.jar所在目录
(这台机器是:C:\Users\houcaihua\AppData\Local\Android\Sdk\build-tools\29.0.2)
apksigner verify -v "E:\apk_release\release\tianyi-1.3.9.apk"
]]></description><category></category></item><item><title><![CDATA[陷阱:Cause: java.io.UTFDataFormatException (Address, Room, sqlite)]]></title><link>https://blog.youkuaiyun.com/allenhiman/article/details/108223726</link><guid>https://blog.youkuaiyun.com/allenhiman/article/details/108223726</guid><author>allenhiman</author><pubDate>Tue, 25 Aug 2020 16:27:58 +0800</pubDate><description><![CDATA[最近想学 android kotlin， 我学这个都是看官方文档,以为这玩意靠谱，开始还算顺利，但看到room这块，上机实验代码时遇到了这个错误，当我把文档中提到的Adress类 Ebedded到User的时候报了:Cause: java.io.UTFDataFormatException

开始感觉很奇怪，去网上搜索，全都是编码错误啥的， 而我这肯定不是这个问题，闹心

这么简单的代码怎么会出问题呢，难道官方doc有问题？ 又去google啥的搜，还是没啥收获，最后无意中发现 引入包中有个


impor]]></description><category></category></item><item><title><![CDATA[用C++代码更改系统分辨率]]></title><link>https://blog.youkuaiyun.com/allenhiman/article/details/106850490</link><guid>https://blog.youkuaiyun.com/allenhiman/article/details/106850490</guid><author>allenhiman</author><pubDate>Fri, 19 Jun 2020 10:09:18 +0800</pubDate><description><![CDATA[由于工作需要，我需要制作一个小工具来更改系统分辨率。

小工具需要支持多显示器，每个显示器要能分别设置分辨率

功能很简单，由于不需要做的好看，只要功能可用即可，使用了MFC（只是为了方便)

乱七八糟的逻辑不说，只说几个关键函数:

1.枚举系统显示器


void CDisplaySettingsDlg::FillDeviceCombo()
{
	m_comboDevices.Clear();
	m_comboDevices.ResetContent();
	DWORD dwAdaptorIndex =]]></description><category></category></item><item><title><![CDATA[Activity Result API解析]]></title><link>https://blog.youkuaiyun.com/allenhiman/article/details/106720383</link><guid>https://blog.youkuaiyun.com/allenhiman/article/details/106720383</guid><author>allenhiman</author><pubDate>Fri, 12 Jun 2020 17:59:52 +0800</pubDate><description><![CDATA[我们有时候需要用ActivityA 启动ActivityB， ActivityB结束后返回一个结果给ActivityA

这种事情很多人都知道怎么做，无非就是


//ActivityA
startActivityForResult(intent, 200)

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        ----
    }
//ActivityB
setResult(1]]></description><category></category></item><item><title><![CDATA[散装安卓开发笔记]]></title><link>https://blog.youkuaiyun.com/allenhiman/article/details/106570392</link><guid>https://blog.youkuaiyun.com/allenhiman/article/details/106570392</guid><author>allenhiman</author><pubDate>Fri, 12 Jun 2020 14:13:22 +0800</pubDate><description><![CDATA[1.
override fun onSaveInstanceState(outState: Bundle)//当activity被stop或者临时销毁时会被调用


override fun onRestoreInstanceState(savedInstanceState: Bundle) //只有当系统activity是被系统由于配置改变并临时销毁时才会调用，如转屏。要好好理解，如果activity在activity堆栈没有被销毁只是隐藏了，无需restore，但如果activity就是要销毁了，那也.]]></description><category></category></item><item><title><![CDATA[Cause: invalid type code: 69]]></title><link>https://blog.youkuaiyun.com/allenhiman/article/details/106568696</link><guid>https://blog.youkuaiyun.com/allenhiman/article/details/106568696</guid><author>allenhiman</author><pubDate>Fri, 05 Jun 2020 13:32:00 +0800</pubDate><description><![CDATA[今天编译我的安卓工程，爆出这个这个错误，去网上搜，也没找到答案，最后发现是grandle设置的NDK版本和我实际安装的NDK版本不一致导致的，更改到正确的版本号后，错误消失

build.gradle

...


compileSdkVersion 29
ndkVersion "21.2.6472646"
buildToolsVersion '29.0.2'

...


...]]></description><category></category></item><item><title><![CDATA[安卓读写文件权限测试]]></title><link>https://blog.youkuaiyun.com/allenhiman/article/details/106276193</link><guid>https://blog.youkuaiyun.com/allenhiman/article/details/106276193</guid><author>allenhiman</author><pubDate>Mon, 25 May 2020 15:19:48 +0800</pubDate><description><![CDATA[我们在做各种程序，App稍微复杂点，都难免要进行读写文件。windows还好，虽然也有各种权限和安全机制，但就读写文件来说，还好，管理员权限的话，几乎可以读写任何文件了。。。废话少说，还是来说正题。

首先，我在做一款app的时候，就需要进行读写文件，在没有进行系统测试整理之前，总是一头雾水。 主要有两点：

1 各种getXXX函数返回的路径到底是啥？

2 各种存储位置都需要怎么样才能有读写权限？

关于问题1，已经有大神总结的很好了

https://blog.youkuaiyun.com/u010937230/]]></description><category></category></item><item><title><![CDATA[windows到安卓的笔记]]></title><link>https://blog.youkuaiyun.com/allenhiman/article/details/104629485</link><guid>https://blog.youkuaiyun.com/allenhiman/article/details/104629485</guid><author>allenhiman</author><pubDate>Tue, 03 Mar 2020 12:18:39 +0800</pubDate><description><![CDATA[由于形势和工作的需要，我不得不windows开发和Android开发同时进行

本来我入职这个公司是做windows端的。但由于安卓端没有人维护了，所以就让我来搞。

讲道理即便Android 0基础, 都是程序员维护个客户端还是可以的。

这句话说的稍微有点大，毕竟我之前是c++，windows。 java 安卓系统一概没弄过。 那么我就来说说怎么来快速上手安卓，或者说转到安卓？

1.那就是开...]]></description><category></category></item><item><title><![CDATA[获取程序（EXE文件，dll文件）的主图标]]></title><link>https://blog.youkuaiyun.com/allenhiman/article/details/41743363</link><guid>https://blog.youkuaiyun.com/allenhiman/article/details/41743363</guid><author>allenhiman</author><pubDate>Fri, 05 Dec 2014 09:41:14 +0800</pubDate><description><![CDATA[获取程序（EXE文件，dll文件）的主图标]]></description><category></category></item><item><title><![CDATA[MFC 让程序停一下 但不卡住的办法]]></title><link>https://blog.youkuaiyun.com/allenhiman/article/details/41726535</link><guid>https://blog.youkuaiyun.com/allenhiman/article/details/41726535</guid><author>allenhiman</author><pubDate>Thu, 04 Dec 2014 16:40:20 +0800</pubDate><description><![CDATA[MFC 让程序停一下 但不卡住的办法]]></description><category></category></item><item><title><![CDATA[多进程通信]]></title><link>https://blog.youkuaiyun.com/allenhiman/article/details/5277866</link><guid>https://blog.youkuaiyun.com/allenhiman/article/details/5277866</guid><author>allenhiman</author><pubDate>Mon, 01 Feb 2010 17:22:00 +0800</pubDate><description><![CDATA[多进程通信这个问题真是又老又没提头，可是真用起来还遇到蛮多问题的，现在说说，以免大家和我一样 方法1： 窗口消息好处 简单坏处 通用性不强，还必须弄个隐藏窗口什么的响应消息 用WM_COPYDATA 地球人都知道怎么用了，不行就看MSDN好了但是他有个很大的毛病，这也是我放弃它的原因。 如果你需要和windows服务程序进行通信的话，这个办法就不好用了。不相信可以试]]></description><category></category></item><item><title><![CDATA[判断文件夹路径是否合法， 判断文件路径是否合法]]></title><link>https://blog.youkuaiyun.com/allenhiman/article/details/5277832</link><guid>https://blog.youkuaiyun.com/allenhiman/article/details/5277832</guid><author>allenhiman</author><pubDate>Mon, 01 Feb 2010 17:14:00 +0800</pubDate><description><![CDATA[那天做项目，遇到一个问题，判断一个用户输入的字符串是否一个合法的文件路径。 由于用户输入的文件路径不一定在本机上存在，所以有些办法没法用。找到一个貌似好用的系统APIPathIsDirectory 也不管事儿，原因是它也只能判断存在的文件夹。我的需求是判断用户输入的路径是否合法。 比如 ：D:/hero是合法的文件路径 d:/hero.exe也是 即使hero 或hero.ex]]></description><category></category></item><item><title><![CDATA[COM 的聚合和包容]]></title><link>https://blog.youkuaiyun.com/allenhiman/article/details/4030686</link><guid>https://blog.youkuaiyun.com/allenhiman/article/details/4030686</guid><author>allenhiman</author><pubDate>Fri, 27 Mar 2009 18:29:00 +0800</pubDate><description><![CDATA[我们可以这样去认识它们 包容(Containment/Delegate)com的包容就是在自己的组件里利用别人的组件。实现这种目的的步骤很简单：如下代码HRESULT FinalConstruct() {  HRESULT hr;  hr = CoCreateInstance( CLSID_SimpleMath, NULL,          CLSCTX_INPROC_SER]]></description><category></category></item><item><title><![CDATA[ATL 8.0(VS2005) 我要删除一个接口方法]]></title><link>https://blog.youkuaiyun.com/allenhiman/article/details/4022839</link><guid>https://blog.youkuaiyun.com/allenhiman/article/details/4022839</guid><author>allenhiman</author><pubDate>Wed, 25 Mar 2009 11:32:00 +0800</pubDate><description><![CDATA[ 如果想删除一个已经存在的接口方法，假设是IMath::Add那么应按如下步骤操作1：打开idl文件删除红色部分interface IMathFt : IUnknown{ [helpstring("方法Add")] HRESULT Add(LONG op1, LONG op2, [out] LONG* res); [helpstring("方法Subtract")] HRESULT]]></description><category></category></item><item><title><![CDATA[ATL 8.0(VS2005) 我要创建一个继承自多个接口的组件类]]></title><link>https://blog.youkuaiyun.com/allenhiman/article/details/4022689</link><guid>https://blog.youkuaiyun.com/allenhiman/article/details/4022689</guid><author>allenhiman</author><pubDate>Wed, 25 Mar 2009 11:03:00 +0800</pubDate><description><![CDATA[1：假设我们已经比较熟悉COM了（VS2005) 问题集合： 001:我要创建一个继承自多个接口的组件类用ATL"添加简单对象向"导->添加类->ATL->ATL简单对象用Atl向导生成的组件类默认之继承了一个接口类。假设组建类为CMathFt(Math不允许用作自定类名)那么它默认继承和实现的一个接口为IMathFt.如果此时希望另外添加一个接口，比如IAdvancedM]]></description><category></category></item><item><title><![CDATA[D3DXMatrixPerspectiveFovLH参数fovy]]></title><link>https://blog.youkuaiyun.com/allenhiman/article/details/3918323</link><guid>https://blog.youkuaiyun.com/allenhiman/article/details/3918323</guid><author>allenhiman</author><pubDate>Sat, 21 Feb 2009 18:31:00 +0800</pubDate><description><![CDATA[1：透视投影矩阵的说明D3DXMATRIX * D3DXMatrixPerspectiveFovLH(  D3DXMATRIX * pOut,  FLOAT fovy,  FLOAT Aspect,  FLOAT zn,  FLOAT zf);最难理解的参数:fovy通过调用D3DXMatrixPerspectiveFovLH得到的矩阵为xScale    ]]></description><category></category></item></channel></rss>