About neohope

一直在努力,还没想过要放弃...

Android Custom Protocol中intent-filter的data标签

当在Android中使用Custom Protocol时,需要在AndroidManifest.xml中,增加相应的intent-filter标签。
其中intent-filter下的data标签,通知了Android,何时处理调用请求,其语法如下:

    <data android:scheme="string"
          android:host="string"
          android:port="string"
          android:path="string"
          android:pathPattern="string"
          android:pathPrefix="string"
          android:mimeType="string" />

其实,上述内容描述了一个URI,当第三方调阅请求不符合该URI时,会直接忽略;而当第三方调阅请求符合该URI时,则会进行调用或让用户进行选择。

URI的具体规则如下:

<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]

如果没有指定scheme,则整个URI无效;
如果没有指定host,则port属性无效;

其各属性说明如下:
scheme:就是协议名称,如http,https,myprotocol等,建议全部小写,而且不包含“:”。
host:ip地址或域名,建议全部小写。
port:端口
path:完全路径匹配
pathPrefix:路径前缀匹配
pathPattern:路径匹配规则(例如:“*”表示字符重复出现0到多次;“.”表示任意字符;“.*”表示0到多个任意字符;转义符为“\”,由于xml的格式限制,非转义的“*”要写为“\\*”,非转移的“\”要写为“\\\\”。)
mimeType:指定MIME类型,如image/jpeg,其中子类型可以使用通配符“*”,建议全部小写。

	<!--http协议下的任何pdf文件-->
	<intent-filter>
		<action android:name="android.intent.action.VIEW"/>
		<category android:name="android.intent.category.DEFAULT"/>
		<data android:scheme="http" android:pathPattern=".*\\.pdf"]</data>
	</intent-filter>

	<!--任何音频文件-->
	<intent-filter>
		<action android:name="android.intent.action.VIEW" />
		<category android:name="android.intent.category.DEFAULT" />
		<data android:mimeType="audio/*" />
	</intent-filter>

	<!--自定义私有协议myproto的任何请求-->
	<intent-filter>
		<action android:name="android.intent.action.VIEW" />
		<category android:name="android.intent.category.DEFAULT" />
		<data android:scheme="myproto"/>
	</intent-filter>

参考资料:
Android开发手册
newcj的博客

IOS实现Custom Protocol

在IOS中,实现Custom Protocol,需要以下两步:

1、修改Info.plist文件,增加以下内容:

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>com.neohope.custom.protocol.test</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>myproto</string>
            </array>
        </dict>
    </array>

2、在AppDelegate.m中,增加以下内容:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    if(url!=nil)
    {
        NSString *path = url.absoluteString;
        //do your job here
    }
    return YES;
}

Andoid实现Custom Protocol

Android中实现Custom Protocol,只需要简单的两步:

1、修改AndroidManifest.xml文件,在activity节增加以下内容:

            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="myproto"/>
            </intent-filter>

2、修改对应activity中,用以下代码,就可以处理URL中的数据啦

        Intent intent = getIntent();
        if (Intent.ACTION_VIEW.equals(intent.getAction())) {
            Uri uri = intent.getData();
            String user = uri.getQueryParameter("user");
            String password = uri.getQueryParameter("password");
            //do your job here
        }

MySQL5.7 datetime无法设置默认值为0

在mysql5.7以上版本中,如果datetime默认值为0,则会出现下面的错误:

ERROR 1067 (42000) at line xxx: Invalid default value for 'xxx'

这是因为mysql5.7调整了校验规则,修改一下/etc/mysql/my.cnf配置文件就可以了

[mysqld]
#默认规则
#sql-mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
sql-mode="ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

然后重启mysql就可以啦。

常用MIME Type

MIME Type组成规则为:content-type/subtype
content-type:消息内容的类型,比如text,application,multipart,image,audio,video,message
subtype:消息内容的子类型,比如:content-type为text时,常用的子类型有plain,html等。最终MIME Type为:text/plain,text/html。

文件类型 MIME 文件类型 MIME
3gp video/3gpp aab application/x-authoware-bin
aam application/x-authoware-map aas application/x-authoware-seg
ai application/postscript aif audio/x-aiff
aifc audio/x-aiff aiff audio/x-aiff
als audio/X-Alpha5 amc application/x-mpeg
ani application/octet-stream apk application/vnd.android.package-archive
asc text/plain asd application/astound
asf video/x-ms-asf asn application/astound
asp application/x-asap asx video/x-ms-asf
au audio/basic avb application/octet-stream
avi video/x-msvideo awb audio/amr-wb
bcpio application/x-bcpio bin application/octet-stream
bld application/bld bld2 application/bld2
bmp image/bmp bpk application/octet-stream
bz2 application/x-bzip2 cal image/x-cals
ccn application/x-cnc cco application/x-cocoa
cdf application/x-netcdf cgi magnus-internal/cgi
chat application/x-chat class application/octet-stream
clp application/x-msclip cmx application/x-cmx
co application/x-cult3d-object cod image/cis-cod
cpio application/x-cpio cpt application/mac-compactpro
crd application/x-mscardfile csh application/x-csh
csm chemical/x-csml csml chemical/x-csml
css text/css cur application/octet-stream
dcm x-lml/x-evm dcr application/x-director
dcx image/x-dcx dhtml text/html
dir application/x-director dll application/octet-stream
dmg application/octet-stream dms application/octet-stream
doc application/msword dot application/x-dot
dvi application/x-dvi dwf drawing/x-dwf
dwg application/x-autocad dxf application/x-autocad
dxr application/x-director ebk application/x-expandedbook
emb chemical/x-embl-dl-nucleotide embl chemical/x-embl-dl-nucleotide
eps application/postscript eri image/x-eri
es audio/echospeech esl audio/echospeech
etc application/x-earthtime etx text/x-setext
evm x-lml/x-evm evy application/x-envoy
exe application/octet-stream fh4 image/x-freehand
fh5 image/x-freehand fhc image/x-freehand
fif image/fif fm application/x-maker
fpx image/x-fpx fvi video/isivideo
gau chemical/x-gaussian-input gca application/x-gca-compressed
gdb x-lml/x-gdb gif image/gif
gps application/x-gps gtar application/x-gtar
gz application/x-gzip hdf application/x-hdf
hdm text/x-hdml hdml text/x-hdml
hlp application/winhlp hqx application/mac-binhex40
htm text/html html text/html
hts text/html ice x-conference/x-cooltalk
ico application/octet-stream ief image/ief
ifm image/gif ifs image/ifs
imy audio/melody ins application/x-NET-Install
ips application/x-ipscript ipx application/x-ipix
it audio/x-mod itz audio/x-mod
ivr i-world/i-vrml j2k image/j2k
jad text/vnd.sun.j2me.app-descriptor jam application/x-jam
jar application/java-archive jnlp application/x-java-jnlp-file
jpe image/jpeg jpeg image/jpeg
jpg image/jpeg jpz image/jpeg
js application/x-javascript jwc application/jwc
kjx application/x-kjx lak x-lml/x-lak
latex application/x-latex lcc application/fastman
lcl application/x-digitalloca lcr application/x-digitalloca
lgh application/lgh lha application/octet-stream
lml x-lml/x-lml lmlpack x-lml/x-lmlpack
lsf video/x-ms-asf lsx video/x-ms-asf
lzh application/x-lzh m13 application/x-msmediaview
m14 application/x-msmediaview m15 audio/x-mod
m3u audio/x-mpegurl m3url audio/x-mpegurl
ma1 audio/ma1 ma2 audio/ma2
ma3 audio/ma3 ma5 audio/ma5
man application/x-troff-man map magnus-internal/imagemap
mbd application/mbedlet mct application/x-mascot
mdb application/x-msaccess mdz audio/x-mod
me application/x-troff-me mel text/x-vmel
mi application/x-mif mid audio/midi
midi audio/midi mif application/x-mif
mil image/x-cals mio audio/x-mio
mmf application/x-skt-lbs mng video/x-mng
mny application/x-msmoney moc application/x-mocha
mocha application/x-mocha mod audio/x-mod
mof application/x-yumekara mol chemical/x-mdl-molfile
mop chemical/x-mopac-input mov video/quicktime
movie video/x-sgi-movie mp2 audio/x-mpeg
mp3 audio/x-mpeg mp4 video/mp4
mpc application/vnd.mpohun.certificate mpe video/mpeg
mpeg video/mpeg mpg video/mpeg
mpg4 video/mp4 mpga audio/mpeg
mpn application/vnd.mophun.application mpp application/vnd.ms-project
mps application/x-mapserver mrl text/x-mrml
mrm application/x-mrm ms application/x-troff-ms
mts application/metastream mtx application/metastream
mtz application/metastream mzv application/metastream
nar application/zip nbmp image/nbmp
nc application/x-netcdf ndb x-lml/x-ndb
ndwn application/ndwn nif application/x-nif
nmz application/x-scream nokia-op-logo image/vnd.nok-oplogo-color
npx application/x-netfpx nsnd audio/nsnd
nva application/x-neva1 oda application/oda
oom application/x-AtlasMate-Plugin pac audio/x-pac
pae audio/x-epac pan application/x-pan
pbm image/x-portable-bitmap pcx image/x-pcx
pda image/x-pda pdb chemical/x-pdb
pdf application/pdf pfr application/font-tdpfr
pgm image/x-portable-graymap pict image/x-pict
pm application/x-perl pmd application/x-pmd
png image/png pnm image/x-portable-anymap
pnz image/png pot application/vnd.ms-powerpoint
ppm image/x-portable-pixmap pps application/vnd.ms-powerpoint
ppt application/vnd.ms-powerpoint pqf application/x-cprplayer
pqi application/cprplayer prc application/x-prc
proxy application/x-ns-proxy-autoconfig ps application/postscript
ptlk application/listenup pub application/x-mspublisher
pvx video/x-pv-pvx qcp audio/vnd.qcelp
qt video/quicktime qti image/x-quicktime
qtif image/x-quicktime r3t text/vnd.rn-realtext3d
ra audio/x-pn-realaudio ram audio/x-pn-realaudio
rar application/x-rar-compressed ras image/x-cmu-raster
rdf application/rdf+xml rf image/vnd.rn-realflash
rgb image/x-rgb rlf application/x-richlink
rm audio/x-pn-realaudio rmf audio/x-rmf
rmm audio/x-pn-realaudio rmvb audio/x-pn-realaudio
rnx application/vnd.rn-realplayer roff application/x-troff
rp image/vnd.rn-realpix rpm audio/x-pn-realaudio-plugin
rt text/vnd.rn-realtext rte x-lml/x-gps
rtf application/rtf rtg application/metastream
rtx text/richtext rv video/vnd.rn-realvideo
rwc application/x-rogerwilco s3m audio/x-mod
s3z audio/x-mod sca application/x-supercard
scd application/x-msschedule sdf application/e-score
sea application/x-stuffit sgm text/x-sgml
sgml text/x-sgml sh application/x-sh
shar application/x-shar shtml magnus-internal/parsed-html
shw application/presentations si6 image/si6
si7 image/vnd.stiwap.sis si9 image/vnd.lgtwap.sis
sis application/vnd.symbian.install sit application/x-stuffit
skd application/x-Koan skm application/x-Koan
skp application/x-Koan skt application/x-Koan
slc application/x-salsa smd audio/x-smd
smi application/smil smil application/smil
smp application/studiom smz audio/x-smd
snd audio/basic spc text/x-speech
spl application/futuresplash spr application/x-sprite
sprite application/x-sprite spt application/x-spt
src application/x-wais-source stk application/hyperstudio
stm audio/x-mod sv4cpio application/x-sv4cpio
sv4crc application/x-sv4crc svf image/vnd
svg image/svg-xml svh image/svh
svr x-world/x-svr swf application/x-shockwave-flash
swfl application/x-shockwave-flash t application/x-troff
tad application/octet-stream talk text/x-speech
tar application/x-tar taz application/x-tar
tbp application/x-timbuktu tbt application/x-timbuktu
tcl application/x-tcl tex application/x-tex
texi application/x-texinfo texinfo application/x-texinfo
tgz application/x-tar thm application/vnd.eri.thm
tif image/tiff tiff image/tiff
tki application/x-tkined tkined application/x-tkined
toc application/toc toy image/toy
tr application/x-troff trk x-lml/x-gps
trm application/x-msterminal tsi audio/tsplayer
tsp application/dsptype tsv text/tab-separated-values
tsv text/tab-separated-values ttf application/octet-stream
ttz application/t-time txt text/plain
ult audio/x-mod ustar application/x-ustar
uu application/x-uuencode uue application/x-uuencode
vcd application/x-cdlink vcf text/x-vcard
vdo video/vdo vib audio/vib
viv video/vivo vivo video/vivo
vmd application/vocaltec-media-desc vmf application/vocaltec-media-file
vmi application/x-dreamcast-vms-info vms application/x-dreamcast-vms
vox audio/voxware vqe audio/x-twinvq-plugin
vqf audio/x-twinvq vql audio/x-twinvq
vre x-world/x-vream vrml x-world/x-vrml
vrt x-world/x-vrt vrw x-world/x-vream
vts workbook/formulaone wav audio/x-wav
wax audio/x-ms-wax wbmp image/vnd.wap.wbmp
web application/vnd.xara wi image/wavelet
wis application/x-InstallShield wm video/x-ms-wm
wma audio/x-ms-wma wmd application/x-ms-wmd
wmf application/x-msmetafile wml text/vnd.wap.wml
wmlc application/vnd.wap.wmlc wmls text/vnd.wap.wmlscript
wmlsc application/vnd.wap.wmlscriptc wmlscript text/vnd.wap.wmlscript
wmv audio/x-ms-wmv wmx video/x-ms-wmx
wmz application/x-ms-wmz wpng image/x-up-wpng
wpt x-lml/x-gps wri application/x-mswrite
wrl x-world/x-vrml wrz x-world/x-vrml
ws text/vnd.wap.wmlscript wsc application/vnd.wap.wmlscriptc
wv video/wavelet wvx video/x-ms-wvx
wxl application/x-wxl x-gzip application/x-gzip
xar application/vnd.xara xbm image/x-xbitmap
xdm application/x-xdma xdma application/x-xdma
xdw application/vnd.fujixerox.docuworks xht application/xhtml+xml
xhtm application/xhtml+xml xhtml application/xhtml+xml
xla application/vnd.ms-excel xlc application/vnd.ms-excel
xll application/x-excel xlm application/vnd.ms-excel
xls application/vnd.ms-excel xlt application/vnd.ms-excel
xlw application/vnd.ms-excel xm audio/x-mod
xml text/xml xmz audio/x-mod
xpi application/x-xpinstall xpm image/x-xpixmap
xsit text/xml xsl text/xml
xul text/xul xwd image/x-xwindowdump
xyz chemical/x-pdb yz1 application/x-yz1
z application/x-compress zac application/x-zaurus-zac
zip application/zip

诡异的dll(2)

还是昨天,还是同一个哥们。他要实现一个语音叫号的功能,要先普通话叫号,然后再粤语叫号。

诡异的事情发生了,在调试状态下,怎么运行都是正常的,
但直接双击运行,只能叫第一种声音(粤语或普通话),另一个声音(粤语或普通话)怎么都发不出来。
悲剧的是,他语音叫号也是调用了一个dll。

只好慢慢调试了,开始以为是线程退出的太快,或者变量作用域问题,或变量中繁体中文乱码问题,或者函数退出太快,或者是release时优化掉了…

弄了一个多小时,没有任何进展。无奈之下,我翻出了Process Explorer,去查看环境变量。
结果调试的时候,第一个环境变量是

__COMPAT_LAYER=WinXpsp3

天啊,这不是兼容模式吗。
于是将exe设成兼容模式,双击运行,就好了。

原来,他用BCB6做开发,在Win7 sp1上无法正常运行,就设成了兼容模式,调试时运行的exe当然也继承了兼容模式的环境变量咯。
吐血啊……

回家,搜了一下__COMPAT_LAYER环境变量,可以设置为以下数值:

兼容性:

兼容模式
WIN95 Windows 95
WIN98 Windows 98 / Windows Me
NT4SP5 Windows NT 4.0 (Service Pack 5)
WIN2000 Windows 2000
WINXP Windows XP
WINXPSP2 Windows XP (Service Pack 2)
WINXPSP3 Windows XP (Service Pack 3)
WINSRV03SP1 Windows Server 2003 (Service Pack 1)
WINSRV08SP1 Windows Server 2008 (Service Pack 1)
VISTARTM Windows Vista
VISTASP1 Windows Vista (Service Pack 1)
VISTASP2 Windows Vista (Service Pack 2)
WIN7RTM Windows 7

权限:

权限
RUNASADMIN 以管理员权限运行
RUNASINVOKER 以调用者权限运行

显示模式:

显示模式
DISABLETHEMES 禁用视觉主题
640X480 用640×480屏幕分辨率运行
HIGHDPIAWARE 高DPI设置时禁用显示缩放
256COLOR 用256色运行
DISABLEDWM 禁用桌面元素

另外,也可以通过注册表,设置程序的兼容模式:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"D:\\TEST\\Hello.exe"="WINXPSP3"
    HKEY hKey;
    LPCTSTR strSubKey = "Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers";
    long lRet = ::RegOpenKeyEx( HKEY_CURRENT_USER, strSubKey, 0, KEY_WRITE, &hKey );
    if ( lRet == ERROR_SUCCESS )
    {
        TCHAR achValue[] = { _T("WINXPSP3") };
        CString strExePath = _T("D:\\Test\\Hello.exe");
        lRet  = ::RegSetValueEx( hKey, strExePath, NULL, REG_SZ, (LPBYTE)&achValue, sizeof(achValue) );
        RegCloseKey( hKey );
    } 

诡异的dll(1)

昨天,和哥们一起调试程序。由于上线压力较大,他最近一直在狂改程序,但遇到了一个问题:

从PACS Server取影像时,怎么都取不回来。

首先排查了PACS Server设置,发现稍微有些问题,修改配置后,我以前写的一个测试程序,
就可以正常取回影像了。

但诡异的事情发生了,我写的程序,可以查,可以取,但他写的就是无法取回影像,只能查询。

吐血啊。

经过了一个小时的奋战,实在发现不了问题,他决定把无线网卡禁用后再测一下,
结果就通了~~

原来他取影像用的是一个dll,估计这个dll中,启用监听的时候,会自动选用某一块网卡,
但刚好选了无线网卡,悲剧啊。

能不能不要自作主张选网卡啊~~
能不能调试的时候,先把不需要的网卡禁用了啊~~