<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>星迹—iStar的博客</title>
	<atom:link href="http://www.maxhis.info/feed" rel="self" type="application/rss+xml" />
	<link>http://www.maxhis.info</link>
	<description>Geek inside.</description>
	<lastBuildDate>Sun, 22 Apr 2012 04:10:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>《让青春继续》Android版</title>
		<link>http://www.maxhis.info/archives/718</link>
		<comments>http://www.maxhis.info/archives/718#comments</comments>
		<pubDate>Wed, 18 Apr 2012 14:01:12 +0000</pubDate>
		<dc:creator>iStar</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[我的作品]]></category>
		<category><![CDATA[让青春继续]]></category>

		<guid isPermaLink="false">http://www.maxhis.info/?p=718</guid>
		<description><![CDATA[不知道有多少人知道这个小说，如果你知道，那你可能是我的校友。就是这部小说陪我度过了去上大学前的那后半个暑假，如今已走出校园，把它做成一个Android应用也算是让青春继续吧！ 下载地址： 点我下载到本地，点我去Google官方商店下载，您还可以在国内的五大应用商店下载到本应用。 有图有真相： 您可能感兴趣的：暂无相关日志]]></description>
			<content:encoded><![CDATA[<p>不知道有多少人知道这个小说，如果你知道，那你可能是我的校友。就是这部小说陪我度过了去上大学前的那后半个暑假，如今已走出校园，把它做成一个Android应用也算是<strong>让青春继续</strong>吧！</p>
<h4>下载地址：</h4>
<p><a title="Youth.apk" href="http://www.maxhis.info/myapps/Youth.apk">点我下载到本地</a>，<a href="https://play.google.com/store/apps/details?id=me.since1987.youth">点我去Google官方商店下载</a>，您还可以在国内的五大应用商店下载到本应用。</p>
<h4>有图有真相：</h4>
<p><img class="aligncenter size-full wp-image-719" title="主页面" src="http://www.maxhis.info/wp-content/uploads/2012/04/device-2012-04-18-201909.png" alt="应用主页面" width="480" height="800" /></p>
<p><img class="aligncenter size-full wp-image-720" title="第一部——《让青春继续》" src="http://www.maxhis.info/wp-content/uploads/2012/04/device-2012-04-18-201937.png" alt="第一部——《让青春继续》" width="480" height="800" /></p>
<p><img class="aligncenter size-full wp-image-721" title="第二部——《最后时刻》" src="http://www.maxhis.info/wp-content/uploads/2012/04/device-2012-04-18-201955.png" alt="第二部——《最后时刻》" width="480" height="800" /></p>
<p><img class="aligncenter size-full wp-image-722" title="阅读页面" src="http://www.maxhis.info/wp-content/uploads/2012/04/device-2012-04-18-202115.png" alt="阅读页面" width="480" height="800" /></p>
<p><img class="aligncenter size-full wp-image-723" title="关于页面" src="http://www.maxhis.info/wp-content/uploads/2012/04/device-2012-04-18-202017.png" alt="关于页面" width="480" height="800" /></p>
<h3  class="related_post_title">您可能感兴趣的：</h3><ul class="related_post"><li>暂无相关日志</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.maxhis.info/archives/718/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>将eclipse加入ubuntu应用程序列表</title>
		<link>http://www.maxhis.info/archives/715</link>
		<comments>http://www.maxhis.info/archives/715#comments</comments>
		<pubDate>Sun, 15 Apr 2012 14:37:12 +0000</pubDate>
		<dc:creator>iStar</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.maxhis.info/?p=715</guid>
		<description><![CDATA[虽然ubuntu的应用源里就有eclipse，但是版本比较低，而且是最精简版的，以至于安装Android的ADT插件都需要解决很多依赖，所以，作为Android开发人员往往都是去eclipse网站上去下载eclipse然后解压直接运行的。这样虽然也很方便，但是有一个问题，就是不能加入到快捷菜单中直接运行，很不方便。以下是解决办法： 在桌面或者启动面板上添加图标 在桌面（右键单击桌面-&#62;创建启动器）或面板（右键单击面板-&#62;添加到面板 -&#62;定制应用程序启动器）上创建一个新的启动器，然后添加下列数据： 名称：Eclipse 命令：eclipse 图标： /home/istar/eclipse/icon.xpm 在Applications（应用程序）菜单上添加一个图标 用文本编辑器在/usr/share/applications目录里新建一个名为eclipse.desktop的启动器，如下面的命令: sudo vi /usr/share/applications/eclipse.desktop 或者 sudo gedit /usr/share/applications/eclipse.desktop 然后在文件中添加下列内容： [Desktop Entry] Encoding=UTF-8 Name=Eclipse Comment=Eclipse IDE Exec=eclipse Icon=/home/istar/eclipse/icon.xpm Terminal=false StartupNotify=true Type=Application Categories=Application;Development; 保存文件就OK了。 您可能感兴趣的：让你的Eclispe自动补全更智能 (2)SSH远程连接Ubuntu (0)Google 贡献两个项目给 Eclipse 基金会 (0)ubuntu开机Could not update ICEauthority file 解决办法 (1)Ubuntu找回顶部面板上的网络管理器、音量控制图标等 (8)Ubuntu10.04初体验 (2)从windows中导入Eclipse工程到Linux出现乱码的解决办法 (0)Eclipse常用快捷键汇总 (1)]]></description>
			<content:encoded><![CDATA[<p>虽然ubuntu的应用源里就有eclipse，但是版本比较低，而且是最精简版的，以至于安装Android的ADT插件都需要解决很多依赖，所以，作为Android开发人员往往都是去eclipse网站上去下载eclipse然后解压直接运行的。这样虽然也很方便，但是有一个问题，就是不能加入到快捷菜单中直接运行，很不方便。以下是解决办法：</p>
<h4>在桌面或者启动面板上添加图标</h4>
<p>在桌面（右键单击桌面-&gt;创建启动器）或面板（右键单击面板-&gt;添加到面板 -&gt;定制应用程序启动器）上创建一个新的启动器，然后添加下列数据：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:cc8513c2-c41e-4d2a-8076-19ed1cbcb2c5" class="wlWriterEditableSmartContent">
<pre name="code" class="py">名称：Eclipse
命令：eclipse
图标： /home/istar/eclipse/icon.xpm</pre>
</div>
<h4>在Applications（应用程序）菜单上添加一个图标</h4>
<p>用文本编辑器在/usr/share/applications目录里新建一个名为eclipse.desktop的启动器，如下面的命令:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:93992970-8e0a-44c4-bb0f-0b7a2b6ea1f5" class="wlWriterEditableSmartContent">
<pre name="code" class="ruby">sudo vi /usr/share/applications/eclipse.desktop
或者
sudo gedit /usr/share/applications/eclipse.desktop</pre>
</div>
<p>然后在文件中添加下列内容：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:dc6dcbbc-4141-4e91-87cc-d59dcdf84cc0" class="wlWriterEditableSmartContent">
<pre name="code" class="py">[Desktop Entry]
Encoding=UTF-8
Name=Eclipse
Comment=Eclipse IDE
Exec=eclipse
Icon=/home/istar/eclipse/icon.xpm
Terminal=false
StartupNotify=true
Type=Application
Categories=Application;Development;</pre>
</div>
<p>保存文件就OK了。</p>
<h3  class="related_post_title">您可能感兴趣的：</h3><ul class="related_post"><li><a href="http://www.maxhis.info/archives/658" title="让你的Eclispe自动补全更智能">让你的Eclispe自动补全更智能</a> (2)</li><li><a href="http://www.maxhis.info/archives/475" title="SSH远程连接Ubuntu">SSH远程连接Ubuntu</a> (0)</li><li><a href="http://www.maxhis.info/archives/384" title="Google 贡献两个项目给 Eclipse 基金会">Google 贡献两个项目给 Eclipse 基金会</a> (0)</li><li><a href="http://www.maxhis.info/archives/78" title="ubuntu开机Could not update ICEauthority file 解决办法">ubuntu开机Could not update ICEauthority file 解决办法</a> (1)</li><li><a href="http://www.maxhis.info/archives/70" title="Ubuntu找回顶部面板上的网络管理器、音量控制图标等">Ubuntu找回顶部面板上的网络管理器、音量控制图标等</a> (8)</li><li><a href="http://www.maxhis.info/archives/67" title="Ubuntu10.04初体验">Ubuntu10.04初体验</a> (2)</li><li><a href="http://www.maxhis.info/archives/66" title="从windows中导入Eclipse工程到Linux出现乱码的解决办法">从windows中导入Eclipse工程到Linux出现乱码的解决办法</a> (0)</li><li><a href="http://www.maxhis.info/archives/50" title="Eclipse常用快捷键汇总">Eclipse常用快捷键汇总</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.maxhis.info/archives/715/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《和空姐同居的日子》Android版</title>
		<link>http://www.maxhis.info/archives/707</link>
		<comments>http://www.maxhis.info/archives/707#comments</comments>
		<pubDate>Sat, 07 Apr 2012 14:24:29 +0000</pubDate>
		<dc:creator>iStar</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[我的作品]]></category>

		<guid isPermaLink="false">http://www.maxhis.info/?p=707</guid>
		<description><![CDATA[又有新作品上线了，除了中途夭折的几个应用，这还只是我个人的第二个应用。其实这个应用技术含量不高，只是一个文本展示，算是一个电子书吧，书的内容是网络纯情小说《和空姐同居的日子》。作为一个技术宅男，本人很少看书，而同时具有网络和小说两个关键字的书好像只有《和空姐同居的日子》了。当时好像还是大一，拿着我的山寨手机看的，小说确实很吸引人，很纯情，和吸引眼球的标题大相径庭。当时和我一起看这个小说的还有我们宿舍的宁宁和屁锦，而宁宁更是把这个小说看了N遍，真的，不信去问他自己！ 上面说的应该有足够的理由让我把这本书搬上咱们伟大的Android平台了，另外，作为尝试，我还在应用中加入了广告，没事的朋友可以点点啊！考虑到大部分兄弟姐妹可能比较反感广告，应用中还加入了关闭广告的设置项。还有，写完这个应用才发现，原来这个小说早就被出版成书了，还被拍成电影和电视剧，所以不知道这样算不算侵权，如果有，我肯定会第一时间撤下的（其实做应用中也有说明）。 说了这么多，还是来看看应用吧，有图有真相！另附下载地址：点我下载到本地  点我去Google商店下载，另外在国内的各大应用商店也可以下到。 您可能感兴趣的：暂无相关日志]]></description>
			<content:encoded><![CDATA[<p>又有新作品上线了，除了中途夭折的几个应用，这还只是我个人的第二个应用。其实这个应用技术含量不高，只是一个文本展示，算是一个电子书吧，书的内容是网络纯情小说《和空姐同居的日子》。作为一个技术宅男，本人很少看书，而同时具有<strong>网络</strong>和<strong>小说</strong>两个关键字的书好像只有《和空姐同居的日子》了。当时好像还是大一，拿着我的山寨手机看的，小说确实很吸引人，很纯情，和吸引眼球的标题大相径庭。当时和我一起看这个小说的还有我们宿舍的宁宁和屁锦，而宁宁更是把这个小说看了N遍，真的，不信去问他自己！</p>
<p>上面说的应该有足够的理由让我把这本书搬上咱们伟大的Android平台了，另外，作为尝试，我还在应用中加入了广告，没事的朋友可以点点啊！考虑到大部分兄弟姐妹可能比较反感广告，应用中还加入了关闭广告的设置项。还有，写完这个应用才发现，原来这个小说早就被出版成书了，还被拍成电影和电视剧，所以不知道这样算不算侵权，如果有，我肯定会第一时间撤下的（其实做应用中也有说明）。</p>
<p>说了这么多，还是来看看应用吧，有图有真相！另附下载地址：<a title="本地下载" href="http://maxhis.info/myapps/kongjie_2.apk" target="_blank">点我下载到本地</a>  <a title="Google官方市场下载" href="https://play.google.com/store/apps/details?id=me.since1987.kongjie" target="_blank">点我去Google商店下载</a>，另外在国内的各大应用商店也可以下到。</p>
<p><img class="aligncenter size-full wp-image-708" title="slash" src="http://www.maxhis.info/wp-content/uploads/2012/04/device-2012-04-07-201205.png" alt="" width="480" height="800" /></p>
<p><img class="aligncenter size-full wp-image-709" title="阅读界面" src="http://www.maxhis.info/wp-content/uploads/2012/04/device-2012-04-07-201549.png" alt="" width="480" height="800" /></p>
<p><img class="aligncenter size-full wp-image-710" title="设置界面" src="http://www.maxhis.info/wp-content/uploads/2012/04/device-2012-04-07-201620.png" alt="" width="480" height="800" /></p>
<p><img class="aligncenter size-full wp-image-711" title="关于界面" src="http://www.maxhis.info/wp-content/uploads/2012/04/device-2012-04-07-201656.png" alt="" width="480" height="800" /></p>
<h3  class="related_post_title">您可能感兴趣的：</h3><ul class="related_post"><li>暂无相关日志</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.maxhis.info/archives/707/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android envsetup简记</title>
		<link>http://www.maxhis.info/archives/704</link>
		<comments>http://www.maxhis.info/archives/704#comments</comments>
		<pubDate>Mon, 02 Apr 2012 06:46:53 +0000</pubDate>
		<dc:creator>iStar</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[envsetup]]></category>
		<category><![CDATA[编译]]></category>

		<guid isPermaLink="false">http://www.maxhis.info/?p=704</guid>
		<description><![CDATA[每次进入到android source 目录后的第一件事恐怕就是先执行. build/envsetup.sh，完成一些命令的初始化，今天主要分析envsetup.sh。 &#160; 1. 命令-也就是envsetup.sh中的函数 &#160; function help() # 显示帮助信息 function get_abs_build_var() # 获取绝对变量 function get_build_var() # 获取绝对变量 function check_product() # 检查product function check_variant() # 检查变量 function setpaths() # 设置文件路径 function printconfig() # 打印配置 function set_stuff_for_environment() # 设置环境变量 function set_sequence_number() # 设置序号 function settitle() # 设置标题 function choosetype() # 设置type function chooseproduct() # [...]]]></description>
			<content:encoded><![CDATA[<p>每次进入到android source 目录后的第一件事恐怕就是先执行. build/envsetup.sh，完成一些命令的初始化，今天主要分析envsetup.sh。 </p>
<p>&#160;</p>
<h4>1. 命令-也就是envsetup.sh中的函数 </h4>
<p>&#160;</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:34c16850-32df-41bb-90a7-921f15e5de77" class="wlWriterEditableSmartContent">
<pre name="code" class="py">function help()                     # 显示帮助信息
function get_abs_build_var()            # 获取绝对变量
function get_build_var()               # 获取绝对变量
function check_product()              # 检查product
function check_variant()               # 检查变量
function setpaths()                 # 设置文件路径
function printconfig()                # 打印配置
function set_stuff_for_environment()         # 设置环境变量
function set_sequence_number()           # 设置序号
function settitle()                   # 设置标题
function choosetype()                # 设置type
function chooseproduct()               # 设置product
function choosevariant()                # 设置variant
function tapas()                      # 功能同 choosecombo
function choosecombo()              # 设置编译参数
function add_lunch_combo()            # 添加lunch项目
function print_lunch_menu()            # 打印lunch列表
function lunch()                   # 配置lunch
function m()                    # make from top
function findmakefile()               # 查找makefile
function mm()                   # make from current directory
function mmm()                  # make the supplied directories
function croot()                  # 回到根目录
function cproj()
function pid()
function systemstack()
function gdbclient()
function jgrep()                  # 查找 java文件
function cgrep()                   # 查找 c/cpp 文件
function resgrep()
function tracedmdump()
function runhat()
function getbugreports()
function startviewserver()
function stopviewserver()
function isviewserverstarted()
function smoketest() function runtest()
function godir ()                    # 跳到指定目录
# add the default one here
add_lunch_combo generic-eng 

# Execute the contents of any vendorsetup.sh files we can find.
for f in `/bin/ls vendor/*/vendorsetup.sh vendor/*/build/vendorsetup.sh 2&gt; /dev/null`
do
     echo "including $f"
     . $f
done
</pre>
</div>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </p>
<h4>2. lunch命令 </h4>
<p>&#160;&#160;&#160;&#160;&#160; 已经有人分析过了，直接搬过来： </p>
<p>&#160;&#160; <a href="http://www.lupaworld.com/home.php?mod=space&amp;uid=131820&amp;do=blog&amp;id=149462">http://www.lupaworld.com/home.php?mod=space&amp;uid=131820&amp;do=blog&amp;id=149462</a> </p>
<p>下面是详细解释，好多都没有用到过，看来我的确是个菜鸟 </p>
<p></p>
<h5>.&#160; build/envsetup.sh </h5>
<p>build/envsetup.sh提供了几个有用的shell命令，使用 </p>
<p>$. build/envsetup.sh </p>
<p>可以引入到shell环境中。下面整理并简述。特别，envsetup.sh还同时会引入vendor/和device /目录下的 </p>
<p>vendorsetup.sh脚本。 </p>
<p></p>
<h5>help&#160;&#160;&#160; </h5>
<p>显示帮助，列出提供的命令 </p>
<p></p>
<h5>get_abs_build_var&#160;&#160; </h5>
<p>列出make 脚本中某变量的值，前缀上当前路径。ref dumpvar.mk </p>
<p>使用方法： </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; get_abs_build_var VAR_NAME </p>
<p>VAR_NAME是需要显示的 make 脚本中的变量。 </p>
<p>例如: </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; get_abs_build_var TARGET_PRODUCT </p>
<p>返回&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;Your Android Root&gt;\&lt;VAR_NAME Value&gt; </p>
<p></p>
<h5>get_build_var </h5>
<p>&#160;&#160;&#160;&#160;&#160; <br />列出make 脚本中某变量的值。ref dumpvar.mk </p>
<p>Usage： </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; get_build_var VAR_NAME </p>
<p>VAR_NAME是需要显示的 make 脚本中的变量。 </p>
<p>Return： </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160; &lt;VAR_NAME Value&gt; </p>
<p>Example: </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; get_abs_build_var TARGET_PRODUCT </p>
<p></p>
<h5>check_product </h5>
<p>检查指定的 TARGET_PRODUCT是否允许， 默认的有sim 和generic。 如果不允许， 则输出错误信息， 允许则无回显。 </p>
<p>Usage: </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; check_product &lt;YourTargetProduct&gt; </p>
<p>Example： </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; check_product generic </p>
<p></p>
<h5>check_variant </h5>
<p>检查variant是否支持，支持则返回0，不支持则返回1。允许的variant列表定义在envsetup.sh 中的 </p>
<p>VARIANT_CHOICES 中，默认是user，userdebug，eng。定制android时，可以在VARIANT_CHOICES 中添 </p>
<p>加vairant。 </p>
<p>Usage： </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; check_variant &lt;YourVariant&gt; </p>
<p>Example： </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; check_variant eng </p>
<p></p>
<h5>setpaths</h5>
<p>奇次执行时，将ANDROID_BUILD_PATHS 路径加到PATH中。偶次执行时，将ANDROID_BUILD_PATHS 路 </p>
<p>径从PATH中去除。ANDROID_BUILD_PATHS 包括android 编译中要使用到的路径，例如 </p>
<p>ANDROID_EABI_TOOLCHAIN，ANDROID_TOOLCHAIN，ANDROID_QTOOLS， </p>
<p>ANDROID_JAVA_TOOLCHAIN，ANDROID_PRODUCT_OUT 等等。 </p>
<p>&#160; <br />Usage： </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; setpaths printconfig </p>
<p>输出类似如下形势的配置信息。 </p>
<p>============================================ </p>
<p>PLATFORM_VERSION_CODENAME=AOSP </p>
<p>PLATFORM_VERSION=AOSP </p>
<p>TARGET_PRODUCT=generic </p>
<p>TARGET_BUILD_VARIANT=eng </p>
<p>TARGET_SIMULATOR= </p>
<p>TARGET_BUILD_TYPE=release </p>
<p>TARGET_BUILD_APPS= </p>
<p>TARGET_ARCH=arm </p>
<p>HOST_ARCH=x86 </p>
<p>HOST_OS=linux </p>
<p>HOST_BUILD_TYPE=release </p>
<p>BUILD_ID=OPENMASTER </p>
<p>============================================ </p>
<p></p>
<h5>set_stuff_for_environment</h5>
<p>依次调用settitle，&#160; set_java_home，setpaths，set_sequence_number。设置android编译需要的环境变量。&#160; </p>
<h5>set_sequence_number</h5>
<p>输出环境变量BUILD_ENV_SEQUENCE_NUMBER。 </p>
<p></p>
<h5>settitle </h5>
<p>设置shell 的prompt 提示，PROMPT_COMMAND中加入 TARGET_PRODUCT，TARGET_BUILD_VARIANT，和 </p>
<p>TARGET_BUILD_APPS 等信息提示。 </p>
<p></p>
<h5>choosesim </h5>
<p>配置环境变量 TARGET_SIMULATOR。linux 下会提示用户选择device 或 simulator。然后调用 </p>
<p>set_stuff_for_environment 设置。 </p>
<p></p>
<h5>choosetype</h5>
<p>配置环境变量 TARGET_BUILD_TYPE_SIMULATOR。会提示用户选择release 或debug。然后调用 </p>
<p>set_stuff_for_environment 设置。 chooseproduct </p>
<p>配置环境变量 TARGET_PRODUCT。会提示用户选择 release 或debug。然后调用 set_stuff_for_environment 设 </p>
<p>置。 </p>
<p></p>
<h5>choosevariant</h5>
<p>配置环境变量 TARGET_BUILD_VARIANT。会提示用户选择release 或debug。 </p>
<p></p>
<h5>choosecombo</h5>
<p>依次调用choosesim，choosetype，chooseproduct，choosevariant，set_stuff_for_environment 配置，然后 </p>
<p>调用printconfig 输出。 </p>
<p></p>
<h5>add_lunch_combo </h5>
<p>向环境变量 LUNCH_MENU_CHOICES 标识的列表中添加项。 envsetup.sh中默认添加了full-eng， full_x86-eng，和simulator。 </p>
<p></p>
<h5>print_lunch_menu </h5>
<p>列出 LUNCH_MENU_CHOICES 中的所有选项。 </p>
<p></p>
<h5>lunch </h5>
<p>点菜，用户选择/指定product，variant后，lunch命令设置环境变量TARGET_PRODUCT， </p>
<p>TARGET_BUILD_VARIANT，TARGET_SIMULATOR，TARGET_BUILD_TYPE，随后调用 </p>
<p>set_stuff_for_environment 设置，并printconfig 显示。 </p>
<p>Usage： </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; lunch&#160;&#160; [&lt;YourProduct&gt;-&lt;YourBuildVariant&gt;] </p>
<p>不给参数时，将提示用户选择。 </p>
<p>&#160; <br />Example： </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; lunch </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; lunch generic-eng </p>
<p></p>
<h5>tapas </h5>
<p>用户给定variant 和一个或多个app name，就是LOCAL_PACKAGE_NAME的名字。tapas 设定 </p>
<p>export TARGET_PRODUCT=generic </p>
<p>&#160;&#160;&#160;&#160; export TARGET_BUILD_VARIANT=$variant </p>
<p>&#160;&#160;&#160;&#160; export TARGET_SIMULATOR=false </p>
<p>&#160;&#160;&#160;&#160; export TARGET_BUILD_TYPE=release </p>
<p>&#160;&#160;&#160;&#160; export TARGET_BUILD_APPS=$apps </p>
<p>Usage： </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; tapas &lt;YourVariant&gt;?&#160; &lt;YourAppName&gt;* </p>
<p>?代表可选，*代表 0个，1个或多个。YourVariant 和 YourAppName 的次序可颠倒。 </p>
<p>&#160; <br />Example： </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; tapas user Calculator Calender </p>
<p></p>
<h5>gettop </h5>
<p>返回当前android 代码树的顶层路径。前提是当前路径位于android代码树中。 </p>
<p></p>
<h5>m </h5>
<p>等价于在当前 android代码树的顶层路径下执行make 命令。 </p>
<p></p>
<h5>findmakefile </h5>
<p>查找当前或最接近自己的祖辈路径上的Android.mk，返回Android.mk 的路径，假设当前路径处于android代码 </p>
<p>树中。 </p>
<p></p>
<h5>mm </h5>
<p>如果当前路径是代码树顶层，则mm相当于 make。如果是深层，测 mm相当于 </p>
<p>ONE_SHOT_MAKEFILE=$M make -C $T files $@ </p>
<p>$M是findmakefile 发现的Android.mk，$T 是代码树顶层路径，files是 main.mk 中定义的phony goal，就是 </p>
<p>完成$M 对应目录范围内，所有android需编译的 modules以及辅助说明txt文件。 </p>
<p></p>
<h5>mmm </h5>
<p>给定package 的路径，则mm 会make 相应的package。 </p>
<p>例如， </p>
<p>mmm package/apps/Calculator croot </p>
<p>改变当前路径到代码树顶层。 </p>
<p></p>
<h5>cproj </h5>
<p>改变当前路径到最近的还有Android.mk 文件的祖父辈路径。 </p>
<p></p>
<h5>pid</h5>
<p>使用adb shell ps命令列出手机上指定名字的进程的pid。 </p>
<p>Usage: </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; pid &lt;YourName&gt; </p>
<p></p>
<h5>systemstack </h5>
<p>使用kill -3system_server将系统进程中的线程信息写入/data/anr/traces.txt。 </p>
<p></p>
<h5>gdbclient </h5>
<p>建立gdb 调试环境，包括两步，手机上运行gdbserver，本机上运行arm-eabi-gdb。 </p>
<p>Usage： </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; gdbclient &lt;EXE&gt; &lt;PORT&gt; &lt;AppName&gt; </p>
<p>EXE: AppName 的执行名。 </p>
<p>PORT：gdbserver 的端口，例如, 192.168.2.102:5039 </p>
<p>AppName：手机中ps列出的app 名字，据此查pid。 </p>
<p></p>
<h5>sgrep </h5>
<p>查找当前目录及子目录中所有.c，.h，.cpp，.S，.java，.mk，.xml，.sh 文件，即源码文件中包含特定单词的行， </p>
<p>并颜色显示输出。 </p>
<p>Usage： </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; sgrep &lt;YourWord&gt; </p>
<p>Example: </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; sgrep Calendar </p>
<p></p>
<h5>jgrep</h5>
<p> 同sgrep，但只查.java文件。 </p>
<p></p>
<h5>cgrep</h5>
<p>同sgrep，但只查 c相关的文件，即.c，.cc，.cpp，.h文件。 </p>
<p></p>
<h5>resgrep</h5>
<p>同sgrep，但只查res相关的.xml文件。 </p>
<p></p>
<h5>mgrep </h5>
<p>同sgrep，但只查 make 相关的脚本文件，包括Makefile 文件，Makefile 目录下的所有文件，.make 文件，.mak </p>
<p>文件和.mk 文件。 </p>
<p></p>
<h5>treegrep</h5>
<p>查找当前目录及子目录中所有.c，.h，.cpp，.S，.java，.xml 文件，即源码文件中包含特定单词的行，并颜色显示输 </p>
<p>出。 </p>
<p></p>
<h5>getprebuilt</h5>
<p>输出prebuilt 的路径。 </p>
<p></p>
<h5>tracedmdump</h5>
<p>生成dexlist 文件qtrace.dexlit，dmtrace 数据文件dmtrace，和调用dmtracedump 工具生成的dmtrace 解析文 </p>
<p>件dmtrace.html，将生成文件放到指定路径。 </p>
<p>Usage： </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; tracedmdump &lt;YourDirName&gt; </p>
<p>如果YourDirName 中不含’\’，则将放置的路径是$ANDROID_PRODUCT_OUT/traces/YourDirName。 </p>
<p></p>
<h5>runhat</h5>
<p>貌似使用kill -10的方法得到heap dump并取到本地。 使用hat以http方式展现出来。 hat可能是个lightweight http </p>
<p>server，不曾用过。 </p>
<p></p>
<h5>getbugreports </h5>
<p>将手机/sdcard/bugreports 目录下的文件下载到本地并压缩打包。 </p>
<p></p>
<h5>startviewserver </h5>
<p>用指定端口启动viewserver。 </p>
<p>Usage： </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; startviewserver &lt;Port&gt; </p>
<p>不指定端口，则默认4939。 </p>
<p></p>
<h5>stopviewserver </h5>
<p>关闭viewserver。 </p>
<p></p>
<h5>isviewserverstarted </h5>
<p>检查viewserver是否可用。 </p>
<p></p>
<h5>smoketest </h5>
<p>编译smoketest 并安装手机运行。 </p>
<p></p>
<h5>runtest</h5>
<p>运行development/testrunner/runtest.py $@ </p>
<p></p>
<h5>godir </h5>
<p>给出一个词，godir 会输出一个路径列表供用户选择要进入的路径。路径列表包含的路径满足，路径名中包含这个词，或这路径下的文件有文件名含这个词。out/路径下不考虑。 </p>
<p>Usage： </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; godir &lt;YourKey&gt; </p>
<p>Usage： </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; godir Calculator </p>
<p></p>
<h5>set_java_home </h5>
<p>设置JAVA_HOME 环境变量为/usr/lib/jvm/java-6-sun。</p>
<h3  class="related_post_title">您可能感兴趣的：</h3><ul class="related_post"><li><a href="http://www.maxhis.info/archives/699" title="用单例实现的HttpClient">用单例实现的HttpClient</a> (0)</li><li><a href="http://www.maxhis.info/archives/683" title="Android设定应用不能移动到SD卡">Android设定应用不能移动到SD卡</a> (0)</li><li><a href="http://www.maxhis.info/archives/669" title="Android中的&ldquo;再按一次返回键退出程序&rdquo;实现">Android中的&ldquo;再按一次返回键退出程序&rdquo;实现</a> (5)</li><li><a href="http://www.maxhis.info/archives/652" title="给Android应用开发者的十个建议">给Android应用开发者的十个建议</a> (0)</li><li><a href="http://www.maxhis.info/archives/634" title="Android中对Google Calendar的操作示例">Android中对Google Calendar的操作示例</a> (6)</li><li><a href="http://www.maxhis.info/archives/632" title="生日提醒1.3版">生日提醒1.3版</a> (2)</li><li><a href="http://www.maxhis.info/archives/609" title="人人网的OAuth认证Android下的实现（非SDK方式）">人人网的OAuth认证Android下的实现（非SDK方式）</a> (7)</li><li><a href="http://www.maxhis.info/archives/565" title="让Service在手机休眠后仍然运行">让Service在手机休眠后仍然运行</a> (5)</li><li><a href="http://www.maxhis.info/archives/559" title="在Android应用中调用系统图标">在Android应用中调用系统图标</a> (0)</li><li><a href="http://www.maxhis.info/archives/558" title="防止ListView滚动时背景变黑">防止ListView滚动时背景变黑</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.maxhis.info/archives/704/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用单例实现的HttpClient</title>
		<link>http://www.maxhis.info/archives/699</link>
		<comments>http://www.maxhis.info/archives/699#comments</comments>
		<pubDate>Sat, 31 Mar 2012 15:20:24 +0000</pubDate>
		<dc:creator>iStar</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[HttpClient]]></category>
		<category><![CDATA[工具类]]></category>

		<guid isPermaLink="false">http://www.maxhis.info/?p=699</guid>
		<description><![CDATA[做应用时不可避免地要用到网络连接，如果每次连接都new一个HttpClient无疑是很浪费资源的，程序性能也不高，在这种情况下完全可以使用单例来做，请看以下代码： public class HttpUtil { public static final String TAG = "HttpUtil"; private static final String CHARSET = HTTP.UTF_8; private static HttpClient mHttpClient; private HttpUtil() { } public static synchronized HttpClient getHttpClient() { if (null == mHttpClient) { HttpParams params = new BasicHttpParams(); // 设置一些基本参数 HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, CHARSET); HttpProtocolParams.setUseExpectContinue(params, true); HttpProtocolParams .setUserAgent( params, "Mozilla/5.0(Linux;U;Android [...]]]></description>
			<content:encoded><![CDATA[<p>做应用时不可避免地要用到网络连接，如果每次连接都new一个HttpClient无疑是很浪费资源的，程序性能也不高，在这种情况下完全可以使用单例来做，请看以下代码：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:71ac1109-e0a8-4dd5-aa4d-1120b2e83373" class="wlWriterEditableSmartContent">
<pre name="code" class="java">public class HttpUtil {

	public static final String TAG = "HttpUtil";

	private static final String CHARSET = HTTP.UTF_8;
	private static HttpClient mHttpClient;

	private HttpUtil() {
	}

	public static synchronized HttpClient getHttpClient() {
		if (null == mHttpClient) {
			HttpParams params = new BasicHttpParams();
			// 设置一些基本参数
			HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
			HttpProtocolParams.setContentCharset(params, CHARSET);
			HttpProtocolParams.setUseExpectContinue(params, true);
			HttpProtocolParams
					.setUserAgent(
							params,
							"Mozilla/5.0(Linux;U;Android 2.2.1;en-us;Nexus One Build.FRG83) "
									+ "AppleWebKit/553.1(KHTML,like Gecko) Version/4.0 Mobile Safari/533.1");
			// 超时设置
			/* 从连接池中取连接的超时时间 */
			ConnManagerParams.setTimeout(params, 1000);
			/* 连接超时 */
			HttpConnectionParams.setConnectionTimeout(params, 2000);
			/* 请求超时 */
			HttpConnectionParams.setSoTimeout(params, 4000);

			// 设置我们的HttpClient支持HTTP和HTTPS两种模式
			SchemeRegistry schReg = new SchemeRegistry();
			schReg.register(new Scheme("http", PlainSocketFactory
					.getSocketFactory(), 80));
			schReg.register(new Scheme("https", SSLSocketFactory
					.getSocketFactory(), 443));

			// 使用线程安全的连接管理来创建HttpClient
			ClientConnectionManager conMgr = new ThreadSafeClientConnManager(
					params, schReg);
			mHttpClient = new DefaultHttpClient(conMgr, params);
		}
		return mHttpClient;
	}

	public static String post(String url, NameValuePair... params) {
		try {
			// 编码参数
			List&lt;NameValuePair&gt; formparams = new ArrayList&lt;NameValuePair&gt;(); // 请求参数
			for (NameValuePair p : params) {
				formparams.add(p);
			}
			UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams,
					CHARSET);
			// 创建POST请求
			HttpPost request = new HttpPost(url);
			request.setEntity(entity);
			// 发送请求
			HttpClient client = getHttpClient();
			HttpResponse response = client.execute(request);
			if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
				Log.e(TAG, "Connect error, pls check your network.");
			}
			HttpEntity resEntity = response.getEntity();
			return (resEntity == null) ? null : EntityUtils.toString(resEntity,
					CHARSET);
		} catch (UnsupportedEncodingException e) {
			Log.w(TAG, e.getMessage());
			return null;
		} catch (ClientProtocolException e) {
			Log.w(TAG, e.getMessage());
			return null;
		} catch (IOException e) {
			throw new RuntimeException("Fail to connect Internet!", e);
		}
	}
}</pre>
</div>
<h3  class="related_post_title">您可能感兴趣的：</h3><ul class="related_post"><li><a href="http://www.maxhis.info/archives/704" title="Android envsetup简记">Android envsetup简记</a> (0)</li><li><a href="http://www.maxhis.info/archives/683" title="Android设定应用不能移动到SD卡">Android设定应用不能移动到SD卡</a> (0)</li><li><a href="http://www.maxhis.info/archives/669" title="Android中的&ldquo;再按一次返回键退出程序&rdquo;实现">Android中的&ldquo;再按一次返回键退出程序&rdquo;实现</a> (5)</li><li><a href="http://www.maxhis.info/archives/652" title="给Android应用开发者的十个建议">给Android应用开发者的十个建议</a> (0)</li><li><a href="http://www.maxhis.info/archives/634" title="Android中对Google Calendar的操作示例">Android中对Google Calendar的操作示例</a> (6)</li><li><a href="http://www.maxhis.info/archives/632" title="生日提醒1.3版">生日提醒1.3版</a> (2)</li><li><a href="http://www.maxhis.info/archives/609" title="人人网的OAuth认证Android下的实现（非SDK方式）">人人网的OAuth认证Android下的实现（非SDK方式）</a> (7)</li><li><a href="http://www.maxhis.info/archives/565" title="让Service在手机休眠后仍然运行">让Service在手机休眠后仍然运行</a> (5)</li><li><a href="http://www.maxhis.info/archives/559" title="在Android应用中调用系统图标">在Android应用中调用系统图标</a> (0)</li><li><a href="http://www.maxhis.info/archives/558" title="防止ListView滚动时背景变黑">防止ListView滚动时背景变黑</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.maxhis.info/archives/699/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java中将彩图转换为灰度图的算法</title>
		<link>http://www.maxhis.info/archives/691</link>
		<comments>http://www.maxhis.info/archives/691#comments</comments>
		<pubDate>Thu, 15 Mar 2012 10:58:11 +0000</pubDate>
		<dc:creator>iStar</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[图片处理]]></category>
		<category><![CDATA[算法]]></category>

		<guid isPermaLink="false">http://www.maxhis.info/?p=691</guid>
		<description><![CDATA[在Android应用开发中有时候可能需要将一张彩色图片变成一张灰度图，除了PS可以达到这种效果以外，我们也可以用代码来实现，以下是Java实现的转换算法： /** * 把资源图片转为灰度图 * @param resID 资源ID * @return */ public Bitmap convertGrayImg(int resID) { Bitmap src=((BitmapDrawable) getResources().getDrawable(resID)).getBitmap(); int w=src.getWidth(),h=src.getHeight(); int[] pix = new int[w * h]; src.getPixels(pix, 0, w, 0, 0, w, h); int alpha=0xFF&#60;&#60;24; for (int i = 0; i &#60; h; i++) { for (int j = 0; j &#60; w; [...]]]></description>
			<content:encoded><![CDATA[<p>在Android应用开发中有时候可能需要将一张彩色图片变成一张灰度图，除了PS可以达到这种效果以外，我们也可以用代码来实现，以下是Java实现的转换算法：</p>
<div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:051d908a-b5cb-41ed-afc0-bf47daff00a4" class="wlWriterEditableSmartContent" style="margin: 0px; display: inline; float: none; padding: 0px;">
<pre class="java">/**
     * 把资源图片转为灰度图
     * @param resID 资源ID
     * @return
     */
    public Bitmap convertGrayImg(int resID) {
        Bitmap src=((BitmapDrawable) getResources().getDrawable(resID)).getBitmap();

        int w=src.getWidth(),h=src.getHeight();
        int[] pix = new int[w * h];
        src.getPixels(pix, 0, w, 0, 0, w, h);

        int alpha=0xFF&lt;&lt;24;
        for (int i = 0; i &lt; h; i++) {
            for (int j = 0; j &lt; w; j++) {
                // 获得像素的颜色
                int color = pix[w * i + j];
                int red = ((color &amp; 0x00FF0000) &gt;&gt; 16);
                int green = ((color &amp; 0x0000FF00) &gt;&gt; 8);
                int blue = color &amp; 0x000000FF;
                color = (red + green + blue)/3;
                color = alpha | (color &lt;&lt; 16) | (color &lt;&lt; 8 ) | color;
                pix[w * i + j] = color;
            }
        }
        Bitmap result=Bitmap.createBitmap(w, h, Config.RGB_565);
        result.setPixels(pix, 0, w, 0, 0,w, h);
        return result;
    }</pre>
</div>
<h3  class="related_post_title">您可能感兴趣的：</h3><ul class="related_post"><li>暂无相关日志</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.maxhis.info/archives/691/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>用Java实现的农历公历互转&#8212;&#8212;修正版</title>
		<link>http://www.maxhis.info/archives/685</link>
		<comments>http://www.maxhis.info/archives/685#comments</comments>
		<pubDate>Fri, 24 Feb 2012 14:54:35 +0000</pubDate>
		<dc:creator>iStar</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[农历公历互转]]></category>
		<category><![CDATA[农历转公历]]></category>

		<guid isPermaLink="false">http://www.maxhis.info/?p=685</guid>
		<description><![CDATA[以前曾发布过一个《用Java实现的农历公历互转》，后来发现从2012年开始就有问题（莫非真有世界末日？），于是试着去网上找答案，发现公历转农历的很多，但农历转公历的似乎没有。只好自己动手了，也希望能帮助各位同学解决一下碰到的问题，我深知搜索半天都找不到答案的苦恼，:） 其实这也不算是原创，是根据一个PHP代码改成Java代码的，修复了一些小bug并改成了Java风格，暂时还没发现新问题。另外传入的参数和返回值可能设计得不是很好，现在是返回一个“yyyy-MM-dd”型的字符串，可能返回一个int数组更好，还可以标记农历的闰月，各位根据自己的需求去改吧，在此抛砖引玉！ 好了，有代码有真相： /** * 该类实现了公历与农历互转，支持的范围为1950～2050.&#60;/br&#62; * 传入和返回的参数都为“yyyy-MM-dd”的字符串。 * * @author iStar */ public class LunarUtil { /** 农历从1950年开始 */ private static final int START_YEAR = 1950; private static SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy-MM-dd"); /** 公历月份天数 */ private static final int[] mSolarDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; [...]]]></description>
			<content:encoded><![CDATA[<p>以前曾发布过一个《<a href="http://www.maxhis.info/java/%E7%94%A8java%E5%AE%9E%E7%8E%B0%E7%9A%84%E5%86%9C%E5%8E%86%E5%85%AC%E5%8E%86%E4%BA%92%E8%BD%AC/" target="_blank">用Java实现的农历公历互转</a>》，后来发现从2012年开始就有问题（莫非真有世界末日？），于是试着去网上找答案，发现公历转农历的很多，但农历转公历的似乎没有。只好自己动手了，也希望能帮助各位同学解决一下碰到的问题，我深知搜索半天都找不到答案的苦恼，:）</p>
<p>其实这也不算是原创，是根据一个PHP代码改成Java代码的，修复了一些小bug并改成了Java风格，暂时还没发现新问题。另外传入的参数和返回值可能设计得不是很好，现在是返回一个“yyyy-MM-dd”型的字符串，可能返回一个int数组更好，还可以标记农历的闰月，各位根据自己的需求去改吧，在此抛砖引玉！</p>
<p>好了，有代码有真相：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:963117b0-7e53-4a03-ac3e-d05fd2998a9b" class="wlWriterEditableSmartContent">
<pre name="code" class="java">/**
 * 该类实现了公历与农历互转，支持的范围为1950～2050.&lt;/br&gt;
 * 传入和返回的参数都为“yyyy-MM-dd”的字符串。
 *
 * @author iStar
 */
public class LunarUtil {
	/** 农历从1950年开始 */
	private static final int START_YEAR = 1950;

	private static SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy-MM-dd");
	/**	公历月份天数 */
	private static final int[] mSolarDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	/**	汉语农历月份*/
	public static final String[] mLunarMonths = {
		"正", "二", "三", "四", "五", "六", "七","八", "九", "十","十一", "十二"
	};

	/**	汉语农历日期*/
	public static final String[] mLunarDays = {
		"初一","初二","初三","初四","初五","初六","初七","初八","初九","初十",
		"十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",
		"廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"
	};

	private static final int[][] mLunarMonthDays = {
		//差：该年的农历正月初一到该年公历1月1日的天数；1~12：农历月份天数；闰：如有闰月，记录该月平月天数
		//	 差  1  2  3  4  5  6  7  8  9 10 11 12 闰
			{47,29,30,30,29,30,30,29,29,30,29,30,29},
			{36,30,29,30,30,29,30,29,30,29,30,29,30},
		    { 6,29,30,29,30,59,29,30,30,29,30,29,30,29},    //五月29 闰五月30
		   	{44,29,30,29,29,30,30,29,30,30,29,30,29},
		    {33,30,29,30,29,29,30,29,30,30,29,30,30},
		    {23,29,30,59,29,29,30,29,30,29,30,30,30,29},    //三月29 闰三月30
		    {42,29,30,29,30,29,29,30,29,30,29,30,30},
		    {30,30,29,30,29,30,29,29,59,30,29,30,29,30},    //八月30 闰八月29
		    {48,30,30,30,29,30,29,29,30,29,30,29,30},
		    {38,29,30,30,29,30,29,30,29,30,29,30,29},
		    {27,30,29,30,29,30,59,30,29,30,29,30,29,30},    //六月30 闰六月29
		    {45,30,29,30,29,30,29,30,30,29,30,29,30},
		    {35,29,30,29,29,30,29,30,30,29,30,30,29},
		    {24,30,29,30,58,30,29,30,29,30,30,30,29,29},    //四月29 闰四月29
		    {43,30,29,30,29,29,30,29,30,29,30,30,30},
		    {32,29,30,29,30,29,29,30,29,29,30,30,29},
		    {20,30,30,59,30,29,29,30,29,29,30,30,29,30},    //三月30 闰三月29
		    {39,30,30,29,30,30,29,29,30,29,30,29,30},
		    {29,29,30,29,30,30,29,59,30,29,30,29,30,30},    //七月30 闰七月29
		    {47,29,30,29,30,29,30,30,29,30,29,30,29},
		    {36,30,29,29,30,29,30,30,29,30,30,29,30},
		    {26,29,30,29,29,59,30,29,30,30,30,29,30,30},    //五月30 闰五月29
		    {45,29,30,29,29,30,29,30,29,30,30,29,30},
		    {33,30,29,30,29,29,30,29,29,30,30,29,30},
		    {22,30,30,29,59,29,30,29,29,30,30,29,30,30},    //四月30 闰四月29
		    {41,30,30,29,30,29,29,30,29,29,30,29,30},
		    {30,30,30,29,30,29,30,29,59,29,30,29,30,30},    //八月30 闰八月29
		    {48,30,29,30,30,29,30,29,30,29,30,29,29},
		    {37,30,29,30,30,29,30,30,29,30,29,30,29},
		    {27,30,29,29,30,29,60,29,30,30,29,30,29,30},    //六月30 闰六月30
		    {46,30,29,29,30,29,30,29,30,30,29,30,30},
		    {35,29,30,29,29,30,29,29,30,30,29,30,30},
		    {24,30,29,30,58,30,29,29,30,29,30,30,30,29},    //四月29 闰四月29
		    {43,30,29,30,29,29,30,29,29,30,29,30,30},
		    {32,30,29,30,30,29,29,30,29,29,59,30,30,30},    //十月30 闰十月29
		    {50,29,30,30,29,30,29,30,29,29,30,29,30},
		    {39,29,30,30,29,30,30,29,30,29,30,29,29},
		    {28,30,29,30,29,30,59,30,30,29,30,29,29,30},    //六月30 闰六月29
		    {47,30,29,30,29,30,29,30,30,29,30,30,29},
		    {36,30,29,29,30,29,30,29,30,29,30,30,30},
		    {26,29,30,29,29,59,29,30,29,30,30,30,30,30},    //五月30 闰五月29
		    {45,29,30,29,29,30,29,29,30,29,30,30,30},
		    {34,29,30,30,29,29,30,29,29,30,29,30,30},
		    {22,29,30,59,30,29,30,29,29,30,29,30,29,30},    //三月30 闰三月29
		    {40,30,30,30,29,30,29,30,29,29,30,29,30},
		    {30,29,30,30,29,30,29,30,59,29,30,29,30,30},    //八月30 闰八月29
		    {49,29,30,29,30,30,29,30,29,30,30,29,29},
		    {37,30,29,30,29,30,29,30,30,29,30,30,29},
		    {27,30,29,29,30,58,30,30,29,30,30,29,30,29},    //五月29 闰五月29
		    {46,30,29,29,30,29,29,30,29,30,30,30,29},
		    {35,30,30,29,29,30,29,29,30,29,30,30,29},
		    {23,30,30,29,59,30,29,29,30,29,30,29,30,30},    //四月30 闰四月29
		    {42,30,30,29,30,29,30,29,29,30,29,30,29},
		    {31,30,30,29,30,30,29,30,29,29,30,29,30},
		    {21,29,59,30,30,29,30,29,30,29,30,29,30,30},    //二月30 闰二月29
		    {39,29,30,29,30,29,30,30,29,30,29,30,29},
		    {28,30,29,30,29,30,29,59,30,30,29,30,30,30},    //七月30 闰七月29
		    {48,29,29,30,29,29,30,29,30,30,30,29,30},
		    {37,30,29,29,30,29,29,30,29,30,30,29,30},
		    {25,30,30,29,29,59,29,30,29,30,29,30,30,30},    //五月30 闰五月29
		    {44,30,29,30,29,30,29,29,30,29,30,29,30},
		    {33,30,29,30,30,29,30,29,29,30,29,30,29},
		    {22,30,29,30,59,30,29,30,29,30,29,30,29,30},    //四月30 闰四月29
		    {40,30,29,30,29,30,30,29,30,29,30,29,30},
		    {30,29,30,29,30,29,30,29,30,59,30,29,30,30},    //九月30 闰九月29
		    {49,29,30,29,29,30,29,30,30,30,29,30,29},
		    {38,30,29,30,29,29,30,29,30,30,29,30,30},
		    {27,29,30,29,30,29,59,29,30,29,30,30,30,29},    //六月29 闰六月30
		    {46,29,30,29,30,29,29,30,29,30,29,30,30},
		    {35,30,29,30,29,30,29,29,30,29,29,30,30},
		    {24,29,30,30,59,30,29,29,30,29,30,29,30,30},    //四月30 闰四月29
		    {42,29,30,30,29,30,29,30,29,30,29,30,29},
		    {31,30,29,30,29,30,30,29,30,29,30,29,30},
		    {21,29,59,29,30,30,29,30,30,29,30,29,30,30},    //二月30 闰二月29
		    {40,29,30,29,29,30,29,30,30,29,30,30,29},
		    {28,30,29,30,29,29,59,30,29,30,30,30,29,30},    //六月30 闰六月29
		    {47,30,29,30,29,29,30,29,29,30,30,30,29},
		    {36,30,30,29,30,29,29,30,29,29,30,30,29},
		    {25,30,30,30,29,59,29,30,29,29,30,30,29,30},    //五月30 闰五月29
		    {43,30,30,29,30,29,30,29,30,29,29,30,30},
		    {33,29,30,29,30,30,29,30,29,30,29,30,29},
		    {22,29,30,59,30,29,30,30,29,30,29,30,29,30},    //三月30 闰三月29
		    {41,30,29,29,30,29,30,30,29,30,30,29,30},
		    {30,29,30,29,29,30,29,30,29,30,30,59,30,30},    //十一月30 闰十一月29
		    {49,29,30,29,29,30,29,30,29,30,30,29,30},
		    {38,30,29,30,29,29,30,29,29,30,30,29,30},
		    {27,30,30,29,30,29,59,29,29,30,29,30,30,29},    //六月29 闰六月30
		    {45,30,30,29,30,29,29,30,29,29,30,29,30},
		    {34,30,30,29,30,29,30,29,30,29,29,30,29},
		    {23,30,30,29,30,59,30,29,30,29,30,29,29,30},    //五月30 闰五月29
		    {42,30,29,30,30,29,30,29,30,30,29,30,29},
		    {31,29,30,29,30,29,30,30,29,30,30,29,30},
		    {21,29,59,29,30,29,30,29,30,30,29,30,30,30},    //二月30 闰二月29
		    {40,29,30,29,29,30,29,29,30,30,29,30,30},
		    {29,30,29,30,29,29,30,58,30,29,30,30,30,29},    //七月29 闰七月29
		    {47,30,29,30,29,29,30,29,29,30,29,30,30},
		    {36,30,29,30,29,30,29,30,29,29,30,29,30},
		    {25,30,29,30,30,59,29,30,29,29,30,29,30,29},    //五月29 闰五月30
		    {44,29,30,30,29,30,30,29,30,29,29,30,29},
		    {32,30,29,30,29,30,30,29,30,30,29,30,29},
		    {22,29,30,59,29,30,29,30,30,29,30,30,29,29},    //三月29 闰三月30
	};

	/**
	 *  是否闰年
	 */
	private static boolean isLeapYear(int year) {
		return (year % 4 == 0) &amp;&amp; ((year % 100 != 0) || (year % 400 == 0));
	}

	/**
	 * 公历该月的天数(year：年份； month：月份)
	 */
	private static int getDays(int year, int month) {
		if (isLeapYear(year) &amp;&amp; month == 2)
			return 29;
		else
			return mSolarDays[month-1];
	}

	private String getLunarMonth(int month) {
		if (month &gt;= 1 &amp;&amp; month &lt;= 12) {
			return mLunarMonths[month - 1];
		}
		return "" + month;
	}

	private String getLunarDay(int day) {
		if(day &gt;=1 &amp;&amp; day &lt;=30 ) {
			return mLunarDays[day-1];
		}
		return "" + day;
	}

	/**
	 * 公历转农历
	 * @param date 公历日期（yyyy-MM-dd）
	 * @return yyyy-MM-dd
	 */
	public static String solar2Lunar(String date) {

		String[] dates = date.split("-");
		int year = Integer.parseInt(dates[0]);
		int month = Integer.parseInt(dates[1]);
		int day = Integer.parseInt(dates[2]);

		int lYear = year, lMonth = month, lDay = day, type = 0;

		if (year &lt;= 1951 || month &lt;= 0 || day &lt;= 0 || year &gt;= 2051) {
			return "Bad date format ! Only support year from 1951 to 2050.";
		}
		Date date1 = null, date2 = null;
		try {
			date1 = mDateFormat.parse(year + "-01-01");// 当年1月1日
			date2 = mDateFormat.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		// 获取查询日期到当年1月1日的天数
		int days = (int) ((date2.getTime() - date1.getTime()) /1000 / 3600 / 24);
		days += 1;

		// 获取相应年度农历数据，化成数组Larray
		int[] monthDays = mLunarMonthDays[year - START_YEAR];
		if (days &lt;= monthDays[0]) {
			lYear = year - 1;
			days = monthDays[0] - days;
			monthDays = mLunarMonthDays[lYear - START_YEAR];
			if (days &lt; monthDays[12]) {
				lMonth = 12;
				lDay = monthDays[12] - days;
			} else {
				lMonth = 11;
				days = days - monthDays[12];
				lDay = monthDays[11] - days;
			}
		} else {
			lYear = year;
			days = days - monthDays[0];
			for (int i = 1; i &lt;= 12; i++) {
				if (days &gt; monthDays[i])
					days = days - monthDays[i];
				else {
					if (days &gt; 30) {
						days = days - monthDays[13];
						type = 1;
					}

					lMonth = i;
					lDay = days;
					break;
				}
			}
		}
		return lYear + "-" + (type==1?"闰":"") + lMonth + "-" + lDay ;
	}

	/**
	 * 农历转公历
	 * @param date 	农历日期
	 * @return "yyyy-MM-dd"
	 */
	public static String lunar2Solar(String date) {
		return lunar2Solar(date,0);
	}

	/**
	 * 农历转公历
	 * @param date 	农历日期
	 * @param type	1 for 闰年，0 for otherwise
	 * @return "yyyy-MM-dd"
	 */
	public static String lunar2Solar(String date, int type) {
		String[] dates = date.split("-");
		int year = Integer.parseInt(dates[0]);
		int month = Integer.parseInt(dates[1]);
		int day = Integer.parseInt(dates[2]);

		int sYear = year;
		int sMonth = month;
		int sDay = day;

		if (year &lt;= 1950 || month &lt;= 0 || day &lt;= 0 || year &gt;= 2051) {
			return "Bad date format ! Only support year from 1951 to 2050.";
		}
		int[] monthDays = mLunarMonthDays[year - START_YEAR];
		if (type == 1 &amp;&amp; monthDays.length &lt;= 13) {
			return "Not leap year!";// 要求查询闰，但查无闰月
		}

		// 如果查询的农历是闰月并该年度农历数组存在闰月数据就获取
		if (monthDays[month] &gt; 30 &amp;&amp; type == 1 &amp;&amp; monthDays.length &gt;= 13)
			day = monthDays[13] + day;
		// 获取该年农历日期到公历1月1日的天数
		int days = day;
		for (int i = 0; i &lt;= month - 1; i++)
			days += monthDays[i];
		// 当查询农历日期距离公历1月1日超过一年时
		if (days &gt; 366 || (getDays(month, 2) != 29 &amp;&amp; days &gt; 365)) {
			sYear = year + 1;
			if (getDays(month, 2) != 29)
				days -= 366;
			else
				days -= 365;
			if (days &gt; mSolarDays[1]) {
				sMonth = 2;
				sDay = days - mSolarDays[1];
			} else {
				sMonth = 1;
				sDay = days;
			}
		} else {
			sYear = year;
			for (int i = 1; i &lt;= 12; i++) {
				if (days &gt; getDays(sYear, i))
					days -= getDays(sYear, i);
				else {
					sMonth = i;
					sDay = days;
					break;
				}
			}
		}
		return sYear + "-" + sMonth + "-" + sDay;
	}

	public static void main(String[] args) {
		System.out.println(LunarUtil.solar2Lunar("2012-4-6"));
		System.out.println(LunarUtil.lunar2Solar("2017-3-9",1));
	}
}</pre>
</div>
<h3  class="related_post_title">您可能感兴趣的：</h3><ul class="related_post"><li>暂无相关日志</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.maxhis.info/archives/685/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Android设定应用不能移动到SD卡</title>
		<link>http://www.maxhis.info/archives/683</link>
		<comments>http://www.maxhis.info/archives/683#comments</comments>
		<pubDate>Thu, 16 Feb 2012 12:31:28 +0000</pubDate>
		<dc:creator>iStar</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[应用安装位置]]></category>

		<guid isPermaLink="false">http://www.maxhis.info/?p=683</guid>
		<description><![CDATA[今天为我们提供定制应用的第三方软件商给我提了一个需求，问能不能让应用在我们的系统上安装以后用户不能移动到SD卡。这是个很费神的问题，以前曾经特意去研究了一下这个问题，看了半天的源码，还是没有发现Google在这方面提供的接口。现在既然第三方提出了这样一个需求，不得不重新再好好去研究一下源码，没想到真的可以到达这样的目的。 因为现在在家没有Android源码，源码中定义这个的地方也就没法说了，直接说怎么去设置吧！其实很简单，在应用的menifest文件中指定就可以了，在 &#60;manifest&#62; 元素中包含android:installLocation 属性，设置其值为&#34;internalOnly&#34;即可，如下： &#60;manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" ... &#62; android:installLocation 还有另外两个属性值：&#34;preferExternal&#34;和&#34;auto&#34;，根据字面意思大概也能明白是什么意思了，还是说明如下： 如果你定义了 &#34;preferExternal&#34;，意味着你要求你的应用安装至扩展存储，但是系统不能保证应用肯定会安装至扩展存储。如果扩展存储没有空间了，系统将把应用安装到内置存储。用户可以在两个位置之间移动你的应用。 如果你定义了 &#34;auto&#34;，表示你的应用可能会安装在扩展存储，但是对安装位置没有特别的偏好。系统将基于很多因素决定你的应用安装到哪里。用户同样可以将应用在两个位置之间移动。 您可能感兴趣的：Android envsetup简记 (0)用单例实现的HttpClient (0)Android中的&#8220;再按一次返回键退出程序&#8221;实现 (5)给Android应用开发者的十个建议 (0)Android中对Google Calendar的操作示例 (6)生日提醒1.3版 (2)人人网的OAuth认证Android下的实现（非SDK方式） (7)让Service在手机休眠后仍然运行 (5)在Android应用中调用系统图标 (0)防止ListView滚动时背景变黑 (0)]]></description>
			<content:encoded><![CDATA[<p>今天为我们提供定制应用的第三方软件商给我提了一个需求，问能不能让应用在我们的系统上安装以后用户不能移动到SD卡。这是个很费神的问题，以前曾经特意去研究了一下这个问题，看了半天的源码，还是没有发现Google在这方面提供的接口。现在既然第三方提出了这样一个需求，不得不重新再好好去研究一下源码，没想到真的可以到达这样的目的。</p>
<p>因为现在在家没有Android源码，源码中定义这个的地方也就没法说了，直接说怎么去设置吧！其实很简单，在应用的menifest文件中指定就可以了，在 &lt;manifest&gt; 元素中包含android:installLocation 属性，设置其值为&quot;internalOnly&quot;即可，如下：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:5c0d8f3b-87dd-4d80-88ea-df339b3366fb" class="wlWriterEditableSmartContent">
<pre name="code" class="xml">&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:installLocation="internalOnly"
    ... &gt;</pre>
</div>
<p>android:installLocation 还有另外两个属性值：&quot;preferExternal&quot;和&quot;auto&quot;，根据字面意思大概也能明白是什么意思了，还是说明如下：</p>
<ul>
<li>如果你定义了 &quot;preferExternal&quot;，意味着你要求你的应用安装至扩展存储，但是系统不能保证应用肯定会安装至扩展存储。如果扩展存储没有空间了，系统将把应用安装到内置存储。用户可以在两个位置之间移动你的应用。 </li>
<li>如果你定义了 &quot;auto&quot;，表示你的应用可能会安装在扩展存储，但是对安装位置没有特别的偏好。系统将基于很多因素决定你的应用安装到哪里。用户同样可以将应用在两个位置之间移动。 </li>
</ul>
<h3  class="related_post_title">您可能感兴趣的：</h3><ul class="related_post"><li><a href="http://www.maxhis.info/archives/704" title="Android envsetup简记">Android envsetup简记</a> (0)</li><li><a href="http://www.maxhis.info/archives/699" title="用单例实现的HttpClient">用单例实现的HttpClient</a> (0)</li><li><a href="http://www.maxhis.info/archives/669" title="Android中的&ldquo;再按一次返回键退出程序&rdquo;实现">Android中的&ldquo;再按一次返回键退出程序&rdquo;实现</a> (5)</li><li><a href="http://www.maxhis.info/archives/652" title="给Android应用开发者的十个建议">给Android应用开发者的十个建议</a> (0)</li><li><a href="http://www.maxhis.info/archives/634" title="Android中对Google Calendar的操作示例">Android中对Google Calendar的操作示例</a> (6)</li><li><a href="http://www.maxhis.info/archives/632" title="生日提醒1.3版">生日提醒1.3版</a> (2)</li><li><a href="http://www.maxhis.info/archives/609" title="人人网的OAuth认证Android下的实现（非SDK方式）">人人网的OAuth认证Android下的实现（非SDK方式）</a> (7)</li><li><a href="http://www.maxhis.info/archives/565" title="让Service在手机休眠后仍然运行">让Service在手机休眠后仍然运行</a> (5)</li><li><a href="http://www.maxhis.info/archives/559" title="在Android应用中调用系统图标">在Android应用中调用系统图标</a> (0)</li><li><a href="http://www.maxhis.info/archives/558" title="防止ListView滚动时背景变黑">防止ListView滚动时背景变黑</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.maxhis.info/archives/683/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何修改MSN账号（Windows Live ID）</title>
		<link>http://www.maxhis.info/archives/678</link>
		<comments>http://www.maxhis.info/archives/678#comments</comments>
		<pubDate>Thu, 09 Feb 2012 13:50:23 +0000</pubDate>
		<dc:creator>iStar</dc:creator>
				<category><![CDATA[电脑常识]]></category>
		<category><![CDATA[MSN]]></category>
		<category><![CDATA[修改MSN账号]]></category>

		<guid isPermaLink="false">http://www.maxhis.info/?p=678</guid>
		<description><![CDATA[觉得以前的邮箱太长，于是又重新注册了一个新的，因为之前的各种账号都是用之前的那个邮箱注册的，所以换邮箱确实是一个比较浩大的工程，到目前为止基本上把一些网站的账号迁移过来了，今天想着把MSN的ID也换成现在的邮箱。在网上搜了一下，好像一致的结论都是MSN的ID不能改，除非重新注册一个。实在不想用以前的邮箱作为账号了，又不想重新注册一个，毕竟那么多好友在里面，于是抱着试试看的心态在MSN的网站上摸索了一下，发现其实是可以改的！步骤也很简单，有图有真相： 先在网页上登陆MSN，在网页右上角点击用户用户名，然后在弹出菜单中选择“账户”： 在下一个页面就看到真相了，在账户ID后面点更改就可以修改账户名称了： 最后一张图，输入你新的ID就可以了，然后去邮箱验证一下就OK了！ 您可能感兴趣的：暂无相关日志]]></description>
			<content:encoded><![CDATA[<p>觉得以前的邮箱太长，于是又重新注册了一个新的，因为之前的各种账号都是用之前的那个邮箱注册的，所以换邮箱确实是一个比较浩大的工程，到目前为止基本上把一些网站的账号迁移过来了，今天想着把MSN的ID也换成现在的邮箱。在网上搜了一下，好像一致的结论都是MSN的ID不能改，除非重新注册一个。实在不想用以前的邮箱作为账号了，又不想重新注册一个，毕竟那么多好友在里面，于是抱着试试看的心态在MSN的网站上摸索了一下，发现其实是可以改的！步骤也很简单，有图有真相：</p>
<p>先在网页上登陆MSN，在网页右上角点击用户用户名，然后在弹出菜单中选择“账户”：</p>
<p><a href="http://www.maxhis.info/wp-content/uploads/2012/02/msn1.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="msn1" border="0" alt="msn1" src="http://www.maxhis.info/wp-content/uploads/2012/02/msn1_thumb.jpg" width="212" height="341" /></a></p>
<p>在下一个页面就看到真相了，在账户ID后面点更改就可以修改账户名称了：</p>
<p><a href="http://www.maxhis.info/wp-content/uploads/2012/02/msn2.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="msn2" border="0" alt="msn2" src="http://www.maxhis.info/wp-content/uploads/2012/02/msn2_thumb.jpg" width="637" height="289" /></a></p>
<p>最后一张图，输入你新的ID就可以了，然后去邮箱验证一下就OK了！</p>
<p><a href="http://www.maxhis.info/wp-content/uploads/2012/02/msn3.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="msn3" border="0" alt="msn3" src="http://www.maxhis.info/wp-content/uploads/2012/02/msn3_thumb.jpg" width="656" height="390" /></a></p>
<h3  class="related_post_title">您可能感兴趣的：</h3><ul class="related_post"><li>暂无相关日志</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.maxhis.info/archives/678/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android中的&#8220;再按一次返回键退出程序&#8221;实现</title>
		<link>http://www.maxhis.info/archives/669</link>
		<comments>http://www.maxhis.info/archives/669#comments</comments>
		<pubDate>Sun, 08 Jan 2012 06:02:21 +0000</pubDate>
		<dc:creator>iStar</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[退出提示]]></category>

		<guid isPermaLink="false">http://www.maxhis.info/?p=669</guid>
		<description><![CDATA[用户退出应用前给出一个提示是很有必要的，因为可能是用户并不真的想退出，而只是一不小心按下了返回键，大部分应用的做法是在应用退出去前给出一个Dialog，我觉得这样不太友好，用户还得移动手指去按dialog中的按钮。个人觉得“再按一次返回键退出程序”是best practice，实现也很简单，直接上代码： private long exitTime = 0; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK &#38;&#38; event.getAction() == KeyEvent.ACTION_DOWN){ if((System.currentTimeMillis()-exitTime) &#62; 2000){ Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { finish(); System.exit(0); } return true; } return super.onKeyDown(keyCode, event); } 您可能感兴趣的：Android envsetup简记 (0)用单例实现的HttpClient (0)Android设定应用不能移动到SD卡 (0)给Android应用开发者的十个建议 (0)Android中对Google Calendar的操作示例 (6)生日提醒1.3版 (2)人人网的OAuth认证Android下的实现（非SDK方式） (7)让Service在手机休眠后仍然运行 (5)在Android应用中调用系统图标 [...]]]></description>
			<content:encoded><![CDATA[<p>用户退出应用前给出一个提示是很有必要的，因为可能是用户并不真的想退出，而只是一不小心按下了返回键，大部分应用的做法是在应用退出去前给出一个Dialog，我觉得这样不太友好，用户还得移动手指去按dialog中的按钮。个人觉得“再按一次返回键退出程序”是best practice，实现也很简单，直接上代码：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:3f81c9d2-066a-42a5-bc96-ca10989ac5df" class="wlWriterEditableSmartContent">
<pre name="code" class="java">private long exitTime = 0;

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
	if(keyCode == KeyEvent.KEYCODE_BACK
			&amp;&amp; event.getAction() == KeyEvent.ACTION_DOWN){
	    if((System.currentTimeMillis()-exitTime) &gt; 2000){
	        Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
	        exitTime = System.currentTimeMillis();
		} else {
			finish();
			System.exit(0);
		}
	    return true;
    }
	return super.onKeyDown(keyCode, event);
}</pre>
</div>
<h3  class="related_post_title">您可能感兴趣的：</h3><ul class="related_post"><li><a href="http://www.maxhis.info/archives/704" title="Android envsetup简记">Android envsetup简记</a> (0)</li><li><a href="http://www.maxhis.info/archives/699" title="用单例实现的HttpClient">用单例实现的HttpClient</a> (0)</li><li><a href="http://www.maxhis.info/archives/683" title="Android设定应用不能移动到SD卡">Android设定应用不能移动到SD卡</a> (0)</li><li><a href="http://www.maxhis.info/archives/652" title="给Android应用开发者的十个建议">给Android应用开发者的十个建议</a> (0)</li><li><a href="http://www.maxhis.info/archives/634" title="Android中对Google Calendar的操作示例">Android中对Google Calendar的操作示例</a> (6)</li><li><a href="http://www.maxhis.info/archives/632" title="生日提醒1.3版">生日提醒1.3版</a> (2)</li><li><a href="http://www.maxhis.info/archives/609" title="人人网的OAuth认证Android下的实现（非SDK方式）">人人网的OAuth认证Android下的实现（非SDK方式）</a> (7)</li><li><a href="http://www.maxhis.info/archives/565" title="让Service在手机休眠后仍然运行">让Service在手机休眠后仍然运行</a> (5)</li><li><a href="http://www.maxhis.info/archives/559" title="在Android应用中调用系统图标">在Android应用中调用系统图标</a> (0)</li><li><a href="http://www.maxhis.info/archives/558" title="防止ListView滚动时背景变黑">防止ListView滚动时背景变黑</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.maxhis.info/archives/669/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

