吴小龙同學
2015-02-07T06:55:40+00:00
http://wuxiaolong.me
吴小龙同學
1413129987@qq.com
Android下Context、Activity、Application之间有什么区别
2015-01-13T00:00:00+00:00
http://wuxiaolong.me/android/2015/01/13/Context-Activity
<p>在开发Android程序的时候,我们经常要跟Context、Activity、Application这三个类打交道,那么这个三个类之间有什么联系和区别呢?</p>
<p>首先Activity和Application都是Context的子类。Context从字面上理解就是上下文的意思,在实际应用中它也确实是起到了管理上下文环境中各个参数和变量的总用,方便我们可以简单的访问到各种资源。虽然Activity和Application都是Context的子类,但是他们维护的生命周期不一样。前者维护一个Acitivity的生命周期,所以其对应的Context也只能访问该activity内的各种资源。后者则是维护一个Application的证明周期。</p>
不花钱上谷歌
2015-01-12T00:00:00+00:00
http://wuxiaolong.me/life/2015/01/12/google
<blockquote>
<p>不会谷歌的程序猿不是好的程序猿!</p>
</blockquote>
<p><img src="http://wuxiaolong.qiniudn.com/2015-01-12-google.png" alt="">
在大天朝,上谷歌竟成了一项"技能",当然花钱另说,我当然不会花钱啦,之前goagent翻墙已经不好谷歌了,现在的方案是更改HOSTS(C:\Windows\System32\drivers\etc),复制以下Hosts文件替换即可:</p>
<p><a href="http://pan.baidu.com/s/1o63Hqrg">http://pan.baidu.com/s/1o63Hqrg</a></p>
<p>如果此HOSTS不好用,请留言告知,我将及时更新,祝大家工作愉快,生活愉快!</p>
企业通
2014-12-30T00:00:00+00:00
http://wuxiaolong.me/life/2014/12/30/company
<blockquote>
<p>灵感源于生活,进而反馈生活。</p>
</blockquote>
<p>前段时间坐公交突然一个想法,咱们公司不是人数很多,除了本部门人认识,其他部门基本不认识,也没交集,能不能有款App把大家连起来,于是有了“企业通”。企业通针对企业,便于企业内部交流。</p>
<h2 id="(一)前提">(一)前提</h2>
<p>该企业开放程度较高,员工可以言论自由</p>
<h2 id="(二)模块划分">(二)模块划分</h2>
<ul>
<li>最新公告</li>
</ul>
<p>发布公司重大信息</p>
<ul>
<li>部门论坛</li>
</ul>
<p>根据各个公司,细分各部门板块,各部门的人在相应的部门发帖吐槽等,看其他部门帖子可以评论</p>
<ul>
<li>通讯录</li>
</ul>
<p>列出公司所有人,可以查看相应的介绍,聊天</p>
<h2 id="(三)盈利模式">(三)盈利模式</h2>
<p>买给其他企业,只需要更改服务器地址就能配置成他们公司企业通</p>
Swift小知识库
2014-12-29T00:00:00+00:00
http://wuxiaolong.me/swift/2014/12/29/swift
<blockquote>
<p>自学Swift,太艰难,这里记录我学习的遇到的问题及一些小知识点,方便日过查看。</p>
</blockquote>
<h2 id="1、uilabel的多行显示">1、UILabel的多行显示</h2>
<p>在label的frame中设好宽度,高度设为0或任何值。设置numberOfLines为0, 就会自适应折行。</p>
<div class="highlight"><pre><code class="language-js" data-lang="js"><span class="nx">label</span><span class="p">.</span><span class="nx">numberOfLines</span> <span class="o">=</span> <span class="mi">0</span>
<span class="nx">label</span><span class="p">.</span><span class="nx">text</span> <span class="o">=</span> <span class="nx">p</span>
<span class="nx">label</span><span class="p">.</span><span class="nx">font</span> <span class="o">=</span> <span class="nx">font</span>
<span class="nx">label</span><span class="p">.</span><span class="nx">sizeToFit</span><span class="p">()</span><span class="c1">//即自适应高度</span>
</code></pre></div>
<h2 id="2、《the-swift-programming-language》中文版">2、《The Swift Programming Language》中文版</h2>
<p><a href="http://numbbbbb.gitbooks.io/-the-swift-programming-language-/content/">http://numbbbbb.gitbooks.io/-the-swift-programming-language-/content/</a></p>
<p><a href="http://www.cocoachina.com/special/swift/">cocoachina Swfit专题</a></p>
ios6模拟器
2014-12-29T00:00:00+00:00
http://wuxiaolong.me/swift/2014/12/29/ios6-simulator
<p>众所周知,以前ios模拟器就像一个真实的机器一样,有显示屏,有外框,有home键。但是升级xcode后,用更高版本的模拟器,home键没有了!</p>
<p>其实不是home键没有了,是电脑显示器的问题,如果使用ios高清设备,在电脑上连100%的模拟器屏幕都显示不全,更不用说哪来空间显示home键了(换到高分辨率的显示器上 home就有了)。</p>
<p>如果想要使用home键,就只能通过快捷键来操作了:commamd+shift+h;连续两次就是双击可以清除应用;另外可以通过command+1、2、3来切换模拟器的缩放比例,以上分别代表100%,75%,50%; command + 左/右,切换横竖屏。</p>
Android小知识库
2014-12-29T00:00:00+00:00
http://wuxiaolong.me/android/2014/12/29/Android
<blockquote>
<p>工作近三年,也积累了不少东西,我有一个自己的小知识库,它记录我实际开发中遇到的问题及一些小知识点,一直未分享,今天这里分享出来。</p>
</blockquote>
<h2 id="目录"><a name="index"/>目录</h2>
<ul>
<li><a href="#125">125、getTag()</a></li>
<li><a href="#124">124、让某个Activity透明</a></li>
<li><a href="#123">123、将String写入txt格式存存储卡</a></li>
<li><a href="#122">122、Android Home键监听</a></li>
<li><a href="#121">121、ProgressDialog</a></li>
<li><a href="#120">120、ListView点击item标示消失</a></li>
<li><a href="#119">119、拨号盘拨打电话</a></li>
<li><a href="#118">118、毫秒</a></li>
<li><a href="#117">117、Drawable/Bitmap、String/InputStream、Bitmap/byte[]互转</a></li>
<li><a href="#116">116、应用WebView加载html和本地图片资源</a></li>
<li><a href="#115">115、android 代码设置drawableleft</a></li>
<li><a href="#114">114、Json解析</a></li>
</ul>
<p><a name="125"/></p>
<h2 id="125、gettag()">125、getTag()</h2>
<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="n">publicvoid</span> <span class="nf">onClick</span><span class="o">(</span><span class="n">View</span> <span class="n">v</span><span class="o">)</span> <span class="o">{</span>
<span class="o">((</span><span class="n">Button</span><span class="o">)</span><span class="n">v</span><span class="o">).</span><span class="na">getText</span><span class="o">().</span><span class="na">toString</span><span class="o">();</span>
<span class="n">v</span><span class="o">.</span><span class="na">getTag</span><span class="o">().</span><span class="na">toString</span><span class="o">()</span>
<span class="o">}</span>
</code></pre></div>
<p><a name="124"/></p>
<h2 id="124、让某个activity透明">124、让某个Activity透明</h2>
<p>res/values文件夹下建立styles.xml:</p>
<div class="highlight"><pre><code class="language-js" data-lang="js"><span class="o"><?</span><span class="nx">xml</span> <span class="nx">version</span><span class="o">=</span><span class="err">“</span><span class="mf">1.0</span><span class="err">″</span> <span class="nx">encoding</span><span class="o">=</span><span class="err">“</span><span class="nx">utf</span><span class="o">-</span><span class="mi">8</span><span class="err">″</span><span class="o">?></span>
<span class="o"><</span><span class="nx">RESOURCES</span><span class="o">></span>
<span class="o"><</span><span class="nx">STYLE</span> <span class="nx">name</span><span class="o">=</span><span class="err">“</span><span class="nx">translucent</span><span class="err">”</span><span class="o">></span>
<span class="o"><</span><span class="nx">item</span> <span class="nx">name</span><span class="o">=</span><span class="err">“</span><span class="nx">android</span><span class="o">:</span><span class="nx">windowBackground</span><span class="err">”</span><span class="o">></span><span class="err">@</span><span class="nx">color</span><span class="o">/</span><span class="nx">translucent_background</span><span class="o"><</span><span class="err">/item> </span>
<span class="o"><</span><span class="nx">item</span> <span class="nx">name</span><span class="o">=</span><span class="err">“</span><span class="nx">android</span><span class="o">:</span><span class="nx">windowIsTranslucent</span><span class="err">”</span><span class="o">></span><span class="kc">true</span><span class="o"><</span><span class="err">/item> </span>
<span class="o"><</span><span class="nx">item</span> <span class="nx">name</span><span class="o">=</span><span class="err">“</span><span class="nx">android</span><span class="o">:</span><span class="nx">windowAnimationStyle</span><span class="err">”</span><span class="o">></span><span class="err">@</span><span class="nx">android</span><span class="o">:</span><span class="nx">style</span><span class="o">/</span><span class="nx">Animation</span><span class="p">.</span><span class="nx">Translucent</span><span class="o"><</span><span class="err">/item> </span>
<span class="o"><</span><span class="err">/STYLE> </span>
<span class="o"><</span><span class="err">/RESOURCES> </span>
</code></pre></div>
<p>在该文件夹下在创建文件colors.xml</p>
<div class="highlight"><pre><code class="language-js" data-lang="js"><span class="o"><?</span><span class="nx">xml</span> <span class="nx">version</span><span class="o">=</span><span class="err">“</span><span class="mf">1.0</span><span class="err">″</span> <span class="nx">encoding</span><span class="o">=</span><span class="err">“</span><span class="nx">UTF</span><span class="o">-</span><span class="mi">8</span><span class="err">″</span><span class="o">?></span>
<span class="o"><</span><span class="nx">RESOURCES</span><span class="o">></span>
<span class="o"><</span><span class="nx">COLOR</span> <span class="nx">name</span><span class="o">=</span><span class="err">“</span><span class="nx">translucent_background</span><span class="err">”</span><span class="o">></span><span class="err">#</span><span class="mi">60000000</span><span class="o"><</span><span class="err">/COLOR> </span>
<span class="o"><</span><span class="err">/RESOURCES> </span>
</code></pre></div>
<p>AndroidManifest.xml中找到要弹出的activity,加入theme:
android:theme=”@style/translucent”</p>
<p>现在activity透明,但是里面的button不透明.如果让他们也透明或者半透明,就设置窗口属性.</p>
<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="n">Window</span> <span class="n">window</span><span class="o">=</span><span class="n">getWindow</span><span class="o">();</span>
<span class="n">WindowManager</span><span class="o">.</span><span class="na">LayoutParams</span> <span class="n">wl</span> <span class="o">=</span> <span class="n">window</span><span class="o">.</span><span class="na">getAttributes</span><span class="o">();</span>
<span class="n">wl</span><span class="o">.</span><span class="na">flags</span><span class="o">=</span><span class="n">WindowManager</span><span class="o">.</span><span class="na">LayoutParams</span><span class="o">.</span><span class="na">FLAG_KEEP_SCREEN_ON</span><span class="o">;</span>
<span class="n">wl</span><span class="o">.</span><span class="na">alpha</span><span class="o">=</span><span class="mf">0.6f</span><span class="o">;</span> <span class="c1">//这句就是设置窗口里崆件的透明度的.0.0全透明.1.0不透明.</span>
<span class="n">window</span><span class="o">.</span><span class="na">setAttributes</span><span class="o">(</span><span class="n">wl</span><span class="o">);</span>
</code></pre></div>
<p><a name="123"/></p>
<h2 id="123、将string写入txt格式存存储卡">123、将String写入txt格式存存储卡</h2>
<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="o"><!--</span> <span class="n">sd卡</span> <span class="o">--></span>
<span class="o"><</span><span class="n">uses</span><span class="o">-</span><span class="nl">permissionandroid:</span><span class="n">name</span><span class="o">=</span><span class="s">"android.permission.WRITE_EXTERNAL_STORAGE"</span><span class="o">/></span>
<span class="cm">/**</span>
<span class="cm"> * 将String写入存储卡</span>
<span class="cm"> * </span>
<span class="cm"> * @param person</span>
<span class="cm"> * @throws FileNotFoundException</span>
<span class="cm"> */</span>
<span class="n">privatevoid</span> <span class="nf">writeJSONObjectToSdCard</span><span class="o">(</span><span class="n">String</span> <span class="n">person</span><span class="o">)</span> <span class="o">{</span>
<span class="n">File</span> <span class="n">file</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">File</span><span class="o">(</span><span class="n">Environment</span><span class="o">.</span><span class="na">getExternalStorageDirectory</span><span class="o">()</span>
<span class="o">+</span> <span class="n">File</span><span class="o">.</span><span class="na">separator</span> <span class="o">+</span> <span class="s">"json"</span> <span class="o">+</span> <span class="n">File</span><span class="o">.</span><span class="na">separator</span> <span class="o">+</span> <span class="s">"json.txt"</span><span class="o">);</span>
<span class="c1">// 文件夹不存在的话,就创建文件夹</span>
<span class="k">if</span> <span class="o">(!</span><span class="n">file</span><span class="o">.</span><span class="na">getParentFile</span><span class="o">().</span><span class="na">exists</span><span class="o">())</span> <span class="o">{</span>
<span class="n">file</span><span class="o">.</span><span class="na">getParentFile</span><span class="o">().</span><span class="na">mkdirs</span><span class="o">();</span>
<span class="o">}</span>
<span class="c1">// 写入内存卡</span>
<span class="n">PrintStream</span> <span class="n">outputStream</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">try</span> <span class="o">{</span>
<span class="n">outputStream</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">PrintStream</span><span class="o">(</span><span class="k">new</span> <span class="nf">FileOutputStream</span><span class="o">(</span><span class="n">file</span><span class="o">));</span>
<span class="n">outputStream</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="n">person</span><span class="o">.</span><span class="na">toString</span><span class="o">());</span>
<span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">FileNotFoundException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
<span class="n">e</span><span class="o">.</span><span class="na">printStackTrace</span><span class="o">();</span>
<span class="o">}</span> <span class="k">finally</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="n">outputStream</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="n">outputStream</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
</code></pre></div>
<p><a name="122"/></p>
<h2 id="122、android-home键监听">122、Android Home键监听</h2>
<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="cm">/**</span>
<span class="cm"> * Home键监听封装</span>
<span class="cm"> * </span>
<span class="cm"> * @author way</span>
<span class="cm"> * </span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="kd">class</span> <span class="nc">HomeWatcher</span> <span class="o">{</span>
<span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">TAG</span> <span class="o">=</span> <span class="s">"wxl"</span><span class="o">;</span>
<span class="kd">private</span> <span class="n">Context</span> <span class="n">mContext</span><span class="o">;</span>
<span class="kd">private</span> <span class="n">IntentFilter</span> <span class="n">mFilter</span><span class="o">;</span>
<span class="kd">private</span> <span class="n">OnHomePressedListener</span> <span class="n">mListener</span><span class="o">;</span>
<span class="kd">private</span> <span class="n">InnerRecevier</span> <span class="n">mRecevier</span><span class="o">;</span>
<span class="c1">// 回调接口</span>
<span class="kd">public</span> <span class="kd">interface</span> <span class="nc">OnHomePressedListener</span> <span class="o">{</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onHomePressed</span><span class="o">();</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onHomeLongPressed</span><span class="o">();</span>
<span class="o">}</span>
<span class="kd">public</span> <span class="nf">HomeWatcher</span><span class="o">(</span><span class="n">Context</span> <span class="n">context</span><span class="o">)</span> <span class="o">{</span>
<span class="n">mContext</span> <span class="o">=</span> <span class="n">context</span><span class="o">;</span>
<span class="n">mFilter</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">IntentFilter</span><span class="o">(</span><span class="n">Intent</span><span class="o">.</span><span class="na">ACTION_CLOSE_SYSTEM_DIALOGS</span><span class="o">);</span>
<span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * 设置监听</span>
<span class="cm"> * </span>
<span class="cm"> * @param listener</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">setOnHomePressedListener</span><span class="o">(</span><span class="n">OnHomePressedListener</span> <span class="n">listener</span><span class="o">)</span> <span class="o">{</span>
<span class="n">mListener</span> <span class="o">=</span> <span class="n">listener</span><span class="o">;</span>
<span class="n">mRecevier</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">InnerRecevier</span><span class="o">();</span>
<span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * 开始监听,注册广播</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">startWatch</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="n">mRecevier</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="n">mContext</span><span class="o">.</span><span class="na">registerReceiver</span><span class="o">(</span><span class="n">mRecevier</span><span class="o">,</span> <span class="n">mFilter</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * 停止监听,注销广播</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">stopWatch</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="n">mRecevier</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="n">mContext</span><span class="o">.</span><span class="na">unregisterReceiver</span><span class="o">(</span><span class="n">mRecevier</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * 广播接收者</span>
<span class="cm"> */</span>
<span class="kd">class</span> <span class="nc">InnerRecevier</span> <span class="kd">extends</span> <span class="n">BroadcastReceiver</span> <span class="o">{</span>
<span class="kd">final</span> <span class="n">String</span> <span class="n">SYSTEM_DIALOG_REASON_KEY</span> <span class="o">=</span> <span class="s">"reason"</span><span class="o">;</span>
<span class="kd">final</span> <span class="n">String</span> <span class="n">SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS</span> <span class="o">=</span> <span class="s">"globalactions"</span><span class="o">;</span>
<span class="kd">final</span> <span class="n">String</span> <span class="n">SYSTEM_DIALOG_REASON_RECENT_APPS</span> <span class="o">=</span> <span class="s">"recentapps"</span><span class="o">;</span>
<span class="kd">final</span> <span class="n">String</span> <span class="n">SYSTEM_DIALOG_REASON_HOME_KEY</span> <span class="o">=</span> <span class="s">"homekey"</span><span class="o">;</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onReceive</span><span class="o">(</span><span class="n">Context</span> <span class="n">context</span><span class="o">,</span> <span class="n">Intent</span> <span class="n">intent</span><span class="o">)</span> <span class="o">{</span>
<span class="n">String</span> <span class="n">action</span> <span class="o">=</span> <span class="n">intent</span><span class="o">.</span><span class="na">getAction</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="n">action</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="n">Intent</span><span class="o">.</span><span class="na">ACTION_CLOSE_SYSTEM_DIALOGS</span><span class="o">))</span> <span class="o">{</span>
<span class="n">String</span> <span class="n">reason</span> <span class="o">=</span> <span class="n">intent</span><span class="o">.</span><span class="na">getStringExtra</span><span class="o">(</span><span class="n">SYSTEM_DIALOG_REASON_KEY</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="n">reason</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="n">Log</span><span class="o">.</span><span class="na">e</span><span class="o">(</span><span class="n">TAG</span><span class="o">,</span> <span class="s">"action:"</span> <span class="o">+</span> <span class="n">action</span> <span class="o">+</span> <span class="s">",reason:"</span> <span class="o">+</span> <span class="n">reason</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="n">mListener</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="n">reason</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="n">SYSTEM_DIALOG_REASON_HOME_KEY</span><span class="o">))</span> <span class="o">{</span>
<span class="c1">// 短按home键</span>
<span class="n">mListener</span><span class="o">.</span><span class="na">onHomePressed</span><span class="o">();</span>
<span class="o">}</span> <span class="k">else</span> <span class="nf">if</span> <span class="o">(</span><span class="n">reason</span>
<span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="n">SYSTEM_DIALOG_REASON_RECENT_APPS</span><span class="o">))</span> <span class="o">{</span>
<span class="c1">// 长按home键</span>
<span class="n">mListener</span><span class="o">.</span><span class="na">onHomeLongPressed</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="n">调用</span><span class="err">:</span>
<span class="kd">class</span> <span class="nc">MainActivity</span> <span class="kd">extends</span> <span class="n">Activity</span> <span class="o">{</span>
<span class="kd">private</span> <span class="n">ListView</span> <span class="n">listView</span><span class="o">;</span>
<span class="kt">int</span> <span class="n">mPosition</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span>
<span class="n">ArrayAdapter</span> <span class="n">arrayAdapter</span><span class="o">;</span>
<span class="n">List</span><span class="o"><</span><span class="n">String</span><span class="o">></span> <span class="n">dataList</span><span class="o">;</span>
<span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">TAG</span> <span class="o">=</span> <span class="s">"wxl"</span><span class="o">;</span>
<span class="kd">private</span> <span class="n">HomeWatcher</span> <span class="n">mHomeWatcher</span><span class="o">;</span>
<span class="nd">@Override</span>
<span class="kd">protected</span> <span class="kt">void</span> <span class="nf">onCreate</span><span class="o">(</span><span class="n">Bundle</span> <span class="n">savedInstanceState</span><span class="o">)</span> <span class="o">{</span>
<span class="kd">super</span><span class="o">.</span><span class="na">onCreate</span><span class="o">(</span><span class="n">savedInstanceState</span><span class="o">);</span>
<span class="n">setContentView</span><span class="o">(</span><span class="n">R</span><span class="o">.</span><span class="na">layout</span><span class="o">.</span><span class="na">activity_main</span><span class="o">);</span>
<span class="n">mHomeWatcher</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">HomeWatcher</span><span class="o">(</span><span class="k">this</span><span class="o">);</span>
<span class="n">mHomeWatcher</span><span class="o">.</span><span class="na">setOnHomePressedListener</span><span class="o">(</span><span class="k">new</span> <span class="nf">OnHomePressedListener</span><span class="o">()</span> <span class="o">{</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onHomePressed</span><span class="o">()</span> <span class="o">{</span>
<span class="n">Log</span><span class="o">.</span><span class="na">e</span><span class="o">(</span><span class="n">TAG</span><span class="o">,</span> <span class="s">"onHomePressed"</span><span class="o">);</span>
<span class="o">}</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onHomeLongPressed</span><span class="o">()</span> <span class="o">{</span>
<span class="n">Log</span><span class="o">.</span><span class="na">e</span><span class="o">(</span><span class="n">TAG</span><span class="o">,</span> <span class="s">"onHomeLongPressed"</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">});</span>
<span class="n">mHomeWatcher</span><span class="o">.</span><span class="na">startWatch</span><span class="o">();</span>
<span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * 重新进入或打开屏幕灯</span>
<span class="cm"> */</span>
<span class="kd">protected</span> <span class="kt">void</span> <span class="nf">onRestart</span><span class="o">()</span> <span class="o">{</span>
<span class="n">Log</span><span class="o">.</span><span class="na">d</span><span class="o">(</span><span class="s">"wxl"</span><span class="o">,</span> <span class="s">"onRestart"</span><span class="o">);</span>
<span class="n">mHomeWatcher</span><span class="o">.</span><span class="na">startWatch</span><span class="o">();</span>
<span class="kd">super</span><span class="o">.</span><span class="na">onRestart</span><span class="o">();</span>
<span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * 按Home键或关闭屏幕灯</span>
<span class="cm"> */</span>
<span class="kd">protected</span> <span class="kt">void</span> <span class="nf">onPause</span><span class="o">()</span> <span class="o">{</span>
<span class="kd">super</span><span class="o">.</span><span class="na">onPause</span><span class="o">();</span>
<span class="n">Log</span><span class="o">.</span><span class="na">d</span><span class="o">(</span><span class="s">"wxl"</span><span class="o">,</span> <span class="s">"onPause"</span><span class="o">);</span>
<span class="n">mHomeWatcher</span><span class="o">.</span><span class="na">stopWatch</span><span class="o">();</span><span class="c1">// 在onPause中停止监听,不然会报错的。</span>
<span class="o">}</span>
<span class="kd">private</span> <span class="n">List</span><span class="o"><</span><span class="n">String</span><span class="o">></span> <span class="nf">getData</span><span class="o">()</span> <span class="o">{</span>
<span class="c1">// Log.d("wxl", "getData=" + "getData");</span>
<span class="n">List</span><span class="o"><</span><span class="n">String</span><span class="o">></span> <span class="n">data</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ArrayList</span><span class="o"><</span><span class="n">String</span><span class="o">>();</span>
<span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o"><</span> <span class="mi">20</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="n">data</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="s">"测试数据"</span> <span class="o">+</span> <span class="n">i</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">return</span> <span class="n">data</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
</code></pre></div>
<p><a name="121"/></p>
<h1 id="121、progressdialog">121、ProgressDialog</h1>
<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="kd">final</span> <span class="n">ProgressDialog</span> <span class="n">progress</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">ProgressDialog</span><span class="o">(</span><span class="n">LoginActivity</span><span class="o">.</span><span class="na">this</span><span class="o">);</span>
<span class="n">progress</span><span class="o">.</span><span class="na">setMessage</span><span class="o">(</span><span class="s">"请稍等..."</span><span class="o">);</span>
<span class="n">progress</span><span class="o">.</span><span class="na">setCanceledOnTouchOutside</span><span class="o">(</span><span class="kc">false</span><span class="o">);</span>
<span class="n">progress</span><span class="o">.</span><span class="na">show</span><span class="o">();</span>
<span class="n">progress</span><span class="o">.</span><span class="na">dismiss</span><span class="o">();</span>
</code></pre></div>
<p><a name="120"/></p>
<h2 id="120、listview点击item标示消失">120、ListView点击item标示消失</h2>
<ul>
<li><p>DataAdapter
```java
Intent intent = new Intent(activity, ChatActivity.class);
intent.putExtra("user<u>head", doctorList.get(position)
.getHeadImg());
intent.putExtra("user</u>name", doctorList.get(position)
.getName());
intent.putExtra("userId", doctorList.get(position)
.getUserinfo_djid());
intent.putExtra("position", position);
startActivityForResult(intent,</p>
<div class="highlight"><pre><code class="language-text" data-lang="text"> AppConfig.REQUEST_CODE_DIALOGUE);
</code></pre></div></li>
<li><p>ChatActivity.class</p></li>
</ul>
<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="kd">public</span> <span class="kt">void</span> <span class="nf">onBackPressed</span><span class="o">()</span> <span class="o">{</span>
<span class="n">Intent</span> <span class="n">intent</span><span class="o">;</span>
<span class="n">intent</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Intent</span><span class="o">();</span>
<span class="n">Bundle</span> <span class="n">bundle</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Bundle</span><span class="o">();</span>
<span class="n">bundle</span><span class="o">.</span><span class="na">putInt</span><span class="o">(</span><span class="s">"position"</span><span class="o">,</span> <span class="n">position</span><span class="o">);</span>
<span class="n">intent</span><span class="o">.</span><span class="na">putExtras</span><span class="o">(</span><span class="n">bundle</span><span class="o">);</span>
<span class="n">setResult</span><span class="o">(</span><span class="n">RESULT_OK</span><span class="o">,</span> <span class="n">intent</span><span class="o">);</span>
<span class="n">finish</span><span class="o">();</span>
<span class="o">}</span>
</code></pre></div>
<ul>
<li>onActivityResult</li>
</ul>
<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="kd">public</span> <span class="kt">void</span> <span class="nf">onActivityResult</span><span class="o">(</span><span class="kt">int</span> <span class="n">requestCode</span><span class="o">,</span> <span class="kt">int</span> <span class="n">resultCode</span><span class="o">,</span> <span class="n">Intent</span> <span class="n">data</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="n">requestCode</span> <span class="o">==</span> <span class="n">AppConfig</span><span class="o">.</span><span class="na">REQUEST_CODE_DIALOGUE</span>
<span class="o">&&</span> <span class="n">resultCode</span> <span class="o">==</span> <span class="n">RESULT_OK</span><span class="o">)</span> <span class="o">{</span>
<span class="kt">int</span> <span class="n">position</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="na">getExtras</span><span class="o">().</span><span class="na">getInt</span><span class="o">(</span><span class="s">"position"</span><span class="o">);</span>
<span class="n">Object</span> <span class="n">object</span> <span class="o">=</span> <span class="n">dataAdapter</span><span class="o">.</span><span class="na">getItem</span><span class="o">(</span><span class="n">position</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="n">object</span> <span class="k">instanceof</span> <span class="n">DoctorList</span><span class="o">)</span> <span class="o">{</span>
<span class="n">DoctorList</span> <span class="n">doctorList</span> <span class="o">=</span> <span class="o">(</span><span class="n">DoctorList</span><span class="o">)</span> <span class="n">object</span><span class="o">;</span>
<span class="n">doctorList</span><span class="o">.</span><span class="na">setUnreadnum</span><span class="o">(</span><span class="s">"0"</span><span class="o">);</span>
<span class="n">dataAdapter</span><span class="o">.</span><span class="na">notifyDataSetChanged</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="kd">super</span><span class="o">.</span><span class="na">onActivityResult</span><span class="o">(</span><span class="n">requestCode</span><span class="o">,</span> <span class="n">resultCode</span><span class="o">,</span> <span class="n">data</span><span class="o">);</span>
<span class="o">}</span>
</code></pre></div>
<ul>
<li>DoctorList</li>
</ul>
<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="kd">class</span> <span class="nc">DialogueBean</span> <span class="o">{</span>
<span class="kd">private</span> <span class="n">String</span> <span class="n">result</span><span class="o">;</span>
<span class="kd">private</span> <span class="n">ArrayList</span><span class="o"><</span><span class="n">DoctorList</span><span class="o">></span> <span class="n">doctorList</span><span class="o">;</span>
<span class="kd">public</span> <span class="kd">class</span> <span class="nc">DoctorList</span> <span class="kd">implements</span> <span class="n">Serializable</span> <span class="o">{</span>
<span class="kd">private</span> <span class="n">String</span> <span class="n">userinfo_djid</span><span class="o">;</span>
<span class="kd">private</span> <span class="n">String</span> <span class="n">headImg</span><span class="o">;</span>
<span class="kd">private</span> <span class="n">String</span> <span class="n">name</span><span class="o">;</span>
<span class="kd">private</span> <span class="n">String</span> <span class="n">unreadnum</span><span class="o">;</span>
<span class="kd">private</span> <span class="n">String</span> <span class="n">infoContent</span><span class="o">;</span>
<span class="kd">private</span> <span class="n">String</span> <span class="n">sendDate</span><span class="o">;</span>
<span class="kd">private</span> <span class="n">String</span> <span class="n">ky_flag</span><span class="o">;</span>
<span class="kd">private</span> <span class="n">String</span> <span class="n">tobewritten</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
</code></pre></div>
<p><a name="119"></p>
<h1 id="119、拨号盘拨打电话">119、拨号盘拨打电话</h1>
<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="n">Intent</span> <span class="n">intent</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Intent</span><span class="o">(</span><span class="n">Intent</span><span class="o">.</span><span class="na">ACTION_CALL</span><span class="o">,</span>
<span class="n">Uri</span><span class="o">.</span><span class="na">parse</span><span class="o">(</span><span class="s">"tel:"</span> <span class="o">+</span> <span class="s">"400-036-1977"</span><span class="o">));</span>
<span class="c1">// intent.setAction(Intent.ACTION_CALL);// 直接拨号</span>
<span class="n">intent</span><span class="o">.</span><span class="na">setAction</span><span class="o">(</span><span class="n">Intent</span><span class="o">.</span><span class="na">ACTION_DIAL</span><span class="o">);</span><span class="c1">// 拨号盘</span>
<span class="n">startActivity</span><span class="o">(</span><span class="n">intent</span><span class="o">);</span>
</code></pre></div>
<p><a name="118"></p>
<h2 id="118、毫秒">118、毫秒</h2>
<p>毫秒Calendar.getInstance().getTimeInMillis()和System.currentTimeMillis()</p>
<p><a name="117"></p>
<h2 id="117、drawable/bitmap、string/inputstream、bitmap/byte[]互转">117、Drawable/Bitmap、String/InputStream、Bitmap/byte[]互转</h2>
<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="o">(</span><span class="mi">1</span><span class="o">)</span><span class="n">Drawable互转Bitmap</span>
<span class="n">Drawable转Bitmap</span>
<span class="n">Resources</span> <span class="n">res</span> <span class="o">=</span> <span class="n">getResources</span><span class="o">();</span>
<span class="n">Drawable</span> <span class="n">drawable</span> <span class="o">=</span> <span class="n">res</span><span class="o">.</span><span class="na">getDrawable</span><span class="o">(</span><span class="n">R</span><span class="o">.</span><span class="na">drawable</span><span class="o">.</span><span class="na">myimage</span><span class="o">);</span>
<span class="n">BitmapDrawable</span> <span class="n">bd</span> <span class="o">=</span> <span class="o">(</span><span class="n">BitmapDrawable</span><span class="o">)</span> <span class="n">d</span><span class="o">;</span>
<span class="n">Bitmap</span> <span class="n">bm</span> <span class="o">=</span> <span class="n">bd</span><span class="o">.</span><span class="na">getBitmap</span><span class="o">();</span>
<span class="n">Bitmap转Drawable</span>
<span class="n">Bitmap</span> <span class="n">bm</span><span class="o">=</span><span class="n">xxx</span><span class="o">;</span> <span class="c1">//xxx根据你的情况获取</span>
<span class="n">BitmapDrawable</span> <span class="n">bd</span><span class="o">=</span><span class="n">BitmapDrawable</span><span class="o">(</span><span class="n">bm</span><span class="o">);</span>
<span class="n">BtimapDrawable是Drawable的子类</span><span class="err">,</span><span class="n">最终直接使用bd对象即可</span><span class="err">。</span>
<span class="n">mPicPath</span><span class="c1">//本地图片路径转成Bitmap格式</span>
<span class="n">Bitmap</span> <span class="n">pic</span> <span class="o">=</span> <span class="n">BitmapFactory</span><span class="o">.</span><span class="na">decodeFile</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="na">mPicPath</span><span class="o">);</span>
<span class="n">image</span><span class="o">.</span><span class="na">setImageBitmap</span><span class="o">(</span><span class="n">pic</span><span class="o">);</span>
<span class="n">转成Bitmap格式</span>
<span class="o">(</span><span class="mi">2</span><span class="o">)</span><span class="n">String与InputStream相互转换</span>
<span class="n">String</span> <span class="n">to</span> <span class="n">InputStream</span>
<span class="n">String</span> <span class="n">str</span> <span class="o">=</span> <span class="s">"String与InputStream相互转换"</span><span class="o">;</span>
<span class="n">InputStream</span> <span class="n">in_nocode</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">ByteArrayInputStream</span><span class="o">(</span><span class="n">str</span><span class="o">.</span><span class="na">getBytes</span><span class="o">());</span>
<span class="n">InputStream</span> <span class="n">in_withcode</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">ByteArrayInputStream</span><span class="o">(</span><span class="n">str</span><span class="o">.</span><span class="na">getBytes</span><span class="o">(</span><span class="s">"UTF-8"</span><span class="o">));</span>
<span class="n">InputStream</span> <span class="n">to</span> <span class="n">String</span>
<span class="n">这里提供几个方法</span><span class="err">。</span>
<span class="n">方法1</span><span class="err">:</span>
<span class="kd">public</span> <span class="n">String</span> <span class="nf">convertStreamToString</span><span class="o">(</span><span class="n">InputStream</span> <span class="n">is</span><span class="o">)</span> <span class="o">{</span>
<span class="n">BufferedReader</span> <span class="n">reader</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">BufferedReader</span><span class="o">(</span><span class="k">new</span> <span class="nf">InputStreamReader</span><span class="o">(</span><span class="n">is</span><span class="o">));</span>
<span class="n">StringBuilder</span> <span class="n">sb</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">StringBuilder</span><span class="o">();</span>
<span class="n">String</span> <span class="n">line</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">try</span> <span class="o">{</span>
<span class="k">while</span> <span class="o">((</span><span class="n">line</span> <span class="o">=</span> <span class="n">reader</span><span class="o">.</span><span class="na">readLine</span><span class="o">())</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="n">sb</span><span class="o">.</span><span class="na">append</span><span class="o">(</span><span class="n">line</span> <span class="o">+</span> <span class="s">"/n"</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">IOException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
<span class="n">e</span><span class="o">.</span><span class="na">printStackTrace</span><span class="o">();</span>
<span class="o">}</span> <span class="k">finally</span> <span class="o">{</span>
<span class="k">try</span> <span class="o">{</span>
<span class="n">is</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
<span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">IOException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
<span class="n">e</span><span class="o">.</span><span class="na">printStackTrace</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">return</span> <span class="n">sb</span><span class="o">.</span><span class="na">toString</span><span class="o">();</span>
<span class="o">}</span>
<span class="n">方法2</span><span class="err">:</span>
<span class="kd">public</span> <span class="n">String</span> <span class="nf">inputStream2String</span> <span class="o">(</span><span class="n">InputStream</span> <span class="n">in</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
<span class="n">StringBuffer</span> <span class="n">out</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">StringBuffer</span><span class="o">();</span>
<span class="kt">byte</span><span class="o">[]</span> <span class="n">b</span> <span class="o">=</span> <span class="k">new</span> <span class="kt">byte</span><span class="o">[</span><span class="mi">4096</span><span class="o">];</span>
<span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">n</span><span class="o">;</span> <span class="o">(</span><span class="n">n</span> <span class="o">=</span> <span class="n">in</span><span class="o">.</span><span class="na">read</span><span class="o">(</span><span class="n">b</span><span class="o">))</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="o">;)</span> <span class="o">{</span>
<span class="n">out</span><span class="o">.</span><span class="na">append</span><span class="o">(</span><span class="k">new</span> <span class="nf">String</span><span class="o">(</span><span class="n">b</span><span class="o">,</span> <span class="mi">0</span><span class="o">,</span> <span class="n">n</span><span class="o">));</span>
<span class="o">}</span>
<span class="k">return</span> <span class="n">out</span><span class="o">.</span><span class="na">toString</span><span class="o">();</span>
<span class="o">}</span>
<span class="n">方法3</span><span class="err">:</span>
<span class="kd">public</span> <span class="kd">static</span> <span class="n">String</span> <span class="nf">inputStream2String</span><span class="o">(</span><span class="n">InputStream</span> <span class="n">is</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span><span class="o">{</span>
<span class="n">ByteArrayOutputStream</span> <span class="n">baos</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">ByteArrayOutputStream</span><span class="o">();</span>
<span class="kt">int</span> <span class="n">i</span><span class="o">=-</span><span class="mi">1</span><span class="o">;</span>
<span class="k">while</span><span class="o">((</span><span class="n">i</span><span class="o">=</span><span class="n">is</span><span class="o">.</span><span class="na">read</span><span class="o">())!=-</span><span class="mi">1</span><span class="o">){</span>
<span class="n">baos</span><span class="o">.</span><span class="na">write</span><span class="o">(</span><span class="n">i</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">return</span> <span class="n">baos</span><span class="o">.</span><span class="na">toString</span><span class="o">();</span>
<span class="o">}</span>
<span class="n">Drawable</span> <span class="err">→</span> <span class="n">Bitmap</span>
<span class="n">Drawable</span> <span class="err">→</span> <span class="n">Bitmap</span>
<span class="kd">public</span> <span class="kd">static</span> <span class="n">Bitmap</span> <span class="nf">drawableToBitmap</span><span class="o">(</span><span class="n">Drawable</span> <span class="n">drawable</span><span class="o">)</span> <span class="o">{</span>
<span class="n">Bitmap</span> <span class="n">bitmap</span> <span class="o">=</span> <span class="n">Bitmap</span><span class="o">.</span><span class="na">createBitmap</span><span class="o">(</span>
<span class="n">drawable</span><span class="o">.</span><span class="na">getIntrinsicWidth</span><span class="o">(),</span>
<span class="n">drawable</span><span class="o">.</span><span class="na">getIntrinsicHeight</span><span class="o">(),</span>
<span class="n">drawable</span><span class="o">.</span><span class="na">getOpacity</span><span class="o">()</span> <span class="o">!=</span> <span class="n">PixelFormat</span><span class="o">.</span><span class="na">OPAQUE</span> <span class="o">?</span> <span class="n">Bitmap</span><span class="o">.</span><span class="na">Config</span><span class="o">.</span><span class="na">ARGB_8888</span>
<span class="o">:</span> <span class="n">Bitmap</span><span class="o">.</span><span class="na">Config</span><span class="o">.</span><span class="na">RGB_565</span><span class="o">);</span>
<span class="n">Canvas</span> <span class="n">canvas</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Canvas</span><span class="o">(</span><span class="n">bitmap</span><span class="o">);</span>
<span class="c1">//canvas.setBitmap(bitmap);</span>
<span class="n">drawable</span><span class="o">.</span><span class="na">setBounds</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="mi">0</span><span class="o">,</span> <span class="n">drawable</span><span class="o">.</span><span class="na">getIntrinsicWidth</span><span class="o">(),</span> <span class="n">drawable</span><span class="o">.</span><span class="na">getIntrinsicHeight</span><span class="o">());</span>
<span class="n">drawable</span><span class="o">.</span><span class="na">draw</span><span class="o">(</span><span class="n">canvas</span><span class="o">);</span>
<span class="k">return</span> <span class="n">bitmap</span><span class="o">;</span>
<span class="o">}</span>
<span class="mi">2</span><span class="err">、</span><span class="n">从资源中获取Bitmap</span>
<span class="n">Resources</span> <span class="n">res</span><span class="o">=</span><span class="n">getResources</span><span class="o">();</span>
<span class="n">Bitmap</span> <span class="n">bmp</span><span class="o">=</span><span class="n">BitmapFactory</span><span class="o">.</span><span class="na">decodeResource</span><span class="o">(</span><span class="n">res</span><span class="o">,</span> <span class="n">R</span><span class="o">.</span><span class="na">drawable</span><span class="o">.</span><span class="na">pic</span><span class="o">);</span>
<span class="n">Bitmap</span> <span class="err">→</span> <span class="kt">byte</span><span class="o">[]</span>
<span class="mi">3</span><span class="err">、</span><span class="n">Bitmap</span> <span class="err">→</span> <span class="kt">byte</span><span class="o">[]</span>
<span class="kd">private</span> <span class="kt">byte</span><span class="o">[]</span> <span class="nf">Bitmap2Bytes</span><span class="o">(</span><span class="n">Bitmap</span> <span class="n">bm</span><span class="o">){</span>
<span class="n">ByteArrayOutputStream</span> <span class="n">baos</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">ByteArrayOutputStream</span><span class="o">();</span>
<span class="n">bm</span><span class="o">.</span><span class="na">compress</span><span class="o">(</span><span class="n">Bitmap</span><span class="o">.</span><span class="na">CompressFormat</span><span class="o">.</span><span class="na">PNG</span><span class="o">,</span> <span class="mi">100</span><span class="o">,</span> <span class="n">baos</span><span class="o">);</span>
<span class="k">return</span> <span class="n">baos</span><span class="o">.</span><span class="na">toByteArray</span><span class="o">();</span> <span class="o">}</span>
<span class="mi">4</span><span class="err">、</span> <span class="kt">byte</span><span class="o">[]</span> <span class="err">→</span> <span class="n">Bitmap</span>
<span class="kd">private</span> <span class="n">Bitmap</span> <span class="nf">Bytes2Bimap</span><span class="o">(</span><span class="kt">byte</span><span class="o">[]</span> <span class="n">b</span><span class="o">){</span>
<span class="k">if</span><span class="o">(</span><span class="n">b</span><span class="o">.</span><span class="na">length</span><span class="o">!=</span><span class="mi">0</span><span class="o">){</span>
<span class="k">return</span> <span class="n">BitmapFactory</span><span class="o">.</span><span class="na">decodeByteArray</span><span class="o">(</span><span class="n">b</span><span class="o">,</span> <span class="mi">0</span><span class="o">,</span> <span class="n">b</span><span class="o">.</span><span class="na">length</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
</code></pre></div>
<p><a name="116"></p>
<h2 id="116、应用webview加载html和本地图片资源">116、应用WebView加载html和本地图片资源</h2>
<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="n">WebSettings</span> <span class="n">webSettings</span> <span class="o">=</span> <span class="n">mWebView</span><span class="o">.</span><span class="na">getSettings</span><span class="o">();</span>
<span class="n">webSettings</span><span class="o">.</span><span class="na">setJavaScriptEnabled</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="n">下边是实现这个功能的源代码</span><span class="err">:</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">loadHTML</span><span class="o">()</span> <span class="o">{</span>
<span class="kd">final</span> <span class="n">String</span> <span class="n">mimeType</span> <span class="o">=</span> <span class="s">"text/html"</span><span class="o">;</span>
<span class="kd">final</span> <span class="n">String</span> <span class="n">encoding</span> <span class="o">=</span> <span class="s">"utf-8"</span><span class="o">;</span>
<span class="kd">final</span> <span class="n">String</span> <span class="n">html</span> <span class="o">=</span> <span class="s">"<h1>Header</h1><p>Custom HTML</p></span>
<span class="s"><p><img src=\"file:///android_asset/image1.jpg\" /></span>
<span class="s"></p>"</span><span class="o">;</span>
<span class="n">WebView</span> <span class="n">wv</span> <span class="o">=</span> <span class="o">(</span><span class="n">WebView</span><span class="o">)</span> <span class="n">findViewById</span><span class="o">(</span><span class="n">R</span><span class="o">.</span><span class="na">id</span><span class="o">.</span><span class="na">wv1</span><span class="o">);</span>
<span class="n">wv</span><span class="o">.</span><span class="na">loadDataWithBaseURL</span><span class="o">(</span><span class="s">"fake://not/needed"</span><span class="o">,</span> <span class="n">html</span><span class="o">,</span>
<span class="n">mimeType</span><span class="o">,</span> <span class="n">encoding</span><span class="o">,</span> <span class="s">""</span><span class="o">);</span>
<span class="o">}</span>
<span class="c1">//wView.loadUrl("file:///android_asset/index.html");</span>
<span class="o">-----</span><span class="n">打开本包内asset目录下的index</span><span class="o">.</span><span class="na">html文件</span>
<span class="c1">//wView.loadUrl("content://com.android.htmlfileprovider/sdcard/index.html");</span>
<span class="o">-----</span><span class="n">打开本地sd卡内的index</span><span class="o">.</span><span class="na">html文件</span>
<span class="c1">//wView.loadUrl("http://wap.baidu.com");</span>
<span class="o">-----</span><span class="n">打开指定URL的html文件</span> <span class="o">......</span>
<span class="n">webView</span><span class="o">.</span><span class="na">setInitialScale</span><span class="o">(</span><span class="mi">30</span><span class="o">);</span> <span class="c1">//这个就是重点,你可以在这里根据需求来设置缩放比例</span>
<span class="o"><</span><span class="n">activity</span>
<span class="nl">android:</span><span class="n">name</span><span class="o">=</span><span class="s">"com.xiaomolong.ufosay.ui.SearchResultActvity"</span>
<span class="nl">android:</span><span class="n">hardwareAccelerated</span><span class="o">=</span><span class="s">"true"</span>
<span class="nl">android:</span><span class="n">label</span><span class="o">=</span><span class="s">"@string/search_result"</span>
<span class="nl">android:</span><span class="n">screenOrientation</span><span class="o">=</span><span class="s">"portrait"</span> <span class="o">></span>
<span class="o"><</span><span class="n">intent</span><span class="o">-</span><span class="n">filter</span><span class="o">></span>
<span class="o"><</span><span class="n">action</span> <span class="nl">android:</span><span class="n">name</span><span class="o">=</span><span class="s">"android.intent.action.SEARCH"</span> <span class="o">/></span>
<span class="o"></</span><span class="n">intent</span><span class="o">-</span><span class="n">filter</span><span class="o">></span>
<span class="o"><</span><span class="n">meta</span><span class="o">-</span><span class="n">data</span>
<span class="nl">android:</span><span class="n">name</span><span class="o">=</span><span class="s">"android.app.searchable"</span>
<span class="nl">android:</span><span class="n">resource</span><span class="o">=</span><span class="s">"@xml/searchable"</span> <span class="o">/></span>
<span class="o"></</span><span class="n">activity</span><span class="o">></span>
<span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">onCreateOptionsMenu</span><span class="o">(</span><span class="n">Menu</span> <span class="n">menu</span><span class="o">)</span> <span class="o">{</span>
<span class="n">MenuInflater</span> <span class="n">inflater</span> <span class="o">=</span> <span class="n">getMenuInflater</span><span class="o">();</span>
<span class="n">inflater</span><span class="o">.</span><span class="na">inflate</span><span class="o">(</span><span class="n">R</span><span class="o">.</span><span class="na">menu</span><span class="o">.</span><span class="na">activity_main</span><span class="o">,</span> <span class="n">menu</span><span class="o">);</span>
<span class="n">SearchView</span> <span class="n">searchView</span> <span class="o">=</span> <span class="o">(</span><span class="n">SearchView</span><span class="o">)</span> <span class="n">menu</span><span class="o">.</span><span class="na">findItem</span><span class="o">(</span><span class="n">R</span><span class="o">.</span><span class="na">id</span><span class="o">.</span><span class="na">action_search</span><span class="o">)</span>
<span class="o">.</span><span class="na">getActionView</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="n">searchView</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="n">Log</span><span class="o">.</span><span class="na">e</span><span class="o">(</span><span class="s">"wxl"</span><span class="o">,</span> <span class="s">"Fail to get Search View."</span><span class="o">);</span>
<span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="n">searchView</span><span class="o">.</span><span class="na">setIconifiedByDefault</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span> <span class="c1">// 缺省值就是true,可能不专门进行设置,false和true的效果图如下,true的输入框更大</span>
<span class="c1">// 获取搜索服务管理器</span>
<span class="n">SearchManager</span> <span class="n">searchManager</span> <span class="o">=</span> <span class="o">(</span><span class="n">SearchManager</span><span class="o">)</span> <span class="n">getSystemService</span><span class="o">(</span><span class="n">Context</span><span class="o">.</span><span class="na">SEARCH_SERVICE</span><span class="o">);</span>
<span class="c1">// searchable activity的component name,由此系统可通过intent进行唤起</span>
<span class="n">ComponentName</span> <span class="n">cn</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">ComponentName</span><span class="o">(</span><span class="k">this</span><span class="o">,</span> <span class="n">SearchResultActvity</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
<span class="c1">// 通过搜索管理器,从searchable</span>
<span class="c1">// activity中获取相关搜索信息,就是searchable的xml设置。如果返回null,表示该activity不存在,或者不是searchable</span>
<span class="n">SearchableInfo</span> <span class="n">info</span> <span class="o">=</span> <span class="n">searchManager</span><span class="o">.</span><span class="na">getSearchableInfo</span><span class="o">(</span><span class="n">cn</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="n">info</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="n">Log</span><span class="o">.</span><span class="na">e</span><span class="o">(</span><span class="s">"wxl"</span><span class="o">,</span> <span class="s">"Fail to get search info."</span><span class="o">);</span>
<span class="o">}</span>
<span class="c1">// 将searchable activity的搜索信息与search view关联</span>
<span class="n">searchView</span><span class="o">.</span><span class="na">setSearchableInfo</span><span class="o">(</span><span class="n">info</span><span class="o">);</span>
<span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="o"><?</span><span class="n">xml</span> <span class="n">version</span><span class="o">=</span><span class="s">"1.0"</span> <span class="n">encoding</span><span class="o">=</span><span class="s">"utf-8"</span><span class="o">?></span>
<span class="o"><</span><span class="n">searchable</span> <span class="nl">xmlns:</span><span class="n">android</span><span class="o">=</span><span class="s">"http://schemas.android.com/apk/res/android"</span>
<span class="nl">android:</span><span class="n">hint</span><span class="o">=</span><span class="s">"@string/search_hint"</span>
<span class="nl">android:</span><span class="n">label</span><span class="o">=</span><span class="s">"@string/search_result"</span> <span class="o">/></span>
<span class="o"><!--</span> <span class="n">wei</span><span class="err">:</span><span class="nl">必须包含android:</span><span class="n">label</span><span class="err">,</span><span class="n">一般与app或activity的label相同</span><span class="err">,</span><span class="n">但不一样也不影响效果</span> <span class="o">--></span>
<span class="o"><!--</span> <span class="n">wei</span><span class="err">:</span><span class="n">一般建议提供hint</span><span class="err">,</span><span class="n">作为输入框的提示</span> <span class="o">--></span>
<span class="o"><</span><span class="n">item</span>
<span class="nl">android:</span><span class="n">id</span><span class="o">=</span><span class="s">"@+id/action_search"</span>
<span class="nl">android:</span><span class="n">actionViewClass</span><span class="o">=</span><span class="s">"android.widget.SearchView"</span>
<span class="nl">android:</span><span class="n">icon</span><span class="o">=</span><span class="s">"@drawable/ic_action_search"</span>
<span class="nl">android:</span><span class="n">showAsAction</span><span class="o">=</span><span class="s">"ifRoom|withText"</span>
<span class="nl">android:</span><span class="n">title</span><span class="o">=</span><span class="s">"action_websearch"</span><span class="o">/></span>
<span class="kd">public</span> <span class="kd">class</span> <span class="nc">SearchResultActvity</span> <span class="kd">extends</span> <span class="n">Activity</span> <span class="o">{</span>
<span class="kd">private</span> <span class="n">WebView</span> <span class="n">mWebview</span><span class="o">;</span>
<span class="kd">private</span> <span class="n">String</span> <span class="n">searchResult</span> <span class="o">=</span> <span class="s">""</span><span class="o">;</span>
<span class="nd">@Override</span>
<span class="kd">protected</span> <span class="kt">void</span> <span class="nf">onCreate</span><span class="o">(</span><span class="n">Bundle</span> <span class="n">savedInstanceState</span><span class="o">)</span> <span class="o">{</span>
<span class="kd">super</span><span class="o">.</span><span class="na">onCreate</span><span class="o">(</span><span class="n">savedInstanceState</span><span class="o">);</span>
<span class="n">setContentView</span><span class="o">(</span><span class="n">R</span><span class="o">.</span><span class="na">layout</span><span class="o">.</span><span class="na">search_result</span><span class="o">);</span>
<span class="c1">// … …</span>
<span class="n">doSearchQuery</span><span class="o">(</span><span class="n">getIntent</span><span class="o">());</span>
<span class="n">initView</span><span class="o">();</span>
<span class="o">}</span>
<span class="nd">@Override</span>
<span class="kd">protected</span> <span class="kt">void</span> <span class="nf">onNewIntent</span><span class="o">(</span><span class="n">Intent</span> <span class="n">intent</span><span class="o">)</span> <span class="o">{</span> <span class="c1">// activity重新置顶</span>
<span class="kd">super</span><span class="o">.</span><span class="na">onNewIntent</span><span class="o">(</span><span class="n">intent</span><span class="o">);</span>
<span class="n">doSearchQuery</span><span class="o">(</span><span class="n">intent</span><span class="o">);</span>
<span class="o">}</span>
<span class="c1">// 对searchable activity的调用仍是标准的intent,我们可以从intent中获取信息,即要搜索的内容</span>
<span class="kd">private</span> <span class="kt">void</span> <span class="nf">doSearchQuery</span><span class="o">(</span><span class="n">Intent</span> <span class="n">intent</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="n">intent</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span>
<span class="k">return</span><span class="o">;</span>
<span class="n">String</span> <span class="n">queryAction</span> <span class="o">=</span> <span class="n">intent</span><span class="o">.</span><span class="na">getAction</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="n">Intent</span><span class="o">.</span><span class="na">ACTION_SEARCH</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="n">intent</span><span class="o">.</span><span class="na">getAction</span><span class="o">()))</span> <span class="o">{</span> <span class="c1">// 如果是通过ACTION_SEARCH来调用,即如果通过搜索调用</span>
<span class="n">searchResult</span> <span class="o">=</span> <span class="n">intent</span><span class="o">.</span><span class="na">getStringExtra</span><span class="o">(</span><span class="n">SearchManager</span><span class="o">.</span><span class="na">QUERY</span><span class="o">);</span> <span class="c1">// 获取搜索内容</span>
<span class="c1">// … …</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="kd">private</span> <span class="kt">void</span> <span class="nf">initView</span><span class="o">()</span> <span class="o">{</span>
<span class="n">mWebview</span> <span class="o">=</span> <span class="o">(</span><span class="n">WebView</span><span class="o">)</span> <span class="n">findViewById</span><span class="o">(</span><span class="n">R</span><span class="o">.</span><span class="na">id</span><span class="o">.</span><span class="na">mWebview</span><span class="o">);</span>
<span class="n">WebSettings</span> <span class="n">webSettings</span> <span class="o">=</span> <span class="n">mWebview</span><span class="o">.</span><span class="na">getSettings</span><span class="o">();</span>
<span class="n">webSettings</span><span class="o">.</span><span class="na">setUseWideViewPort</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="n">webSettings</span><span class="o">.</span><span class="na">setLoadWithOverviewMode</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="n">webSettings</span><span class="o">.</span><span class="na">setJavaScriptEnabled</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="n">webSettings</span><span class="o">.</span><span class="na">setPluginState</span><span class="o">(</span><span class="n">PluginState</span><span class="o">.</span><span class="na">ON</span><span class="o">);</span>
<span class="n">webSettings</span><span class="o">.</span><span class="na">setBuiltInZoomControls</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="n">webSettings</span><span class="o">.</span><span class="na">setDisplayZoomControls</span><span class="o">(</span><span class="kc">false</span><span class="o">);</span>
<span class="n">mWebview</span><span class="o">.</span><span class="na">setDownloadListener</span><span class="o">(</span><span class="k">new</span> <span class="nf">MyWebViewDownLoadListener</span><span class="o">());</span>
<span class="n">mWebview</span><span class="o">.</span><span class="na">setScrollBarStyle</span><span class="o">(</span><span class="n">View</span><span class="o">.</span><span class="na">SCROLLBARS_OUTSIDE_OVERLAY</span><span class="o">);</span>
<span class="n">mWebview</span><span class="o">.</span><span class="na">setWebChromeClient</span><span class="o">(</span><span class="k">new</span> <span class="nf">WebChromeClient</span><span class="o">());</span>
<span class="c1">// Log.d("wxl", "url=" + setUrl());</span>
<span class="n">mWebview</span><span class="o">.</span><span class="na">loadUrl</span><span class="o">(</span><span class="n">setUrl</span><span class="o">());</span>
<span class="n">mWebview</span><span class="o">.</span><span class="na">setWebViewClient</span><span class="o">(</span><span class="k">new</span> <span class="nf">MyWebViewClient</span><span class="o">());</span>
<span class="o">}</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onPause</span><span class="o">()</span> <span class="o">{</span><span class="c1">// 继承自Activity</span>
<span class="kd">super</span><span class="o">.</span><span class="na">onPause</span><span class="o">();</span>
<span class="n">mWebview</span><span class="o">.</span><span class="na">onPause</span><span class="o">();</span>
<span class="o">}</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onResume</span><span class="o">()</span> <span class="o">{</span><span class="c1">// 继承自Activity</span>
<span class="kd">super</span><span class="o">.</span><span class="na">onResume</span><span class="o">();</span>
<span class="n">mWebview</span><span class="o">.</span><span class="na">onResume</span><span class="o">();</span>
<span class="o">}</span>
<span class="kd">private</span> <span class="n">String</span> <span class="nf">setUrl</span><span class="o">()</span> <span class="o">{</span>
<span class="n">String</span> <span class="n">url</span> <span class="o">=</span> <span class="s">""</span><span class="o">;</span>
<span class="n">StringBuffer</span> <span class="n">stringBuffer</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">StringBuffer</span><span class="o">();</span>
<span class="n">stringBuffer</span><span class="o">.</span><span class="na">append</span><span class="o">(</span><span class="s">"http://www.soku.com/m/y/video?q="</span><span class="o">);</span>
<span class="k">try</span> <span class="o">{</span>
<span class="n">stringBuffer</span><span class="o">.</span><span class="na">append</span><span class="o">(</span><span class="n">URLEncoder</span><span class="o">.</span><span class="na">encode</span><span class="o">(</span><span class="n">searchResult</span><span class="o">,</span> <span class="s">"utf-8"</span><span class="o">));</span>
<span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">UnsupportedEncodingException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
<span class="n">e</span><span class="o">.</span><span class="na">printStackTrace</span><span class="o">();</span>
<span class="o">}</span>
<span class="n">url</span> <span class="o">=</span> <span class="n">stringBuffer</span><span class="o">.</span><span class="na">toString</span><span class="o">();</span>
<span class="k">return</span> <span class="n">url</span><span class="o">;</span>
<span class="o">}</span>
<span class="c1">// 文件的下载</span>
<span class="kd">private</span> <span class="kd">class</span> <span class="nc">MyWebViewDownLoadListener</span> <span class="kd">implements</span> <span class="n">DownloadListener</span> <span class="o">{</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onDownloadStart</span><span class="o">(</span><span class="n">String</span> <span class="n">url</span><span class="o">,</span> <span class="n">String</span> <span class="n">userAgent</span><span class="o">,</span>
<span class="n">String</span> <span class="n">contentDisposition</span><span class="o">,</span> <span class="n">String</span> <span class="n">mimetype</span><span class="o">,</span> <span class="kt">long</span> <span class="n">contentLength</span><span class="o">)</span> <span class="o">{</span>
<span class="n">Uri</span> <span class="n">uri</span> <span class="o">=</span> <span class="n">Uri</span><span class="o">.</span><span class="na">parse</span><span class="o">(</span><span class="n">url</span><span class="o">);</span>
<span class="n">Intent</span> <span class="n">intent</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Intent</span><span class="o">(</span><span class="n">Intent</span><span class="o">.</span><span class="na">ACTION_VIEW</span><span class="o">,</span> <span class="n">uri</span><span class="o">);</span>
<span class="n">startActivity</span><span class="o">(</span><span class="n">intent</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="kd">class</span> <span class="nc">MyWebViewClient</span> <span class="kd">extends</span> <span class="n">WebViewClient</span> <span class="o">{</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onReceivedError</span><span class="o">(</span><span class="n">WebView</span> <span class="n">view</span><span class="o">,</span> <span class="kt">int</span> <span class="n">errorCode</span><span class="o">,</span>
<span class="n">String</span> <span class="n">description</span><span class="o">,</span> <span class="n">String</span> <span class="n">failingUrl</span><span class="o">)</span> <span class="o">{</span>
<span class="n">mWebview</span><span class="o">.</span><span class="na">setVisibility</span><span class="o">(</span><span class="n">View</span><span class="o">.</span><span class="na">GONE</span><span class="o">);</span>
<span class="n">Log</span><span class="o">.</span><span class="na">i</span><span class="o">(</span><span class="s">"wxl"</span><span class="o">,</span> <span class="s">"onReceivedError"</span><span class="o">);</span>
<span class="c1">// Toast.makeText(SearchResultActvity.this, "网络不给力",</span>
<span class="c1">// Toast.LENGTH_LONG)</span>
<span class="c1">// .show();</span>
<span class="kd">super</span><span class="o">.</span><span class="na">onReceivedError</span><span class="o">(</span><span class="n">view</span><span class="o">,</span> <span class="n">errorCode</span><span class="o">,</span> <span class="n">description</span><span class="o">,</span> <span class="n">failingUrl</span><span class="o">);</span>
<span class="o">}</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onPageStarted</span><span class="o">(</span><span class="n">WebView</span> <span class="n">view</span><span class="o">,</span> <span class="n">String</span> <span class="n">url</span><span class="o">,</span> <span class="n">Bitmap</span> <span class="n">favicon</span><span class="o">)</span> <span class="o">{</span>
<span class="kd">super</span><span class="o">.</span><span class="na">onPageStarted</span><span class="o">(</span><span class="n">view</span><span class="o">,</span> <span class="n">url</span><span class="o">,</span> <span class="n">favicon</span><span class="o">);</span>
<span class="n">Log</span><span class="o">.</span><span class="na">i</span><span class="o">(</span><span class="s">"wxl"</span><span class="o">,</span> <span class="s">"onPageStarted url="</span> <span class="o">+</span> <span class="n">url</span><span class="o">);</span>
<span class="c1">// Toast.makeText(SearchResultActvity.this, "onPageStartedurl=" +</span>
<span class="c1">// url,</span>
<span class="c1">// Toast.LENGTH_LONG).show();</span>
<span class="o">}</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">shouldOverrideUrlLoading</span><span class="o">(</span><span class="n">WebView</span> <span class="n">view</span><span class="o">,</span> <span class="n">String</span> <span class="n">url</span><span class="o">)</span> <span class="o">{</span>
<span class="c1">// view.loadUrl(url);</span>
<span class="n">Log</span><span class="o">.</span><span class="na">i</span><span class="o">(</span><span class="s">"wxl"</span><span class="o">,</span> <span class="s">"shouldOverrideUrlLoading url="</span> <span class="o">+</span> <span class="n">url</span><span class="o">);</span>
<span class="c1">// Toast.makeText(SearchResultActvity.this,</span>
<span class="c1">// "shouldOverrideUrlLoading=" + url, Toast.LENGTH_LONG)</span>
<span class="c1">// .show();</span>
<span class="k">if</span> <span class="o">(</span><span class="n">url</span><span class="o">.</span><span class="na">contains</span><span class="o">(</span><span class="s">"http://v.youku.com/"</span><span class="o">))</span> <span class="o">{</span>
<span class="n">Intent</span> <span class="n">intent</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Intent</span><span class="o">();</span>
<span class="n">Bundle</span> <span class="n">bundle</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Bundle</span><span class="o">();</span>
<span class="n">bundle</span><span class="o">.</span><span class="na">putString</span><span class="o">(</span><span class="s">"url"</span><span class="o">,</span> <span class="n">url</span><span class="o">);</span>
<span class="n">bundle</span><span class="o">.</span><span class="na">putString</span><span class="o">(</span><span class="s">"title"</span><span class="o">,</span> <span class="s">""</span><span class="o">);</span>
<span class="n">intent</span><span class="o">.</span><span class="na">putExtras</span><span class="o">(</span><span class="n">bundle</span><span class="o">);</span>
<span class="n">intent</span><span class="o">.</span><span class="na">setClass</span><span class="o">(</span><span class="n">SearchResultActvity</span><span class="o">.</span><span class="na">this</span><span class="o">,</span> <span class="n">VideoActivity</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
<span class="n">startActivity</span><span class="o">(</span><span class="n">intent</span><span class="o">);</span>
<span class="n">overridePendingTransition</span><span class="o">(</span><span class="n">R</span><span class="o">.</span><span class="na">anim</span><span class="o">.</span><span class="na">enter_bottom_to_up</span><span class="o">,</span>
<span class="n">R</span><span class="o">.</span><span class="na">anim</span><span class="o">.</span><span class="na">exit</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">return</span> <span class="kd">super</span><span class="o">.</span><span class="na">shouldOverrideUrlLoading</span><span class="o">(</span><span class="n">view</span><span class="o">,</span> <span class="n">url</span><span class="o">);</span>
<span class="o">}</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onPageFinished</span><span class="o">(</span><span class="n">WebView</span> <span class="n">view</span><span class="o">,</span> <span class="n">String</span> <span class="n">url</span><span class="o">)</span> <span class="o">{</span>
<span class="c1">// progress.setVisibility(View.GONE);</span>
<span class="n">Log</span><span class="o">.</span><span class="na">i</span><span class="o">(</span><span class="s">"wxl"</span><span class="o">,</span> <span class="s">"onPageFinished url="</span> <span class="o">+</span> <span class="n">url</span><span class="o">);</span>
<span class="n">Toast</span><span class="o">.</span><span class="na">makeText</span><span class="o">(</span><span class="n">SearchResultActvity</span><span class="o">.</span><span class="na">this</span><span class="o">,</span> <span class="s">"onPageFinished="</span> <span class="o">+</span> <span class="n">url</span><span class="o">,</span>
<span class="n">Toast</span><span class="o">.</span><span class="na">LENGTH_LONG</span><span class="o">).</span><span class="na">show</span><span class="o">();</span>
<span class="kd">super</span><span class="o">.</span><span class="na">onPageFinished</span><span class="o">(</span><span class="n">view</span><span class="o">,</span> <span class="n">url</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">onKeyDown</span><span class="o">(</span><span class="kt">int</span> <span class="n">keyCode</span><span class="o">,</span> <span class="n">KeyEvent</span> <span class="n">event</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="n">mWebview</span><span class="o">.</span><span class="na">canGoBack</span><span class="o">()</span> <span class="o">&&</span> <span class="n">keyCode</span> <span class="o">==</span> <span class="n">KeyEvent</span><span class="o">.</span><span class="na">KEYCODE_BACK</span><span class="o">)</span> <span class="o">{</span>
<span class="n">mWebview</span><span class="o">.</span><span class="na">goBack</span><span class="o">();</span> <span class="c1">// goBack()表示返回webView的上一页面</span>
<span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">return</span> <span class="kd">super</span><span class="o">.</span><span class="na">onKeyDown</span><span class="o">(</span><span class="n">keyCode</span><span class="o">,</span> <span class="n">event</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
</code></pre></div>
<p><a name="115"></p>
<h2 id="115、android-代码设置drawableleft">115、android 代码设置drawableleft</h2>
<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="n">Android中有时需动态设置控件四周的drawble图片</span><span class="err">,</span><span class="n">这个时候就需要调用</span> <span class="nf">setCompoundDrawables</span><span class="o">(</span><span class="n">left</span><span class="o">,</span> <span class="n">top</span><span class="o">,</span> <span class="n">right</span><span class="o">,</span> <span class="n">bottom</span><span class="o">)</span><span class="err">,</span><span class="n">四个参数类型都是drawable</span>
<span class="n">Button继承TextView</span><span class="err">,</span><span class="n">所以可以采用相同的设置方法</span>
<span class="n">方法一</span><span class="o">.</span><span class="na">XML方式</span>
<span class="n">方法二</span><span class="o">.</span><span class="na">JAVA代码</span>
<span class="n">Drawable</span> <span class="n">img_on</span><span class="o">,</span> <span class="n">img_off</span><span class="o">;</span>
<span class="n">Resources</span> <span class="n">res</span> <span class="o">=</span> <span class="n">getResources</span><span class="o">();</span>
<span class="n">img_off</span> <span class="o">=</span> <span class="n">res</span><span class="o">.</span><span class="na">getDrawable</span><span class="o">(</span><span class="n">R</span><span class="o">.</span><span class="na">drawable</span><span class="o">.</span><span class="na">btn_strip_mark_off</span><span class="o">);</span>
<span class="c1">//调用setCompoundDrawables时,必须调用Drawable.setBounds()方法,否则图片不显示</span>
<span class="n">img_off</span><span class="o">.</span><span class="na">setBounds</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="mi">0</span><span class="o">,</span> <span class="n">img_off</span><span class="o">.</span><span class="na">getMinimumWidth</span><span class="o">(),</span> <span class="n">img_off</span><span class="o">.</span><span class="na">getMinimumHeight</span><span class="o">());</span>
<span class="n">btn</span><span class="o">.</span><span class="na">setCompoundDrawables</span><span class="o">(</span><span class="n">img_off</span><span class="o">,</span> <span class="kc">null</span><span class="o">,</span> <span class="kc">null</span><span class="o">,</span> <span class="kc">null</span><span class="o">);</span> <span class="c1">//设置左图标</span>
</code></pre></div>
<p><a name="114"></p>
<h2 id="114、json解析">114、Json解析</h2>
<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="err">(</span><span class="mi">1</span><span class="err">)、</span>
<span class="nl">http:</span><span class="c1">//v.youku.com/player/getPlayList/VideoIDS/XNzI3MzE2ODk2</span>
<span class="n">String</span> <span class="n">fileid</span><span class="o">;</span>
<span class="n">String</span> <span class="n">sid</span><span class="o">;</span>
<span class="n">String</span> <span class="n">p1</span><span class="o">,</span> <span class="n">p2</span><span class="o">;</span>
<span class="n">String</span> <span class="n">result</span> <span class="o">=</span> <span class="n">responseInfo</span><span class="o">.</span><span class="na">result</span><span class="o">;</span>
<span class="n">JSONObject</span> <span class="n">jsobj</span><span class="o">;</span>
<span class="n">String</span> <span class="n">mp4id</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="n">String</span> <span class="n">flvid</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="n">String</span> <span class="n">format</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="n">JSONObject</span> <span class="n">obj3</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">try</span> <span class="o">{</span>
<span class="n">jsobj</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">JSONObject</span><span class="o">(</span><span class="n">result</span><span class="o">);</span>
<span class="n">JSONArray</span> <span class="n">jsonarr</span> <span class="o">=</span> <span class="n">jsobj</span><span class="o">.</span><span class="na">getJSONArray</span><span class="o">(</span><span class="s">"data"</span><span class="o">);</span>
<span class="n">JSONObject</span> <span class="n">obj1</span> <span class="o">=</span> <span class="n">jsonarr</span><span class="o">.</span><span class="na">getJSONObject</span><span class="o">(</span><span class="mi">0</span><span class="o">);</span>
<span class="n">seed</span> <span class="o">=</span> <span class="n">obj1</span><span class="o">.</span><span class="na">getDouble</span><span class="o">(</span><span class="s">"seed"</span><span class="o">);</span>
<span class="n">JSONObject</span> <span class="n">obj2</span> <span class="o">=</span> <span class="n">obj1</span>
<span class="o">.</span><span class="na">getJSONObject</span><span class="o">(</span><span class="s">"streamfileids"</span><span class="o">);</span>
<span class="n">fileid</span> <span class="o">=</span> <span class="n">obj2</span><span class="o">.</span><span class="na">getString</span><span class="o">(</span><span class="s">"mp4"</span><span class="o">);</span>
<span class="n">obj3</span> <span class="o">=</span> <span class="n">obj1</span><span class="o">.</span><span class="na">getJSONObject</span><span class="o">(</span><span class="s">"segs"</span><span class="o">);</span>
<span class="n">JSONArray</span> <span class="n">mp4arr</span> <span class="o">=</span> <span class="n">obj3</span><span class="o">.</span><span class="na">getJSONArray</span><span class="o">(</span><span class="s">"mp4"</span><span class="o">);</span>
<span class="n">JSONObject</span> <span class="n">o</span> <span class="o">=</span> <span class="n">mp4arr</span><span class="o">.</span><span class="na">getJSONObject</span><span class="o">(</span><span class="mi">0</span><span class="o">);</span>
<span class="n">p2</span> <span class="o">=</span> <span class="n">o</span><span class="o">.</span><span class="na">getString</span><span class="o">(</span><span class="s">"k"</span><span class="o">);</span>
<span class="n">Log</span><span class="o">.</span><span class="na">d</span><span class="o">(</span><span class="s">"wxl"</span><span class="o">,</span> <span class="s">"size="</span> <span class="o">+</span> <span class="n">o</span><span class="o">.</span><span class="na">getString</span><span class="o">(</span><span class="s">"size"</span><span class="o">));</span>
<span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">JSONException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
<span class="n">e</span><span class="o">.</span><span class="na">printStackTrace</span><span class="o">();</span>
<span class="o">}</span>
<span class="err">(</span><span class="mi">2</span><span class="err">)、</span>
<span class="n">Gson</span> <span class="n">gson</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Gson</span><span class="o">();</span>
<span class="n">Person</span> <span class="n">person</span> <span class="o">=</span> <span class="n">gson</span><span class="o">.</span><span class="na">fromJson</span><span class="o">(</span><span class="n">json</span><span class="o">,</span> <span class="n">Person</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
<span class="err">(</span><span class="mi">3</span><span class="err">)、</span><span class="n">json</span> <span class="o">=</span> <span class="s">"[{\"name\":\"coolxing\", \"age\"=24, \"male\":true, \"address\":{\"street\":\"huiLongGuan\", \"city\":\"beijing\", \"country\":\"china\"}}, {\"name\":\"min\", \"age\"=20, \"male\":false, \"address\":{\"street\":\"heiShiJiao\", \"city\":\"daLian\", \"country\":\"china\"}}]"</span>
<span class="n">采用android内置的org</span><span class="o">.</span><span class="na">json包解析JSON数组</span><span class="o">.</span>
<span class="n">List</span><span class="o"><</span><span class="n">Person</span><span class="o">></span> <span class="n">persons</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ArrayList</span><span class="o"><</span><span class="n">Person</span><span class="o">>();</span>
<span class="n">JSONArray</span> <span class="n">jsonArray</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">JSONArray</span><span class="o">(</span><span class="n">json</span><span class="o">);</span>
<span class="k">for</span><span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">jsonArray</span><span class="o">.</span><span class="na">length</span><span class="o">();</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="n">JSONObject</span> <span class="n">jsonObject</span> <span class="o">=</span> <span class="n">jsonArray</span><span class="o">.</span><span class="na">getJSONObject</span><span class="o">(</span><span class="n">i</span><span class="o">);</span>
<span class="n">String</span> <span class="n">name</span> <span class="o">=</span> <span class="n">jsonObject</span><span class="o">.</span><span class="na">getString</span><span class="o">(</span><span class="s">"name"</span><span class="o">);</span>
<span class="kt">int</span> <span class="n">age</span> <span class="o">=</span> <span class="n">jsonObject</span><span class="o">.</span><span class="na">getInt</span><span class="o">(</span><span class="s">"age"</span><span class="o">);</span>
<span class="kt">boolean</span> <span class="n">male</span> <span class="o">=</span> <span class="n">jsonObject</span><span class="o">.</span><span class="na">getBoolean</span><span class="o">(</span><span class="s">"male"</span><span class="o">);</span>
<span class="n">JSONObject</span> <span class="n">addressJSON</span> <span class="o">=</span> <span class="n">jsonObject</span><span class="o">.</span><span class="na">getJSONObject</span><span class="o">(</span><span class="s">"address"</span><span class="o">);</span>
<span class="n">String</span> <span class="n">street</span> <span class="o">=</span> <span class="n">addressJSON</span><span class="o">.</span><span class="na">getString</span><span class="o">(</span><span class="s">"street"</span><span class="o">);</span>
<span class="n">String</span> <span class="n">city</span> <span class="o">=</span> <span class="n">addressJSON</span><span class="o">.</span><span class="na">getString</span><span class="o">(</span><span class="s">"city"</span><span class="o">);</span>
<span class="n">String</span> <span class="n">country</span> <span class="o">=</span> <span class="n">addressJSON</span><span class="o">.</span><span class="na">getString</span><span class="o">(</span><span class="s">"country"</span><span class="o">);</span>
<span class="n">Address</span> <span class="n">address</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Address</span><span class="o">(</span><span class="n">street</span><span class="o">,</span> <span class="n">city</span><span class="o">,</span> <span class="n">country</span><span class="o">);</span>
<span class="n">Person</span> <span class="n">person</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Person</span><span class="o">(</span><span class="n">name</span><span class="o">,</span> <span class="n">age</span><span class="o">,</span> <span class="n">male</span><span class="o">,</span> <span class="n">address</span><span class="o">);</span>
<span class="n">persons</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">person</span><span class="o">);</span>
<span class="o">}</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">persons</span><span class="o">);</span>
<span class="n">采用gson库解析JSON数组</span>
<span class="n">Gson</span> <span class="n">gson</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Gson</span><span class="o">();</span>
<span class="n">Type</span> <span class="n">listType</span> <span class="o">=</span> <span class="k">new</span> <span class="n">TypeToken</span><span class="o"><</span><span class="n">List</span><span class="o"><</span><span class="n">Person</span><span class="o">>>(){}.</span><span class="na">getType</span><span class="o">();</span>
<span class="n">List</span><span class="o"><</span><span class="n">Person</span><span class="o">></span> <span class="n">persons</span> <span class="o">=</span> <span class="n">gson</span><span class="o">.</span><span class="na">fromJson</span><span class="o">(</span><span class="n">json</span><span class="o">,</span> <span class="n">listType</span><span class="o">);</span>
<span class="o">(</span><span class="mi">4</span><span class="o">)</span> <span class="o">{</span><span class="s">"ret"</span><span class="o">:</span><span class="mi">0</span><span class="o">,</span><span class="s">"pay_token"</span><span class="o">:</span><span class="s">"014FEA19395DCC64C64A176A305E9624"</span><span class="o">,</span><span class="s">"pf"</span><span class="o">:</span><span class="s">"desktop_m_qq-10000144-android-2002-"</span><span class="o">,</span><span class="s">"query_authority_cost"</span><span class="o">:</span><span class="mi">265</span><span class="o">,</span><span class="s">"authority_cost"</span><span class="o">:</span><span class="mi">6066</span><span class="o">,</span><span class="s">"openid"</span><span class="o">:</span><span class="s">"0B494E1BAB8629C46F9AA760B3B7BA48"</span><span class="o">,</span><span class="s">"expires_in"</span><span class="o">:</span><span class="mi">7776000</span><span class="o">,</span><span class="s">"pfkey"</span><span class="o">:</span><span class="s">"53284a43a87afa13898ee13d28be9317"</span><span class="o">,</span><span class="s">"msg"</span><span class="o">:</span><span class="s">""</span><span class="o">,</span><span class="s">"access_token"</span><span class="o">:</span><span class="s">"13625DA4E43FF130B27D09A3B9AB975A"</span><span class="o">,</span><span class="s">"login_cost"</span><span class="o">:</span><span class="mi">928</span><span class="o">}</span>
<span class="n">JSONObject</span> <span class="n">jSONObject</span> <span class="o">=</span> <span class="o">(</span><span class="n">JSONObject</span><span class="o">)</span> <span class="n">response</span><span class="o">;</span>
<span class="k">try</span> <span class="o">{</span>
<span class="n">Log</span><span class="o">.</span><span class="na">d</span><span class="o">(</span><span class="s">"wxl"</span><span class="o">,</span> <span class="s">"openid="</span> <span class="o">+</span> <span class="n">jSONObject</span><span class="o">.</span><span class="na">getString</span><span class="o">(</span><span class="s">"openid"</span><span class="o">));</span>
<span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">JSONException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
<span class="c1">// TODO Auto-generated catch block</span>
<span class="n">e</span><span class="o">.</span><span class="na">printStackTrace</span><span class="o">();</span>
<span class="o">}</span>
</code></pre></div>
吴小龙同學-客戶端
2014-12-25T00:00:00+00:00
http://wuxiaolong.me/life/2014/12/25/mobile
<blockquote>
<p>好记忆不如烂笔头,随时记录自己所遇到的问题及疑惑。</p>
</blockquote>
<ul>
<li>安卓客戶端</li>
</ul>
<p><img src="http://wuxiaolong.qiniudn.com/WuXiaolong_qrcode.png" alt=""></p>
Actionbar之SearchView
2014-12-11T00:00:00+00:00
http://wuxiaolong.me/android/2014/12/11/SearchView
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="o"><</span><span class="nx">item</span>
<span class="nx">android</span><span class="o">:</span><span class="nx">id</span><span class="o">=</span><span class="s2">"@+id/menu_search"</span>
<span class="nx">android</span><span class="o">:</span><span class="nx">actionLayout</span><span class="o">=</span><span class="s2">"@layout/searchview"</span><span class="c1">//自定义</span>
<span class="nx">android</span><span class="o">:</span><span class="nx">icon</span><span class="o">=</span><span class="s2">"@drawable/ic_action_search"</span>
<span class="nx">android</span><span class="o">:</span><span class="nx">showAsAction</span><span class="o">=</span><span class="s2">"always|collapseActionView"</span>
<span class="nx">android</span><span class="o">:</span><span class="nx">title</span><span class="o">=</span><span class="s2">"Search"</span><span class="o">/></span>
<span class="nx">android</span><span class="o">:</span><span class="nx">actionViewClass</span><span class="o">=</span><span class="s2">"android.widget.SearchView"</span><span class="c1">//系统的</span>
</code></pre></div>
<p>我们设定 showAsAction这个属性的时候,加了collapseActionView这么一个参数,它的意思是说,将item引用的布局隐藏起来,当你点击该item的时候,再将其展现出来。通过这个属性,我们就可以将每个item复杂的布局隐藏起来,从而有效的节约了actionbar的布局空间。</p>
<p>searchview.xml</p>
<div class="highlight"><pre><code class="language-js" data-lang="js"><span class="o"><?</span><span class="nx">xml</span> <span class="nx">version</span><span class="o">=</span><span class="s2">"1.0"</span> <span class="nx">encoding</span><span class="o">=</span><span class="s2">"utf-8"</span><span class="o">?></span>
<span class="o"><</span><span class="nx">LinearLayout</span> <span class="nx">xmlns</span><span class="o">:</span><span class="nx">android</span><span class="o">=</span><span class="s2">"http://schemas.android.com/apk/res/android"</span>
<span class="nx">android</span><span class="o">:</span><span class="nx">layout_width</span><span class="o">=</span><span class="s2">"match_parent"</span>
<span class="nx">android</span><span class="o">:</span><span class="nx">layout_height</span><span class="o">=</span><span class="s2">"match_parent"</span>
<span class="nx">android</span><span class="o">:</span><span class="nx">orientation</span><span class="o">=</span><span class="s2">"vertical"</span> <span class="o">></span>
<span class="o"><</span><span class="nx">EditText</span>
<span class="nx">android</span><span class="o">:</span><span class="nx">id</span><span class="o">=</span><span class="s2">"@+id/search"</span>
<span class="nx">style</span><span class="o">=</span><span class="s2">"@android:style/Widget.Holo.EditText"</span>
<span class="nx">android</span><span class="o">:</span><span class="nx">layout_width</span><span class="o">=</span><span class="s2">"match_parent"</span>
<span class="nx">android</span><span class="o">:</span><span class="nx">layout_height</span><span class="o">=</span><span class="s2">"match_parent"</span>
<span class="nx">android</span><span class="o">:</span><span class="nx">hint</span><span class="o">=</span><span class="s2">"搜索视频"</span>
<span class="nx">android</span><span class="o">:</span><span class="nx">imeOptions</span><span class="o">=</span><span class="s2">"actionSearch"</span>
<span class="nx">android</span><span class="o">:</span><span class="nx">singleLine</span><span class="o">=</span><span class="s2">"true"</span>
<span class="nx">android</span><span class="o">:</span><span class="nx">textColor</span><span class="o">=</span><span class="s2">"@android:color/black"</span>
<span class="nx">android</span><span class="o">:</span><span class="nx">textCursorDrawable</span><span class="o">=</span><span class="s2">"@null"</span> <span class="o">/></span>
<span class="o"><</span><span class="err">/LinearLayout></span>
</code></pre></div>
<p>代码</p>
<div class="highlight"><pre><code class="language-java" data-lang="java"> <span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">onCreateOptionsMenu</span><span class="o">(</span><span class="n">Menu</span> <span class="n">menu</span><span class="o">)</span> <span class="o">{</span>
<span class="c1">// Inflate the menu; this adds items to the action bar if it is present.</span>
<span class="n">getMenuInflater</span><span class="o">().</span><span class="na">inflate</span><span class="o">(</span><span class="n">R</span><span class="o">.</span><span class="na">menu</span><span class="o">.</span><span class="na">activity_main</span><span class="o">,</span> <span class="n">menu</span><span class="o">);</span>
<span class="n">initSearch</span><span class="o">(</span><span class="n">menu</span><span class="o">);</span>
<span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="kd">private</span> <span class="n">VideoFragment</span> <span class="n">videoFragment</span><span class="o">;</span>
<span class="cm">/**</span>
<span class="cm"> * 搜索动作</span>
<span class="cm"> * </span>
<span class="cm"> * @param menu</span>
<span class="cm"> */</span>
<span class="kd">private</span> <span class="kt">void</span> <span class="nf">initSearch</span><span class="o">(</span><span class="n">Menu</span> <span class="n">menu</span><span class="o">)</span> <span class="o">{</span>
<span class="n">MenuItem</span> <span class="n">item</span> <span class="o">=</span> <span class="n">menu</span><span class="o">.</span><span class="na">findItem</span><span class="o">(</span><span class="n">R</span><span class="o">.</span><span class="na">id</span><span class="o">.</span><span class="na">menu_search</span><span class="o">);</span>
<span class="n">View</span> <span class="n">view</span> <span class="o">=</span> <span class="n">item</span><span class="o">.</span><span class="na">getActionView</span><span class="o">();</span>
<span class="kd">final</span> <span class="n">EditText</span> <span class="n">search</span> <span class="o">=</span> <span class="o">(</span><span class="n">EditText</span><span class="o">)</span> <span class="n">view</span><span class="o">.</span><span class="na">findViewById</span><span class="o">(</span><span class="n">R</span><span class="o">.</span><span class="na">id</span><span class="o">.</span><span class="na">search</span><span class="o">);</span>
<span class="n">MenuItemCompat</span><span class="o">.</span><span class="na">setOnActionExpandListener</span><span class="o">(</span><span class="n">item</span><span class="o">,</span>
<span class="k">new</span> <span class="nf">OnActionExpandListener</span><span class="o">()</span> <span class="o">{</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">onMenuItemActionCollapse</span><span class="o">(</span><span class="n">MenuItem</span> <span class="n">item</span><span class="o">)</span> <span class="o">{</span>
<span class="c1">// Toast.makeText(MainDrawerActivity.this, "啊哦,我隐藏起来了!",</span>
<span class="c1">// Toast.LENGTH_SHORT).show();</span>
<span class="n">search</span><span class="o">.</span><span class="na">clearFocus</span><span class="o">();</span> <span class="c1">// 清除焦点</span>
<span class="n">AppUtil</span><span class="o">.</span><span class="na">hideSoftInput</span><span class="o">(</span><span class="n">MainDrawerActivity</span><span class="o">.</span><span class="na">this</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="n">search</span><span class="o">.</span><span class="na">getText</span><span class="o">().</span><span class="na">length</span><span class="o">()</span> <span class="o">></span> <span class="mi">0</span><span class="o">)</span> <span class="o">{</span><span class="c1">// 重新恢复搜索之前的数据</span>
<span class="n">videoFragment</span><span class="o">.</span><span class="na">searchVideoTable</span><span class="o">(</span><span class="kc">false</span><span class="o">,</span> <span class="s">""</span><span class="o">);</span><span class="c1">//</span>
<span class="o">}</span>
<span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">onMenuItemActionExpand</span><span class="o">(</span><span class="n">MenuItem</span> <span class="n">item</span><span class="o">)</span> <span class="o">{</span>
<span class="c1">// Toast.makeText(MainDrawerActivity.this, "啦啦啦,我出现喽!",</span>
<span class="c1">// Toast.LENGTH_SHORT).show();</span>
<span class="n">search</span><span class="o">.</span><span class="na">requestFocus</span><span class="o">();</span> <span class="c1">// 请求获取焦点</span>
<span class="cm">/**</span>
<span class="cm"> * 调起软键盘</span>
<span class="cm"> */</span>
<span class="n">InputMethodManager</span> <span class="n">m</span> <span class="o">=</span> <span class="o">(</span><span class="n">InputMethodManager</span><span class="o">)</span> <span class="n">getSystemService</span><span class="o">(</span><span class="n">Context</span><span class="o">.</span><span class="na">INPUT_METHOD_SERVICE</span><span class="o">);</span>
<span class="n">m</span><span class="o">.</span><span class="na">toggleSoftInput</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="n">InputMethodManager</span><span class="o">.</span><span class="na">HIDE_NOT_ALWAYS</span><span class="o">);</span>
<span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">});</span>
<span class="n">search</span><span class="o">.</span><span class="na">setOnEditorActionListener</span><span class="o">(</span><span class="k">new</span> <span class="nf">OnEditorActionListener</span><span class="o">()</span> <span class="o">{</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">onEditorAction</span><span class="o">(</span><span class="n">TextView</span> <span class="n">v</span><span class="o">,</span> <span class="kt">int</span> <span class="n">actionId</span><span class="o">,</span>
<span class="n">KeyEvent</span> <span class="n">event</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="n">actionId</span> <span class="o">==</span> <span class="n">EditorInfo</span><span class="o">.</span><span class="na">IME_ACTION_SEARCH</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="n">search</span><span class="o">.</span><span class="na">getText</span><span class="o">().</span><span class="na">length</span><span class="o">()</span> <span class="o">></span> <span class="mi">0</span><span class="o">)</span> <span class="o">{</span><span class="c1">// 搜索</span>
<span class="n">AppUtil</span><span class="o">.</span><span class="na">hideSoftInput</span><span class="o">(</span><span class="n">MainDrawerActivity</span><span class="o">.</span><span class="na">this</span><span class="o">);</span>
<span class="n">videoFragment</span><span class="o">.</span><span class="na">searchVideoTable</span><span class="o">(</span><span class="kc">true</span><span class="o">,</span> <span class="n">search</span><span class="o">.</span><span class="na">getText</span><span class="o">()</span>
<span class="o">.</span><span class="na">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">return</span> <span class="kc">false</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">});</span>
<span class="o">}</span>
</code></pre></div>
<ul>
<li>参考</li>
</ul>
<p><a href="http://blog.csdn.net/xy_nyle/article/details/18894755">Android ActionBar 的其它用法(搜索、分享、隐藏复杂布局,模仿Google Play,微信)</a></p>
<p><a href="http://www.fengfly.com/plus/view-206564-1.html">Android在EditText中开启软键盘的"Done"按钮</a></p>
<p><a href="http://glblong.blog.51cto.com/3058613/1543172">输入法软键盘显示/隐藏的监听和控制</a></p>
<p><a href="http://blog.csdn.net/cw2004100021124/article/details/12649671">修改Android EditText光标颜色</a></p>
<p><a href="http://my.oschina.net/xsjayz/blog/104344">Android:自定义输入框光标颜色</a></p>
jarsigner签名安卓Apk程序
2014-12-05T00:00:00+00:00
http://wuxiaolong.me/android/2014/12/05/jarsigner
<p>发布过Android应用的朋友们应该都知道,Android APK的发布是必需要签名,本签名指南演示如何使用WoSign安卓代码签名证书,签名安卓 .apk 程序。</p>
<p>1、签名证书</p>
<p>制作证书,证书文件名:android.keystore, 证书别名:android.keystore</p>
<p>2、 安装签名环境JDK包</p>
<p>签名工具包可以在JDK官方网站下载:<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">http://www.oracle.com/technetwork/java/javase/downloads/index.html</a>,也可以直接点击这里下载JDK工具包(请使用JDK 1.6版本)。
文件包下载安装完成后,然后就开始进入jdk的签名根目录,具体如下:</p>
<p>开始-> 运行-> cmd->cd 到您安装的jdk的目录这里我是D:\Program Files\Java\jdk1.6.0\bin</p>
<p>3、签名</p>
<p>在D:\Program Files\Java\jdk1.6.0\bin 找到工具 jarsigner.exe,并把证书android.keystore 文件放入当前目录。签名命令:</p>
<p>jarsigner -verbose -keystore android.keystore -signedjar Last<u>gongs</u>sign.apk Before_sign.apk android.keystore</p>
<p>1)jarsigner是工具名称,-verbose表示将签名过程中的详细信息打印出来,显示在dos窗口中;</p>
<p>2)-keystore android.keystore 表示签名所使用的数字证书和所在位置,这里没有写路径,表示在当前目录下;</p>
<p>3)-signedjar Last<u>gongs</u>sign.apk Before<u>sign.apk 表示给 Before</u>sign.apk文件签名,签名后的文件名称为Last<u>gongs</u>sign.apk;</p>
<p>4)最后面的android.keystore 表示证书的别名</p>
<p>如下图所示:</p>
<p><img src="http://wuxiaolong.qiniudn.com/2014-12-05-jarsigner-1.png" alt=""></p>
<p>4、验证签名</p>
<p>使用命令验证已经签名的apk文件:jarsigner –verify Last<u>gongs</u>sign.apk</p>
<p><img src="http://wuxiaolong.qiniudn.com/2014-12-05-jarsigner-2.png" alt=""></p>
<p>如果想要知道更多明细, 你可以尝试如下几个命令:</p>
<div class="highlight"><pre><code class="language-text" data-lang="text">jarsigner -verify -verbose Last_gongs_sign.apk
</code></pre></div>
<p>或
jarsigner -verify -verbose -certs Last<u>gongs</u>sign.apk </p>
<p>上面的命令, 使用 -certs 参数, 将显示 "CN=" 行, 描述是谁签名了APK文件.</p>
<p>原文:<a href="http://feelyou.info/trying_to_manually_sign_android_package_with_jarsigner_but_install_failed/">http://feelyou.info/trying<u>to</u>manually<u>sign</u>android<u>package</u>with<u>jarsigner</u>but<u>install</u>failed/</a></p>
剩者为王App秀
2014-11-25T00:00:00+00:00
http://wuxiaolong.me/life/2014/11/25/wewin-app-show
<blockquote>
<p>身为一个程序猿,光靠那点固定工资,</p>
<p>没有一点副业,那是要死人的。</p>
<p>然而个人开发者不易,我深有体会,</p>
<p>技术要了得,没有服务器,没有美工,这些都需要自己解决。</p>
<p>今天在此立博客,记录大伙的个人作品,一算推广,二可以交流app使用了哪些技术。</p>
<p>大家可以按照以下格式发给我,方便我记录:
<table>
<tr>
<td></td>
<td>说明</td>
</tr>
<tr>
<td>来源</td>
<td>剩者为王①群/剩者为王②群/剩者为王③群</td>
</tr>
<tr>
<td>作者</td>
<td>群昵称</td>
</tr>
<tr>
<td>安卓市场地址</td>
<td>二维码,大小200x200,指向市场</td>
</tr>
<tr>
<td>App截图 </td>
<td>一张</td>
</tr>
</table></p>
</blockquote>
<h2 id="目录"><a name="index"/>目录</h2>
<ul>
<li><a href="#xiaomolong">@无锡-小尛龙</a>
<ul>
<li><a href="#weiyan">微言</a></li>
<li><a href="#jiong">搞笑囧事</a></li>
<li><a href="#wewin">剩者为王</a></li>
</ul></li>
</ul>
<h1 id="口号:个人app,一起顶。"><code>口号:个人App,一起顶。</code></h1>
<p><a name="xiaomolong"/></p>
<h1 id="@无锡-小尛龙">@无锡-小尛龙</h1>
<p><a name="weiyan"/></p>
<h2 id="1、微言">1、微言</h2>
<table><thead>
<tr>
<th style="text-align: center"></th>
<th>说明</th>
</tr>
</thead><tbody>
<tr>
<td style="text-align: center">来源</td>
<td>剩者为王①群</td>
</tr>
<tr>
<td style="text-align: center">作者</td>
<td>无锡-小尛龙</td>
</tr>
<tr>
<td style="text-align: center">安卓市场地址</td>
<td><img src="http://wuxiaolong.qiniudn.com/2014-11-25-wewin-app-show-weiyan-qrcode.png" alt="微言"></td>
</tr>
<tr>
<td style="text-align: center">App截图</td>
<td><img src="http://wuxiaolong.qiniudn.com/2014-11-25-wewin-app-show-weiyan.gif" alt=""></td>
</tr>
</tbody></table>
<p><a name="jiong"/></p>
<h2 id="2、搞笑囧事">2、搞笑囧事</h2>
<table><thead>
<tr>
<th style="text-align: center"></th>
<th>说明</th>
</tr>
</thead><tbody>
<tr>
<td style="text-align: center">来源</td>
<td>剩者为王①群</td>
</tr>
<tr>
<td style="text-align: center">作者</td>
<td>无锡-小尛龙</td>
</tr>
<tr>
<td style="text-align: center">安卓市场地址</td>
<td><img src="http://wuxiaolong.qiniudn.com/2014-11-25-wewin-app-show-jiong-qrcode.png" alt="搞笑囧事"></td>
</tr>
<tr>
<td style="text-align: center">App截图</td>
<td><img src="http://wuxiaolong.qiniudn.com/2014-11-25-wewin-app-show-jiong.gif" alt=""></td>
</tr>
</tbody></table>
<p><a name="wewin"/></p>
<h2 id="3、剩者为王">3、剩者为王</h2>
<table><thead>
<tr>
<th style="text-align: center"></th>
<th>说明</th>
</tr>
</thead><tbody>
<tr>
<td style="text-align: center">来源</td>
<td>剩者为王①群</td>
</tr>
<tr>
<td style="text-align: center">作者</td>
<td>无锡-小尛龙</td>
</tr>
<tr>
<td style="text-align: center">安卓市场地址</td>
<td><img src="http://wuxiaolong.qiniudn.com/2014-11-25-wewin-app-show-wewin-qrcode.png" alt="剩者为王"></td>
</tr>
<tr>
<td style="text-align: center">App截图</td>
<td><img src="http://wuxiaolong.qiniudn.com/2014-11-25-wewin-app-show-wewin.gif" alt=""></td>
</tr>
</tbody></table>
<h1 id="持续更新,快点发送你的app给我吧!"><code>持续更新,快点发送你的App给我吧!</code></h1>
解决Android视频锁屏还在继续播放
2014-11-24T00:00:00+00:00
http://wuxiaolong.me/android/2014/11/24/lock-screen-video
<h3 id="一、锁屏">一、锁屏</h3>
<p>T_T被整哭了,我明知道锁屏走了onDestroy()方法,没有着手这个,反而去监听锁屏,还是<code>太菜</code>,<code>基础不牢</code>。</p>
<p>看日志发现,主Activity先onDestroy()了,随即又onCreate(),原因如下:</p>
<p>视频本身是横屏,手机界面是竖屏,锁屏操作存在一个横屏转竖屏的过程,这个过程如果不加android:configChanges="orientation",
Activity会自动重新走一遍它的生命周期,即先销毁再重新创建,加上后只会调用onConfigurationChanged。<code>哎,我知道这个,怎么没有想到这点啊</code>。</p>
<p>另外如果你的target > 13时,还必须得加上“ScreenSize”。</p>
<div class="highlight"><pre><code class="language-java" data-lang="java"> <span class="o"><</span><span class="n">activity</span>
<span class="nl">android:</span><span class="n">name</span><span class="o">=</span><span class="s">"com.xiaomolong.ufosay.ui.VideoPlayActivity"</span>
<span class="nl">android:</span><span class="n">configChanges</span><span class="o">=</span><span class="s">"keyboardHidden|orientation|screenSize"</span>
<span class="nl">android:</span><span class="n">label</span><span class="o">=</span><span class="s">"PlayingActivity"</span>
<span class="nl">android:</span><span class="n">screenOrientation</span><span class="o">=</span><span class="s">"landscape"</span>
<span class="nl">android:</span><span class="n">theme</span><span class="o">=</span><span class="s">"@android:style/Theme.Holo.Light.NoActionBar.Fullscreen"</span> <span class="o">></span>
<span class="o"></</span><span class="n">activity</span><span class="o">></span>
</code></pre></div>
<h3 id="二、记录视频进度">二、记录视频进度</h3>
<p>视频播放点击Home建和锁屏时需要保存播放的进度,因此有必要了解下onSaveInstanceState和onRestoreInstanceState触发的时机</p>
<ul>
<li>1、onSaveInstanceState</li>
</ul>
<p>(1)、当用户按下HOME键时。</p>
<p>这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,故系统会调用onSaveInstanceState,让用户有机会保存某些非永久性的数据。以下几种情况的分析都遵循该原则</p>
<p>(2)、长按HOME键,选择运行其他的程序时。</p>
<p>(3)、按下电源按键(关闭屏幕显示)时。</p>
<p>(4)、从activity A中启动一个新的activity时。</p>
<p>(5)、屏幕方向切换时,例如从竖屏切换到横屏时。</p>
<p>在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行</p>
<ul>
<li>2、onRestoreInstanceState</li>
</ul>
<p>onRestoreInstanceState被调用的前提是,activity A“确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用,例如,当正在显示activity A的时候,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,故activity A的onRestoreInstanceState方法不会被执行</p>
<p>另外,onRestoreInstanceState的bundle参数也会传递到onCreate方法中,你也可以选择在onCreate方法中做数据还原。</p>
<div class="highlight"><pre><code class="language-java" data-lang="java"> <span class="cm">/**</span>
<span class="cm"> * 记录播放位置</span>
<span class="cm"> */</span>
<span class="kd">private</span> <span class="kt">int</span> <span class="n">mLastPos</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span>
<span class="kd">protected</span> <span class="kt">void</span> <span class="nf">onCreate</span><span class="o">(</span><span class="n">Bundle</span> <span class="n">savedInstanceState</span><span class="o">)</span> <span class="o">{</span>
<span class="kd">super</span><span class="o">.</span><span class="na">onCreate</span><span class="o">(</span><span class="n">savedInstanceState</span><span class="o">);</span>
<span class="n">setContentView</span><span class="o">(</span><span class="n">R</span><span class="o">.</span><span class="na">layout</span><span class="o">.</span><span class="na">video_play</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="n">savedInstanceState</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="n">mLastPos</span> <span class="o">=</span> <span class="n">savedInstanceState</span><span class="o">.</span><span class="na">getInt</span><span class="o">(</span><span class="s">"LastPosition"</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="kd">protected</span> <span class="kt">void</span> <span class="nf">onRestoreInstanceState</span><span class="o">(</span><span class="n">Bundle</span> <span class="n">savedInstanceState</span><span class="o">)</span> <span class="o">{</span>
<span class="kd">super</span><span class="o">.</span><span class="na">onRestoreInstanceState</span><span class="o">(</span><span class="n">savedInstanceState</span><span class="o">);</span>
<span class="n">Log</span><span class="o">.</span><span class="na">d</span><span class="o">(</span><span class="s">"wxl"</span><span class="o">,</span> <span class="s">"onRestoreInstanceState start"</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="n">savedInstanceState</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="n">mLastPos</span> <span class="o">=</span> <span class="n">savedInstanceState</span><span class="o">.</span><span class="na">getInt</span><span class="o">(</span><span class="s">"LastPosition"</span><span class="o">);</span>
<span class="n">Log</span><span class="o">.</span><span class="na">d</span><span class="o">(</span><span class="s">"wxl"</span><span class="o">,</span> <span class="s">"onRestoreInstanceState "</span> <span class="o">+</span> <span class="n">mLastPos</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nd">@Override</span>
<span class="kd">protected</span> <span class="kt">void</span> <span class="nf">onSaveInstanceState</span><span class="o">(</span><span class="n">Bundle</span> <span class="n">outState</span><span class="o">)</span> <span class="o">{</span>
<span class="kd">super</span><span class="o">.</span><span class="na">onSaveInstanceState</span><span class="o">(</span><span class="n">outState</span><span class="o">);</span>
<span class="n">Log</span><span class="o">.</span><span class="na">d</span><span class="o">(</span><span class="s">"wxl"</span><span class="o">,</span> <span class="s">"onSaveInstanceState start"</span><span class="o">);</span>
<span class="n">outState</span><span class="o">.</span><span class="na">putInt</span><span class="o">(</span><span class="s">"LastPosition"</span><span class="o">,</span> <span class="n">mLastPos</span><span class="o">);</span>
<span class="o">}</span>
</code></pre></div>
<h3 id="三、附录">三、附录</h3>
<p><a href="http://blog.csdn.net/terrantian/article/details/18670381">Android锁屏后主Activity的onDestroy方法被调用</a></p>
<p><a href="http://android.blog.51cto.com/268543/634646/">onSaveInstanceState和onRestoreInstanceState触发的时机</a></p>
<p><a href="http://www.cnblogs.com/a284628487/p/3345317.html">Android 监听屏幕锁屏,用户解锁</a></p>
Android Studio如何更改JDK和SDK的路径
2014-11-22T00:00:00+00:00
http://wuxiaolong.me/android%20studio/2014/11/22/change-sdk-path
<p>安装Android Studio后它默认在自己的文件目录下又安装了一个sdk,然后SDK路径默认到这个文件下。
今天更新Android Studio到0.8.14,提示要移动这个sdk,但是我在设置中始终没有找到更改sdk的路径的地方。
网上找了,我没有想到居然在这里设置,直接上图:
<img src="http://wuxiaolong.qiniudn.com/2014-11-22-change-sdk-path.png" alt=""></p>
解决Android Studio和Android SDK Manager无法在线更新
2014-11-21T00:00:00+00:00
http://wuxiaolong.me/android/2014/11/21/sdk-update
<h2 id="android-studio">Android Studio</h2>
<p>升级时提示 Connection failed. Please check your network connection and try again</p>
<p>修改安装目录下bin\studio.exe.vmoptions文件,如E:\Android\android-studio\bin\studio.exe.vmoptions</p>
<p>添加内容:</p>
<div class="highlight"><pre><code class="language-js" data-lang="js"><span class="o">-</span><span class="nx">Djava</span><span class="p">.</span><span class="nx">net</span><span class="p">.</span><span class="nx">preferIPv4Stack</span><span class="o">=</span><span class="kc">true</span>
<span class="o">-</span><span class="nx">Didea</span><span class="p">.</span><span class="nx">updates</span><span class="p">.</span><span class="nx">url</span><span class="o">=</span><span class="nx">http</span><span class="o">:</span><span class="c1">//dl.google.com/android/studio/patches/updates.xml</span>
<span class="o">-</span><span class="nx">Didea</span><span class="p">.</span><span class="nx">patches</span><span class="p">.</span><span class="nx">url</span><span class="o">=</span><span class="nx">http</span><span class="o">:</span><span class="c1">//dl.google.com/android/studio/patches/</span>
</code></pre></div>
<p>重新启动..就可以在线更新了.</p>
<p>备注:如果是64位系统,那就应该修改bin\studio64.exe.vmoptions文件,大家别改错了,不然没用!</p>
<h2 id="android-sdk-manager">Android SDK Manager</h2>
<p>解决Android SDK Manager列表错误,或者无法更新下载的问题:</p>
<p>hosts文件添加内容:</p>
<p>C:\Windows\System32\drivers\etc</p>
<p>hosts文件windows系统目录中的\system32\drivers\etc下面,win98在windows系统目录中下面。</p>
<div class="highlight"><pre><code class="language-js" data-lang="js"><span class="mf">203.208</span><span class="p">.</span><span class="mf">46.146</span> <span class="nx">www</span><span class="p">.</span><span class="nx">google</span><span class="p">.</span><span class="nx">com</span>
<span class="mf">74.125</span><span class="p">.</span><span class="mf">113.121</span> <span class="nx">developer</span><span class="p">.</span><span class="nx">android</span><span class="p">.</span><span class="nx">com</span>
<span class="mf">203.208</span><span class="p">.</span><span class="mf">46.146</span> <span class="nx">dl</span><span class="p">.</span><span class="nx">google</span><span class="p">.</span><span class="nx">com</span>
<span class="mf">203.208</span><span class="p">.</span><span class="mf">46.146</span> <span class="nx">dl</span><span class="o">-</span><span class="nx">ssl</span><span class="p">.</span><span class="nx">google</span><span class="p">.</span><span class="nx">com</span>
<span class="err">或者以下</span>
<span class="err">#更新的内容从以下地址下载</span>
<span class="mf">74.125</span><span class="p">.</span><span class="mf">113.121</span> <span class="nx">developer</span><span class="p">.</span><span class="nx">android</span><span class="p">.</span><span class="nx">com</span>
<span class="mf">203.208</span><span class="p">.</span><span class="mf">46.200</span> <span class="nx">dl</span><span class="p">.</span><span class="nx">google</span><span class="p">.</span><span class="nx">com</span>
<span class="mf">203.208</span><span class="p">.</span><span class="mf">46.200</span> <span class="nx">dl</span><span class="o">-</span><span class="nx">ssl</span><span class="p">.</span><span class="nx">google</span><span class="p">.</span><span class="nx">com</span>
</code></pre></div>
Android实战Samples之下载
2014-11-21T00:00:00+00:00
http://wuxiaolong.me/android/2014/11/21/android-samples-download
<p>本Samples演示了如何在通知栏里下载,分为默认和自定义的。</p>
<h3 id="效果图:">效果图:</h3>
<p><img src="http://wuxiaolong.qiniudn.com/2014-11-21-android-samples-download.gif" alt=""></p>
<h3 id="源码">源码</h3>
<p><a href="https://github.com/WuXiaolong/AndroidSamples">https://github.com/WuXiaolong/AndroidSamples</a></p>
<h3 id="拓展">拓展</h3>
<blockquote>
<p><a href="http://blog.csdn.net/vipzjyno1/article/details/25248021">Android 通知栏Notification学习</a></p>
</blockquote>
Android实战Samples之相册拍照
2014-11-10T00:00:00+00:00
http://wuxiaolong.me/android/2014/11/10/Android-Samples-Photograph
<p>相册拍照的功能在实际开发中是最常见的功能,我整理成<code>图片裁剪</code>和<code>不裁剪</code>,另外你还能学习<code>自定义的PopupWindow</code>。在我开发这块,发现网上很多demo都有选择相册大图片时有溢出的bug,我的这个sample解决了这个bug。</p>
<h3 id="效果图">效果图</h3>
<p><img src="http://wuxiaolong.qiniudn.com/2014-11-10-Android-Samples-Photograph-1.gif" alt=""></p>
<h3 id="源码">源码</h3>
<p><a href="https://github.com/WuXiaolong/AndroidSamples">https://github.com/WuXiaolong/AndroidSamples</a></p>
Android实战Samples
2014-11-09T00:00:00+00:00
http://wuxiaolong.me/android/2014/11/09/AndroidSamples
<p>工作将近三年,早就应该将自己实际开发中遇到的问题整成一个App,虽然论坛(<a href="http://www.eoeandroid.com/space-uid-788456.html">eoeAndroid</a>、<a href="http://www.apkbus.com/home.php?mod=space&uid=104974">安卓巴士</a>)已经分享了不少demo,自己也记录一些Android知识点,但是觉得这些还是不够,再次遇到以前的问题,还是会找以前的帖子去看,太不便,决定花点时间,将以前写的demo整到一块,方便自己,方便大家。</p>
<p>源码地址:<a href="https://github.com/WuXiaolong/AndroidSamples">https://github.com/WuXiaolong/AndroidSamples</a></p>
Swift解析html
2014-11-06T00:00:00+00:00
http://wuxiaolong.me/swift/2014/11/06/swift-html-parser
<h2 id="一、hpple">一、hpple</h2>
<p>下载hpple<a href="https://github.com/topfunky/hpple">源码</a>,将以下文件复制自己项目中
<img src="http://wuxiaolong.qiniudn.com/2014-11-06-swift-html-parser-1.png" alt="">
hpple需要libxml2,如图添加:
<img src="http://wuxiaolong.qiniudn.com/2014-11-06-swift-html-parser-2.png" alt="">
但是这样会报错: 'libxml/tree.h' file not found</p>
<p>解决:
如图搜索Header Search Paths,修改成我那样的:
<img src="http://wuxiaolong.qiniudn.com/2014-11-06-swift-html-parser-3.png" alt=""></p>
<h2 id="二、创建和配置bridging-header.h">二、创建和配置Bridging-Header.h</h2>
<p>因为hpple,An XML/HTML parser for Objective-C,因此Swift需要调用OC,Swift与OC进行混编,首先要有一个.h文件,名字为[项目名]-Bridging-Header.h,这里使用SwiftHtmlParser-Bridging-Header.h然后设置项目的Build Settings--Swift Compiler--Objective-C Bridging Header内容为[项目名]/Bridging-Header.h,这里使用SwiftHtmlParser/SwiftHtmlParser-Bridging-Header.h,这个与Bridging-Header.h位置有关,从项目的根目录开始在Objective-C Bridging Header选项里面写入Bridging-Header.h相对路径。</p>
<h2 id="三、修改bridging-header.h">三、修改Bridging-Header.h</h2>
<div class="highlight"><pre><code class="language-js" data-lang="js"><span class="lineno">1</span> <span class="err">#</span><span class="kr">import</span> <span class="s2">"TFHpple.h"</span></code></pre></div>
<h2 id="四、解析html代码">四、解析html代码</h2>
<div class="highlight"><pre><code class="language-js" data-lang="js"><span class="lineno"> 1</span> <span class="c1">//</span>
<span class="lineno"> 2</span> <span class="c1">// ViewController.swift</span>
<span class="lineno"> 3</span> <span class="c1">// SwiftHtmlParser</span>
<span class="lineno"> 4</span> <span class="c1">//</span>
<span class="lineno"> 5</span> <span class="c1">// Created by 小尛龙 on 14-11-2.</span>
<span class="lineno"> 6</span> <span class="c1">// Copyright (c) 2014年 iMac. All rights reserved.</span>
<span class="lineno"> 7</span> <span class="c1">//</span>
<span class="lineno"> 8</span>
<span class="lineno"> 9</span> <span class="kr">import</span> <span class="nx">UIKit</span>
<span class="lineno">10</span>
<span class="lineno">11</span> <span class="kr">class</span> <span class="nx">ViewController</span><span class="o">:</span> <span class="nx">UIViewController</span> <span class="p">{</span>
<span class="lineno">12</span>
<span class="lineno">13</span> <span class="err">@</span><span class="nx">IBOutlet</span> <span class="kd">var</span> <span class="nx">cityLabel</span><span class="o">:</span> <span class="nx">UILabel</span><span class="o">!</span>
<span class="lineno">14</span> <span class="kd">var</span> <span class="nx">url</span><span class="o">:</span><span class="nb">String</span><span class="o">?</span> <span class="o">=</span> <span class="s2">"http://www.pm25.in/wuxi"</span>
<span class="lineno">15</span> <span class="kd">var</span> <span class="nx">city</span><span class="o">:</span><span class="nb">String</span><span class="o">?</span>
<span class="lineno">16</span>
<span class="lineno">17</span> <span class="nx">override</span> <span class="nx">func</span> <span class="nx">viewDidLoad</span><span class="p">()</span> <span class="p">{</span>
<span class="lineno">18</span> <span class="kr">super</span><span class="p">.</span><span class="nx">viewDidLoad</span><span class="p">()</span>
<span class="lineno">19</span>
<span class="lineno">20</span> <span class="nx">getData</span><span class="p">()</span>
<span class="lineno">21</span> <span class="p">}</span>
<span class="lineno">22</span>
<span class="lineno">23</span> <span class="nx">override</span> <span class="nx">func</span> <span class="nx">didReceiveMemoryWarning</span><span class="p">()</span> <span class="p">{</span>
<span class="lineno">24</span> <span class="kr">super</span><span class="p">.</span><span class="nx">didReceiveMemoryWarning</span><span class="p">()</span>
<span class="lineno">25</span> <span class="c1">// Dispose of any resources that can be recreated.</span>
<span class="lineno">26</span> <span class="p">}</span>
<span class="lineno">27</span>
<span class="lineno">28</span> <span class="nx">func</span> <span class="nx">getData</span><span class="p">(){</span>
<span class="lineno">29</span> <span class="kd">var</span> <span class="nx">url</span> <span class="o">:</span> <span class="nx">NSURL</span> <span class="o">=</span> <span class="nx">NSURL</span><span class="p">(</span><span class="nx">string</span><span class="o">:</span> <span class="nx">self</span><span class="p">.</span><span class="nx">url</span><span class="o">!</span><span class="p">)</span>
<span class="lineno">30</span> <span class="kd">let</span> <span class="nx">request</span> <span class="o">:</span> <span class="nx">NSURLRequest</span> <span class="o">=</span> <span class="nx">NSURLRequest</span><span class="p">(</span><span class="nx">URL</span><span class="o">:</span> <span class="nx">url</span><span class="p">)</span>
<span class="lineno">31</span> <span class="nx">NSURLConnection</span><span class="p">.</span><span class="nx">sendAsynchronousRequest</span><span class="p">(</span><span class="nx">request</span><span class="p">,</span> <span class="nx">queue</span><span class="o">:</span> <span class="nx">NSOperationQueue</span><span class="p">.</span><span class="nx">mainQueue</span><span class="p">(),</span> <span class="nx">completionHandler</span><span class="o">:</span> <span class="p">{</span> <span class="p">(</span><span class="nx">response</span><span class="p">,</span> <span class="nx">data</span><span class="p">,</span> <span class="nx">error</span><span class="p">)</span> <span class="o">-></span> <span class="nx">Void</span> <span class="k">in</span>
<span class="lineno">32</span> <span class="k">if</span> <span class="p">(</span><span class="nx">error</span> <span class="o">!=</span> <span class="nx">nil</span><span class="p">){</span>
<span class="lineno">33</span> <span class="kd">let</span> <span class="nx">alertView</span><span class="o">:</span><span class="nx">UIAlertView</span> <span class="o">=</span> <span class="nx">UIAlertView</span><span class="p">()</span>
<span class="lineno">34</span> <span class="nx">alertView</span><span class="p">.</span><span class="nx">title</span><span class="o">=</span><span class="s2">"提示"</span>
<span class="lineno">35</span> <span class="nx">alertView</span><span class="p">.</span><span class="nx">message</span><span class="o">=</span><span class="s2">"\(error.localizedDescription)"</span>
<span class="lineno">36</span> <span class="nx">alertView</span><span class="p">.</span><span class="nx">addButtonWithTitle</span><span class="p">(</span><span class="s2">"确定"</span><span class="p">)</span>
<span class="lineno">37</span> <span class="nx">alertView</span><span class="p">.</span><span class="nx">show</span><span class="p">()</span>
<span class="lineno">38</span> <span class="p">}</span><span class="k">else</span><span class="p">{</span>
<span class="lineno">39</span> <span class="nx">self</span><span class="p">.</span><span class="nx">parseData</span><span class="p">(</span><span class="nx">data</span><span class="p">)</span>
<span class="lineno">40</span> <span class="p">}</span>
<span class="lineno">41</span> <span class="p">})</span>
<span class="lineno">42</span>
<span class="lineno">43</span> <span class="p">}</span>
<span class="lineno">44</span>
<span class="lineno">45</span> <span class="cm">/**</span>
<span class="lineno">46</span> <span class="cm"> 解析html</span>
<span class="lineno">47</span> <span class="cm"> */</span>
<span class="lineno">48</span>
<span class="lineno">49</span> <span class="nx">func</span> <span class="nx">parseData</span><span class="p">(</span><span class="nx">data</span><span class="o">:</span><span class="nx">NSData</span><span class="p">){</span>
<span class="lineno">50</span> <span class="kd">var</span> <span class="nx">doc</span><span class="o">:</span><span class="nx">TFHpple</span> <span class="o">=</span> <span class="nx">TFHpple</span><span class="p">.</span><span class="nx">hppleWithHTMLData</span><span class="p">(</span><span class="nx">data</span><span class="p">,</span><span class="nx">encoding</span><span class="o">:</span><span class="s2">"UTF8"</span><span class="p">)</span>
<span class="lineno">51</span>
<span class="lineno">52</span> <span class="cm">/**</span>
<span class="lineno">53</span> <span class="cm"> <div class="city_name"></span>
<span class="lineno">54</span> <span class="cm"> <h2>无锡</h2></span>
<span class="lineno">55</span> <span class="cm"> </div></span>
<span class="lineno">56</span> <span class="cm"> */</span>
<span class="lineno">57</span> <span class="kd">var</span> <span class="nx">city</span><span class="o">:</span><span class="nx">TFHppleElement</span> <span class="o">=</span> <span class="nx">doc</span><span class="p">.</span><span class="nx">peekAtSearchWithXPathQuery</span><span class="p">(</span><span class="s2">"//div[@class='city_name']/h2"</span><span class="p">)</span>
<span class="lineno">58</span>
<span class="lineno">59</span> <span class="cm">/**城市</span>
<span class="lineno">60</span> <span class="cm"> {</span>
<span class="lineno">61</span> <span class="cm"> nodeChildArray =(</span>
<span class="lineno">62</span> <span class="cm"> {</span>
<span class="lineno">63</span> <span class="cm"> nodeContent = "\U65e0\U9521";</span>
<span class="lineno">64</span> <span class="cm"> nodeName = text;</span>
<span class="lineno">65</span> <span class="cm"> }</span>
<span class="lineno">66</span> <span class="cm"> );</span>
<span class="lineno">67</span> <span class="cm"> nodeName = h2;</span>
<span class="lineno">68</span> <span class="cm"> raw = "<h2>\U65e0\U9521</h2>";</span>
<span class="lineno">69</span> <span class="cm"> }*/</span>
<span class="lineno">70</span>
<span class="lineno">71</span>
<span class="lineno">72</span> <span class="nx">self</span><span class="p">.</span><span class="nx">city</span> <span class="o">=</span> <span class="nx">city</span><span class="p">.</span><span class="nx">firstChild</span><span class="p">.</span><span class="nx">content</span><span class="o">?</span><span class="p">.</span><span class="nx">stringByTrimmingCharactersInSet</span><span class="p">(</span><span class="nx">NSCharacterSet</span><span class="p">.</span><span class="nx">whitespaceAndNewlineCharacterSet</span><span class="p">())</span>
<span class="lineno">73</span>
<span class="lineno">74</span> <span class="nx">println</span><span class="p">(</span><span class="s2">"城市:\(self.city)"</span><span class="p">)</span>
<span class="lineno">75</span> <span class="nx">self</span><span class="p">.</span><span class="nx">cityLabel</span><span class="p">.</span><span class="nx">text</span> <span class="o">=</span> <span class="s2">"解析城市:"</span> <span class="o">+</span> <span class="nx">self</span><span class="p">.</span><span class="nx">city</span><span class="o">!</span>
<span class="lineno">76</span>
<span class="lineno">77</span> <span class="p">}</span>
<span class="lineno">78</span>
<span class="lineno">79</span>
<span class="lineno">80</span> <span class="p">}</span></code></pre></div>
<h2 id="五、效果展示">五、效果展示</h2>
<p><img src="http://wuxiaolong.qiniudn.com/2014-11-06-swift-html-parser-4.png" alt=""></p>
<h2 id="六、源码">六、源码</h2>
<p>见github <a href="https://github.com/WuXiaolong/SwiftHtmlParser">SwiftHtmlParser</a></p>
Swift语言快速入门
2014-10-30T00:00:00+00:00
http://wuxiaolong.me/swift/2014/10/30/swift-language-learn
<p>Swift是Apple在WWDC2014所发布的一门编程语言,基于C和Objective-C,而却没有C的一些兼容约束。Swift采用了安全的编程模式和添加现代的功能来是的编程更加简单、灵活和有趣。界面则基于广受人民群众爱戴的Cocoa和Cocoa Touch框架,展示了软件开发的新方向。</p>
<!-- more -->
<ul>
<li>类型</li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="kd">var</span> <span class="nx">str</span> <span class="o">=</span> <span class="s2">"Hello, playground"</span>
<span class="kd">var</span> <span class="nx">s</span><span class="o">:</span><span class="nb">String</span> <span class="o">=</span> <span class="s2">"Hello"</span><span class="c1">//指定类型</span>
<span class="kd">var</span> <span class="nx">k</span><span class="o">:</span><span class="nx">Int</span> <span class="o">=</span> <span class="mi">100</span>
</code></pre></div>
<ul>
<li>字符串连接</li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="kd">var</span> <span class="nx">string</span> <span class="o">=</span> <span class="s2">"Hello"</span>
<span class="nx">string</span> <span class="o">=</span> <span class="nx">string</span> <span class="o">+</span> <span class="s2">" swift"</span><span class="c1">//加号连接</span>
<span class="kd">var</span> <span class="nx">j</span><span class="o">=</span><span class="mi">100</span>
<span class="nx">string</span> <span class="o">=</span> <span class="s2">"\(string),good,\(j)"</span><span class="c1">// \()连接</span>
</code></pre></div>
<ul>
<li>数组</li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="kd">var</span> <span class="nx">arr0</span> <span class="err">=[</span><span class="s2">"Hello"</span><span class="p">,</span><span class="s2">"swift"</span><span class="err">];</span><span class="c1">//声明数组</span>
<span class="kd">var</span> <span class="nx">arr1</span> <span class="o">=</span> <span class="p">[]</span><span class="c1">//声明空数组</span>
<span class="kd">var</span> <span class="nx">arr2</span> <span class="o">=</span> <span class="p">[</span><span class="nb">String</span><span class="p">]()</span><span class="c1">//特定类型的数组</span>
</code></pre></div>
<ul>
<li>字典</li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="kd">var</span> <span class="nx">dict</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"name"</span><span class="o">:</span><span class="s2">"hello swift"</span><span class="p">,</span><span class="s2">"age"</span><span class="o">:</span><span class="s2">"1"</span><span class="p">]</span><span class="c1">//键值对</span>
<span class="nx">dict</span><span class="p">[</span><span class="s2">"age"</span><span class="p">]</span><span class="c1">//输出</span>
</code></pre></div>
<ul>
<li>循环</li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="kd">var</span> <span class="nx">arr</span> <span class="o">=</span> <span class="p">[</span><span class="nb">String</span><span class="p">]()</span>
<span class="k">for</span> <span class="nx">index</span> <span class="k">in</span> <span class="mi">0</span><span class="p">...</span><span class="mi">100</span><span class="p">{</span>
<span class="nx">arr</span><span class="p">.</span><span class="nx">append</span><span class="p">(</span><span class="s2">"Item\(index)"</span><span class="p">)</span>
<span class="p">}</span>
<span class="nx">println</span><span class="p">(</span><span class="nx">arr</span><span class="p">)</span>
<span class="k">for</span> <span class="nx">value</span> <span class="k">in</span> <span class="nx">arr</span><span class="p">{</span>
<span class="nx">println</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span>
<span class="p">}</span>
<span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="nx">i</span><span class="o"><</span><span class="nx">arr</span><span class="p">.</span><span class="nx">count</span><span class="p">{</span>
<span class="nx">println</span><span class="p">(</span><span class="nx">arr</span><span class="p">[</span><span class="nx">i</span><span class="p">])</span><span class="c1">//while循环</span>
<span class="p">}</span>
<span class="k">for</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span><span class="nx">value</span><span class="p">)</span><span class="k">in</span> <span class="nx">dict</span><span class="p">{</span>
<span class="nx">println</span><span class="p">(</span><span class="s2">"\(key),\(value)"</span><span class="p">)</span><span class="c1">//字典遍历</span>
<span class="p">}</span>
</code></pre></div>
<ul>
<li>流程控制</li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="k">for</span> <span class="nx">index</span> <span class="k">in</span> <span class="mi">0</span><span class="p">...</span><span class="mi">100</span><span class="p">{</span>
<span class="k">if</span> <span class="nx">index</span> <span class="o">%</span> <span class="mi">2</span><span class="o">==</span><span class="mi">0</span> <span class="p">{</span><span class="c1">//取0到100的偶数</span>
<span class="nx">println</span><span class="p">(</span><span class="nx">index</span><span class="p">)</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="kd">var</span> <span class="nx">myName</span><span class="o">:</span><span class="nb">String</span><span class="o">?=</span><span class="s2">"小尛龙"</span><span class="c1">//?指明可选变量</span>
<span class="nx">myName</span><span class="o">=</span><span class="nx">nil</span><span class="c1">//以下if语句不执行</span>
<span class="k">if</span> <span class="kd">let</span> <span class="nx">name</span><span class="o">=</span><span class="nx">myName</span> <span class="p">{</span><span class="c1">//可选变量是空或false,语句不执行</span>
<span class="nx">println</span><span class="p">(</span><span class="s2">"hello,\(name)"</span><span class="p">)</span>
<span class="p">}</span>
</code></pre></div>
<ul>
<li>函数</li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="nx">func</span> <span class="nx">sayHello</span><span class="p">(</span><span class="nx">name</span><span class="o">:</span><span class="nb">String</span><span class="p">){</span>
<span class="nx">println</span><span class="p">(</span><span class="s2">"Hello\(name)"</span><span class="p">)</span>
<span class="p">}</span>
<span class="nx">sayHello</span><span class="p">(</span><span class="s2">"小尛龙"</span><span class="p">)</span><span class="c1">//</span>
<span class="nx">func</span> <span class="nx">getNums</span><span class="p">()</span><span class="o">-></span><span class="p">(</span><span class="nx">Int</span><span class="p">,</span><span class="nx">Int</span><span class="p">){</span><span class="c1">//返回值</span>
<span class="k">return</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">)</span>
<span class="p">}</span>
<span class="kd">let</span> <span class="p">(</span><span class="nx">a</span><span class="p">,</span><span class="nx">b</span><span class="p">)</span><span class="o">=</span><span class="nx">getNums</span><span class="p">()</span>
<span class="nx">println</span><span class="p">(</span><span class="nx">a</span><span class="p">)</span>
<span class="kd">var</span> <span class="nx">fun</span><span class="o">=</span><span class="nx">sayHello</span><span class="c1">//函数作为对象</span>
<span class="nx">fun</span><span class="p">(</span><span class="s2">"zhangsan"</span><span class="p">)</span>
</code></pre></div>
<ul>
<li>面向对象</li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="kr">class</span> <span class="nx">Hello</span><span class="p">{</span>
<span class="nx">func</span> <span class="nx">sayHello</span><span class="p">(){</span>
<span class="nx">println</span><span class="p">(</span><span class="s2">"hello,小尛龙"</span><span class="p">)</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="kd">var</span> <span class="nx">h</span> <span class="o">=</span> <span class="nx">Hello</span><span class="p">()</span>
<span class="nx">h</span><span class="p">.</span><span class="nx">sayHello</span><span class="p">()</span>
<span class="kr">class</span> <span class="nx">Hi</span><span class="o">:</span><span class="nx">Hello</span><span class="p">{</span><span class="c1">//继承</span>
<span class="kd">var</span> <span class="nx">_name</span><span class="o">:</span><span class="nb">String</span>
<span class="nx">init</span><span class="p">(</span><span class="nx">name</span><span class="o">:</span><span class="nb">String</span><span class="p">){</span><span class="c1">//构造方法</span>
<span class="nx">self</span><span class="p">.</span><span class="nx">_name</span><span class="o">=</span><span class="nx">name</span>
<span class="p">}</span>
<span class="nx">override</span> <span class="nx">func</span> <span class="nx">sayHello</span><span class="p">()</span> <span class="p">{</span><span class="c1">//重写方法</span>
<span class="nx">println</span><span class="p">(</span><span class="s2">"hi,\(self._name)"</span><span class="p">)</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="kd">var</span> <span class="nx">hi</span><span class="o">=</span><span class="nx">Hi</span><span class="p">(</span><span class="nx">name</span><span class="o">:</span><span class="s2">"小尛龙"</span><span class="p">)</span>
</code></pre></div>
使用七牛作为github博客的图床
2014-10-30T00:00:00+00:00
http://wuxiaolong.me/github/2014/10/30/qiniu-photo-bed
<p>文章的图片存放:</p>
<p>1.墙裂推荐七牛云储存,<a href="https://portal.qiniu.com/signup?code=3lk4saqepkdhu">注册地址</a>。</p>
<p>2.七牛云储存提供10G的免费空间,以及每月10G的流量.存放个人博客图片最好不过了</p>
<p>3.七牛云储存还有各种图形处理功能、缩略图、视频存放速度也给力(非打广告)。</p>
<!-- more -->
<p>首先要有个七牛账号,然后建立一个空间,我这里随便起名为WuXiaolong。空间建立好以后,进入空间设置界面:
<img src="http://wuxiaolong.qiniudn.com/2014-10-30-qiniu-photo-bed-1.png" alt="1">
进入<code>基本设置</code>-><code>镜像存储</code>,写上你要镜像加速的域名,这里是我的github路径:
<img src="http://wuxiaolong.qiniudn.com/2014-10-30-qiniu-photo-bed-2.png" alt="2">
点击确定就ok了。</p>
<p>然后在写博客的时候,注意图片的域名不要写相对路径了,要写类似于
<img src="http://wuxiaolong.qiniudn.com/2014-10-30-qiniu-photo-bed-3.png" alt="3">
这样的指向七牛镜像服务的url,其中/images开始的url和之前使用的相对路径一致。</p>
<p>七牛镜像加速基本原理是当有指向七牛的图片请求时,七牛会先看自己的空间下是否有该图片,如果不存在,则去上面设置的原始地址去取,同时在七牛下面保留一份,后续再有同样的请求时则直接由七牛返数据。</p>
手把手教你建github技术博客
2014-10-26T00:00:00+00:00
http://wuxiaolong.me/github/2014/10/26/build-blog
<hr>
<h2 id="目录"><a name="index"/>目录</h2>
<ul>
<li><a href="#for-the-crowd">一、适合人群</a></li>
<li><a href="#build-blog">二、github创建博客</a>
<ul>
<li>注册账号</li>
<li>创建页面仓库</li>
<li>项目设置</li>
<li>页面生成器</li>
<li>创建用户页面</li>
<li>页面发布</li>
<li>查看效果</li>
</ul></li>
<li><a href="#write-blog">三、如何发布博客</a>
<ul>
<li>安装 Ruby</li>
<li>安装 DevKit</li>
<li>安装 Python</li>
<li>安装 Jekyll</li>
<li>启动 Jekyll</li>
<li>图床</li>
</ul></li>
<li><a href="#ps">四、总结</a></li>
<li><a href="#appendix">五、附录</a></li>
</ul>
<!-- more -->
<p><a name="for-the-crowd"/></p>
<h2 id="一、适合人群">一、适合人群</h2>
<ul>
<li>喜欢写Blog的人</li>
<li>有一定的编程基础</li>
<li>爱折腾的人</li>
<li>熟练使用版本控制Git</li>
<li>了解使用Github</li>
<li>熟悉基本的MarkDown语法</li>
</ul>
<p><a name="build-blog"/></p>
<h2 id="二、github-创建博客">二、github 创建博客</h2>
<ul>
<li><h3 id="注册账号">注册账号</h3>
<p>地址:<a href="https://github.com/">https://github.com/</a><br>
输入账号、邮箱、密码,然后点击注册按钮.
<img src="http://wuxiaolong.qiniudn.com/2014-10-26-build-blog-1.png" alt="1"></p></li>
<li><h3 id="创建页面仓库">创建页面仓库</h3>
<p>这个仓库的名字需要和你的账号对应,格式:<code>yourname</code>.github.io
输入基本信息,然后点击创建仓库.
<img src="http://wuxiaolong.qiniudn.com/2014-10-26-build-blog-2.png" alt="2">
<img src="http://wuxiaolong.qiniudn.com/2014-10-26-build-blog-3.png" alt="3"></p></li>
<li><h3 id="项目设置">项目设置</h3>
<p><img src="http://wuxiaolong.qiniudn.com/2014-10-26-build-blog-4.png" alt="4"></p></li>
<li><h3 id="页面生成器">页面生成器</h3>
<p><img src="http://wuxiaolong.qiniudn.com/2014-10-26-build-blog-5.png" alt="5"></p></li>
<li><h3 id="创建用户页面">创建用户页面</h3>
<p><img src="http://wuxiaolong.qiniudn.com/2014-10-26-build-blog-6.png" alt="6"></p></li>
<li><h3 id="页面发布">页面发布</h3>
<p><img src="http://wuxiaolong.qiniudn.com/2014-10-26-build-blog-7.png" alt="7"></p></li>
<li><h3 id="查看效果">查看效果</h3>
<p>需要等待十分钟,自此,完成了github的博客创建,访问地址:yourname.github.io
<img src="http://wuxiaolong.qiniudn.com/2014-10-26-build-blog-8.png" alt="8">
<a name="write-blog"/></p></li>
</ul>
<h2 id="三、如何发布博客">三、如何发布博客</h2>
<p>以上只是创建了博客,那怎么发布自己的博客?共分为以下几个重要步骤(window下):</p>
<ul>
<li>安装 Ruby</li>
<li>安装 DevKit</li>
<li>安装 Python</li>
<li>安装 Jekyll</li>
</ul>
<h3 id="安装-ruby">安装 Ruby</h3>
<ul>
<li>下载地址:<a href="http://rubyinstaller.org/downloads/">http://rubyinstaller.org/downloads/</a> </li>
<li>安装
<ul>
<li>最好保持默认的路径 C:\Ruby200-x64, 因为安装包明确提出 “请不要使用带有空格的文件夹 (如: Program Files)”。</li>
<li>勾选 “Add Ruby executables to your PATH”,这样执行程序会被自动添加至 PATH 而避免不必要的头疼。</li>
</ul></li>
</ul>
<p><img src="http://wuxiaolong.qiniudn.com/2014-10-26-build-blog-9.png" alt="9">
* 命令行ruby -v来检测Ruby是否成功安装 </p>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="nx">C</span><span class="o">:</span><span class="err">\</span><span class="nx">Users</span><span class="err">\</span><span class="nx">WuXL</span><span class="o">></span><span class="nx">ruby</span> <span class="o">-</span><span class="nx">v</span>
<span class="err">返回</span><span class="nx">ruby</span> <span class="mf">2.1</span><span class="p">.</span><span class="mi">3</span><span class="nx">p242</span> <span class="p">(</span><span class="mi">2014</span><span class="o">-</span><span class="mi">09</span><span class="o">-</span><span class="mi">19</span> <span class="nx">revision</span> <span class="mi">47630</span><span class="p">)</span> <span class="p">[</span><span class="nx">x64</span><span class="o">-</span><span class="nx">mingw32</span><span class="p">]</span><span class="err">,</span><span class="nx">ok</span>
</code></pre></div>
<h3 id="五、安装-devkit">五、安装 DevKit</h3>
<ul>
<li>下载地址:<a href="http://rubyinstaller.org/downloads/">http://rubyinstaller.org/downloads/</a> </li>
<li>下载同系统及 Ruby 版本相对应的 DevKit 安装包。 例如,DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe 适用于64位 Windows 系统上的 Ruby 2.0.0 x64。</li>
<li>运行安装包并解压缩至某文件夹,如 C:\DevKit</li>
<li>通过初始化来创建 config.yml 文件。在命令行窗口内,输入下列命令:</li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="nx">cd</span> <span class="err">“</span><span class="nx">C</span><span class="o">:</span><span class="err">\</span><span class="nx">DevKit</span><span class="err">”</span>
<span class="nx">ruby</span> <span class="nx">dk</span><span class="p">.</span><span class="nx">rb</span> <span class="nx">init</span>
<span class="nx">notepad</span> <span class="nx">config</span><span class="p">.</span><span class="nx">yml</span>
</code></pre></div>
<ul>
<li>在打开的记事本窗口中,于末尾添加新的一行 - C:\Ruby200-x64,保存文件并退出。</li>
<li>回到命令行窗口内,审查(非必须)并安装。</li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="nx">ruby</span> <span class="nx">dk</span><span class="p">.</span><span class="nx">rb</span> <span class="nx">review</span>
<span class="nx">ruby</span> <span class="nx">dk</span><span class="p">.</span><span class="nx">rb</span> <span class="nx">install</span>
</code></pre></div>
<h3 id="安装-pyhton">安装 pyhton</h3>
<ul>
<li>下载地址:<a href="http://www.python.org/download/">http://www.python.org/download/</a> </li>
<li>添加安装路径 (如C:\Python27)至PATH。</li>
</ul>
<h3 id="安装-jekyll">安装 Jekyll</h3>
<ul>
<li>查看是否安装 gem 成功</li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="nx">gem</span> <span class="o">--</span><span class="nx">version</span>
<span class="err">返回</span><span class="mf">2.2</span><span class="p">.</span><span class="mi">2</span><span class="err">,</span><span class="nx">OK</span>
</code></pre></div>
<ul>
<li><p>更新为 淘宝镜像<br>
RubyGems镜像换为 淘宝、防止下载包出错(官网https://ruby.taobao.org/)</p></li>
<li><p>移除旧地址</p></li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="nx">gem</span> <span class="nx">sources</span> <span class="o">--</span><span class="nx">remove</span> <span class="nx">https</span><span class="o">:</span><span class="c1">//rubygems.org/ </span>
<span class="err">返回</span><span class="nx">https</span><span class="o">:</span><span class="c1">//rubygems.org/ removed from sources,ok</span>
</code></pre></div>
<ul>
<li>更新为淘宝镜像</li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="nx">gem</span> <span class="nx">sources</span> <span class="o">-</span><span class="nx">a</span> <span class="nx">https</span><span class="o">:</span><span class="c1">//ruby.taobao.org/</span>
<span class="err">返回</span><span class="nx">https</span><span class="o">:</span><span class="c1">//ruby.taobao.org/ added to sources,ok</span>
</code></pre></div>
<ul>
<li>安装jekyll</li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="nx">gem</span> <span class="nx">install</span> <span class="nx">jekyll</span>
</code></pre></div>
<ul>
<li>查看是否安装jekyll成功</li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="nx">jekyll</span> <span class="o">-</span><span class="nx">version</span>
<span class="err">返回</span><span class="nx">jekyll</span> <span class="mf">2.4</span><span class="p">.</span><span class="mi">0</span><span class="err">,</span><span class="nx">ok</span>
</code></pre></div>
<ul>
<li>安装 依赖包 </li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="nx">gem</span> <span class="nx">install</span> <span class="nx">wdm</span>
</code></pre></div>
<ul>
<li>安装依赖包代码 高亮 </li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="nx">gem</span> <span class="nx">install</span> <span class="nx">rdiscount</span>
</code></pre></div>
<ul>
<li>安装 ‘Easy Install’</li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="err">浏览</span> <span class="nx">https</span><span class="o">:</span><span class="c1">//pypi.python.org/pypi/setuptools#installation-instructions 来查看详细的安装指南。</span>
<span class="err">对于</span> <span class="nx">Windows</span> <span class="mi">7</span> <span class="err">的机器,下载</span> <span class="nx">ez_setup</span><span class="p">.</span><span class="nx">py</span> <span class="err">并保存,例如,至</span><span class="nx">C</span><span class="o">:</span><span class="err">\。</span> <span class="err">然后从命令行使用</span> <span class="nx">Python</span> <span class="err">运行此文件:</span><span class="nx">python</span> <span class="err">“</span><span class="nx">C</span><span class="o">:</span><span class="err">\</span><span class="nx">ez_setup</span><span class="p">.</span><span class="nx">py</span><span class="err">”</span>
<span class="err">添加</span> <span class="err">‘</span><span class="nx">Python</span> <span class="nx">Scripts</span><span class="err">’</span> <span class="err">路径</span> <span class="p">(</span><span class="err">如:</span> <span class="nx">C</span><span class="o">:</span><span class="err">\</span><span class="nx">Python27</span><span class="err">\</span><span class="nx">Scripts</span><span class="p">)</span> <span class="err">至</span> <span class="nx">PATH</span>
</code></pre></div>
<ul>
<li>安装 Pygments</li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="err">确保</span> <span class="nx">easy_install</span> <span class="err">已经正确安装</span>
<span class="nx">easy_install</span> <span class="o">--</span><span class="nx">version</span>
<span class="err">输出示例:</span>
<span class="nx">setuptools</span> <span class="mf">3.1</span>
</code></pre></div>
<ul>
<li>使用 “easy_install” 来安装 Pygments</li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="nx">easy_install</span> <span class="nx">Pygments</span>
</code></pre></div>
<ul>
<li>安装指定版本的yajl</li>
</ul>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="err">删除</span><span class="mi">86</span><span class="err">版本的</span><span class="nx">yajl</span>
<span class="nx">C</span><span class="o">:</span><span class="err">\</span><span class="nx">OpenSources</span><span class="err">\</span><span class="nx">liyouhai</span><span class="o">></span><span class="nx">gem</span> <span class="nx">uninstall</span> <span class="nx">yajl</span><span class="o">-</span><span class="nx">ruby</span>
<span class="nx">Successfully</span> <span class="nx">uninstalled</span> <span class="nx">yajl</span><span class="o">-</span><span class="nx">ruby</span><span class="o">-</span><span class="mf">1.1</span><span class="p">.</span><span class="mi">0</span><span class="o">-</span><span class="nx">x86</span><span class="o">-</span><span class="nx">mingw32</span>
<span class="err">安装指定版本的</span><span class="nx">yajl</span>
<span class="nx">C</span><span class="o">:</span><span class="err">\</span><span class="nx">OpenSources</span><span class="err">\</span><span class="nx">liyouhai</span><span class="o">></span><span class="nx">gem</span> <span class="nx">install</span> <span class="nx">yajl</span><span class="o">-</span><span class="nx">ruby</span> <span class="o">-</span><span class="nx">v</span> <span class="mf">1.1</span><span class="p">.</span><span class="mi">0</span> <span class="o">--</span><span class="nx">platform</span><span class="o">=</span><span class="nx">ruby</span>
<span class="nx">Fetching</span><span class="o">:</span> <span class="nx">yajl</span><span class="o">-</span><span class="nx">ruby</span><span class="o">-</span><span class="mf">1.1</span><span class="p">.</span><span class="mi">0</span><span class="p">.</span><span class="nx">gem</span> <span class="p">(</span><span class="mi">100</span><span class="o">%</span><span class="p">)</span>
<span class="nx">Temporarily</span> <span class="nx">enhancing</span> <span class="nx">PATH</span> <span class="nx">to</span> <span class="nx">include</span> <span class="nx">DevKit</span><span class="p">...</span>
<span class="nx">Building</span> <span class="kr">native</span> <span class="nx">extensions</span><span class="p">.</span> <span class="nx">This</span> <span class="nx">could</span> <span class="nx">take</span> <span class="nx">a</span> <span class="k">while</span><span class="p">...</span>
<span class="nx">Successfully</span> <span class="nx">installed</span> <span class="nx">yajl</span><span class="o">-</span><span class="nx">ruby</span><span class="o">-</span><span class="mf">1.1</span><span class="p">.</span><span class="mi">0</span>
<span class="nx">Parsing</span> <span class="nx">documentation</span> <span class="k">for</span> <span class="nx">yajl</span><span class="o">-</span><span class="nx">ruby</span><span class="o">-</span><span class="mf">1.1</span><span class="p">.</span><span class="mi">0</span>
<span class="nx">unable</span> <span class="nx">to</span> <span class="nx">convert</span> <span class="s2">"\x90"</span> <span class="nx">from</span> <span class="nx">ASCII</span><span class="o">-</span><span class="mi">8</span><span class="nx">BIT</span> <span class="nx">to</span> <span class="nx">UTF</span><span class="o">-</span><span class="mi">8</span> <span class="k">for</span> <span class="nx">lib</span><span class="o">/</span><span class="nx">yajl</span><span class="o">/</span><span class="nx">yajl</span><span class="p">.</span><span class="nx">so</span><span class="p">,</span> <span class="nx">skipping</span>
<span class="nx">Installing</span> <span class="nx">ri</span> <span class="nx">documentation</span> <span class="k">for</span> <span class="nx">yajl</span><span class="o">-</span><span class="nx">ruby</span><span class="o">-</span><span class="mf">1.1</span><span class="p">.</span><span class="mi">0</span>
<span class="mi">1</span> <span class="nx">gem</span> <span class="nx">installed</span>
</code></pre></div>
<h3 id="启动-jekyll">启动 Jekyll</h3>
<p>按照官方的 Jekyll<a href="http://jekyllrb.com/docs/quickstart/"><code>快速开始手册</code></a>的步骤,或者克隆<a href="https://github.com/jekyll/jekyll/wiki/Sites"><code>模板</code></a>到本地,cmd下cd进入目录运行如下命令,就能在 localhost:4000 中预览了,大功告成。</p>
<div class="highlight"><pre><code class="language-js" data-lang="js"> <span class="nx">jekyll</span> <span class="nx">serve</span> <span class="o">-</span><span class="nx">watch</span> <span class="p">(</span><span class="err">或</span><span class="nx">jekyll</span> <span class="nx">serve</span> <span class="o">-</span><span class="nx">w</span><span class="p">)</span>
</code></pre></div>
<h3 id="图床">图床</h3>
<p>1.墙裂推荐七牛云储存,<a href="https://portal.qiniu.com/signup?code=3lk4saqepkdhu">注册地址</a>。</p>
<p>2.七牛云储存提供10G的免费空间,以及每月10G的流量.存放个人博客图片最好不过了</p>
<p>3.七牛云储存还有各种图形处理功能、缩略图、视频存放速度也给力(非打广告)。</p>
<p>具体使用见<a href="http://wuxiaolong.github.io/blog/2014/10/30/qiniu-photo-bed.html">使用七牛作为github博客的图床</a></p>
<p><a name="ps"/></p>
<h2 id="四、总结">四、总结</h2>
<p>一开始认为 GitHub.io 技术博客很有难度,从10月23日着手,经历24日一天摸索,知道了jekyll,MarkDown(其实就是github的 READ.md ,幸亏之前自学过READ.md语法),也有幸自学了git,不然还不知道这个建博客 什么时候能做好,进jekyll安装就花了半天,反正各种错误,然后各种谷歌百度 ,25日一天就写了这个博客(集众建博客的帖子所长),问题主要是没有 文章摘要 ,一下子全部显示出来,我有强迫症,不能接受这个,到26日才解决,如果您没有一定的编程基础,爱折腾,坚持不懈的精神,还是不要建自己的 GitHub.io 技术博客吧。</p>
<p><a name="appendix"/></p>
<h2 id="五、附录">五、附录</h2>
<p>jekyll中文官网:<a href="http://jekyllcn.com/">http://jekyllcn.com/</a> <br>
Markdown 语法说明:<a href="http://wowubuntu.com/markdown/#autoescape">http://wowubuntu.com/markdown/#autoescape</a> </p>
Android Studio快捷键设置成跟Eclipse一样
2014-10-21T00:00:00+00:00
http://wuxiaolong.me/android%20studio/2014/10/21/Android-Studio-shortcut-keys-arranged-like-Eclipse
<p>1、File->settings
<img src="http://wuxiaolong.qiniudn.com/2014-10-21-Android-Studio-shortcut-keys-arranged-like-Eclipse-1.png" alt="">
2、Keymap,设置成Eclipse
<img src="http://wuxiaolong.qiniudn.com/2014-10-21-Android-Studio-shortcut-keys-arranged-like-Eclipse-2.png" alt="">
3、设置个别快捷键
注释
Comment with Line Comment =>Ctrl+斜杠,改成Ctrl+Shift+c
快捷设置set和get方法
Alt+insert
自动导包
<img src="http://wuxiaolong.qiniudn.com/2014-10-21-Android-Studio-shortcut-keys-arranged-like-Eclipse-3.png" alt=""></p>
Android Studio安装Genymotion插件
2014-10-21T00:00:00+00:00
http://wuxiaolong.me/android%20studio/2014/10/21/Android-Studio-Genymotion
<p>1、File->settings
<img src="http://wuxiaolong.qiniudn.com/2014-10-21-Android-Studio-Genymotion-1.png" alt="">
2、搜索Plugins,安装Genymotion插件
<img src="http://wuxiaolong.qiniudn.com/2014-10-21-Android-Studio-Genymotion-2.png" alt="">
3、settings->设置Genymotion安装路径
<img src="http://wuxiaolong.qiniudn.com/2014-10-21-Android-Studio-Genymotion-3.png" alt="">
4、ok,over
<img src="http://wuxiaolong.qiniudn.com/2014-10-21-Android-Studio-Genymotion-4.png" alt=""></p>
learngit
2014-08-26T00:00:00+00:00
http://wuxiaolong.me/life/2014/08/26/learngit
<ul>
<li><p>安装git
下载地址:http://msysgit.github.io/</p></li>
<li><p>设置账号
$ git config --global user.name "Your Name"</p></li>
</ul>
<p>$ git config --global user.email "email@example.com"</p>
<ul>
<li>查看配置信息
要检查已有的配置信息,可以使用 git config --list 命令:</li>
</ul>
<p>$ git config --list</p>
<ul>
<li>创建
git init<br></li>
</ul>
<p>1、$ mkdir dir dir需要创建的目录</p>
<p>2、$ cd dir </p>
<p>3、$ pwd</p>
<p>4、$ git init </p>
<p>pwd命令用于显示当前目录。</p>
<ul>
<li>把文件添加到版本库</li>
</ul>
<p>放到learngit目录下</p>
<p>第一步,用命令git add告诉Git,把文件添加到仓库:</p>
<p>$ git add learngit.txt</p>
<p>第二步,用命令git commit告诉Git,把文件提交到仓库:</p>
<p>$ git commit -m "wrote a readme file"</p>
<p>git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容</p>
<ul>
<li>$ cat learngit.txt</li>
</ul>
<p>查看文件内容</p>
<ul>
<li><p>git status
可以让我们时刻掌握仓库当前的状态</p></li>
<li><p>git diff
顾名思义就是查看difference</p></li>
</ul>
<p>$ git diff learngit.txt </p>
<ul>
<li>git log
命令显示从最近到最远的提交日志</li>
</ul>
<p>如果嫌输出信息太多,看得眼花缭乱的,可以试试加上
--pretty=oneline参数:</p>
<ul>
<li>删除文件
一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:</li>
</ul>
<p>$ rm test.txt</p>
<ul>
<li>github
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,</li>
</ul>
<p>如果有,再看看这个目录下有没有id<u>rsa和id</u>rsa.pub这两个文件,</p>
<p>如果已经有了,可直接跳到下一步。</p>
<p>如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:</p>
<p>$ ssh-keygen -t rsa -C "youremail@example.com"</p>
<p>你需要把邮件地址换成你自己的邮件地址,然后一路回车,</p>
<p>使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。</p>
<p>如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id<u>rsa和id</u>rsa.pub两个文件,</p>
<p>这两个就是SSH Key的秘钥对,id<u>rsa是私钥,不能泄露出去,id</u>rsa.pub是公钥,可以放心地告诉任何人。</p>
<p>第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面</p>
<p>然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:</p>
<ul>
<li>要关联一个远程库,使用命令</li>
</ul>
<p>git remote add origin git@server-name:path/repo-name.git;</p>
<p>关联后,使用命令git push -u origin master第一次推送master分支的所有内容;</p>
<p>此后,每次本地提交后,只要有必要,就可以使用命令</p>
<p>git push origin master推送最新修改;</p>
<ul>
<li><p>git pull
从远程(github)更新下来</p></li>
<li><p>git clone
克隆</p></li>
</ul>
<p>Create a new repository on the command line</p>
<p>touch README.md</p>
<p>git init</p>
<p>git add README.md</p>
<p>git commit -m "first commit"</p>
<p>git remote add origin https://github.com/WuXiaolong/ApkTest.git</p>
<p>git push -u origin master</p>
<p>Push an existing repository from the command line</p>
<p>git remote add origin https://github.com/WuXiaolong/ApkTest.git</p>
<p>git push -u origin master</p>
<p>Import code from an old repository</p>
<p>You can initialize this repository with code from a Subversion, Mercurial, or TFS project.</p>
Eclipse中整合git
2014-08-26T00:00:00+00:00
http://wuxiaolong.me/life/2014/08/26/eclipse-git
<p>首先在github上面创建工程。</p>
<p>在个人主页上点击Responsitories选项卡的New</p>
<p><img src="http://wuxiaolong.qiniudn.com/2014-08-26-eclipse-git-1.png" alt=""></p>
<p>填写一些信息,点Create respository</p>
<p><img src="http://wuxiaolong.qiniudn.com/2014-08-26-eclipse-git-2.png" alt=""></p>
<p>github上的项目就创建好了。
在Eclipse中创建一个工程。
然后在工程上右击->Team->Share project->git->next.</p>
<p><img src="http://wuxiaolong.qiniudn.com/2014-08-26-eclipse-git-3.png" alt=""></p>
<p><img src="http://wuxiaolong.qiniudn.com/2014-08-26-eclipse-git-4.png" alt=""></p>
<p>选择Use or create repository in parent folder of project->Create Repository,如下图,点finish。</p>
<p><img src="http://wuxiaolong.qiniudn.com/2014-08-26-eclipse-git-5.png" alt=""></p>
<p>执行完成之后项目文件夹下就会创建好一个.git的文件夹,仓库就创建好了。</p>
<p>由于项目中的有一些文件没有必要上传,比如bin文件夹,需要在项目中设置好。</p>
<p>展开对应的项目,有小箭头的表示需要上传到服务器的目录,在不想要上传的目录上右击,Team->Ignoe,该目录就会被忽略了。</p>
<p>下面来commit代码到本机一下。</p>
<p>项目上右击Team->commit。</p>
<p><img src="http://wuxiaolong.qiniudn.com/2014-08-26-eclipse-git-6.png" alt=""></p>
<p>选中要commit的文件,点commit,完成之后,代码就上传到本地的服务器了。</p>
<p>接下来把代码上传到github的服务器。</p>
<p>命令行中进入到项目的文件夹,运行
git remote add origin https://github.com/WuXiaolong/ApkTest.git</p>
<p><img src="http://wuxiaolong.qiniudn.com/2014-08-26-eclipse-git-7.png" alt="">
再执行
git push -u origin master</p>
<p>成功执行后就像这样:</p>
<p><img src="http://wuxiaolong.qiniudn.com/2014-08-26-eclipse-git-8.png" alt="">
查看github的项目主页,发现文件已经上传好。</p>
<p><img src="http://wuxiaolong.qiniudn.com/2014-08-26-eclipse-git-9.png" alt=""></p>
<p>之后在Eclipse中修改好项目代码之后,commit,之后pull,为止代码冲突,然后项目上右击Team->push to Upstream就可以进行代码提交。</p>
<p>上传到github上之后,团队中另外的成员可以通过Eclipse->File->Import->Project from Git->URI来提取工程。</p>
<p>在团队开发中,通常在新的一天的开始工作之前,把最新的代码fecth下来。</p>
<p>直接在项目想右击->Team->fetch
再执行->Team->Merge.</p>
<p>服务器上的新文件就会添加进来了。</p>
Eclipse ADT的Custom debug keystore所需证书规格
2014-06-30T00:00:00+00:00
http://wuxiaolong.me/android/2014/06/30/custom-debug-keystore
<p>自定义的调试证书,也需要保证和默认证书一样的密码,别名alias和别名密码。</p>
<p>默认证书信息如下:</p>
<div class="highlight"><pre><code class="language-js" data-lang="js"><span class="lineno">1</span> <span class="nx">Keystore</span> <span class="nx">name</span><span class="o">:</span> <span class="err">“</span><span class="nx">debug</span><span class="p">.</span><span class="nx">keystore</span><span class="err">”</span>
<span class="lineno">2</span> <span class="nx">Keystore</span> <span class="nx">password</span><span class="o">:</span> <span class="err">“</span><span class="nx">android</span><span class="err">”</span>
<span class="lineno">3</span> <span class="nx">Key</span> <span class="nx">alias</span><span class="o">:</span> <span class="err">“</span><span class="nx">androiddebugkey</span><span class="err">”</span>
<span class="lineno">4</span> <span class="nx">Key</span> <span class="nx">password</span><span class="o">:</span> <span class="err">“</span><span class="nx">android</span><span class="err">”</span></code></pre></div>
<p>遵循这个规则就可以用自定义调试证书了。</p>
<p>Android apk签名方法
http://hi.baidu.com/40406_jun/item/8b936db4a9a0e79b19469782</p>
java.lang.IllegalStateException:Fragment(XXFragment) not attached to Activity
2014-06-24T00:00:00+00:00
http://wuxiaolong.me/android/2014/06/24/java-lang-IllegalStateException-Fragment-not-attached-to-Activity
<p>java.lang.IllegalStateException: Fragment already active</p>
<p>说明:当Fragment处于激活状态,使用Fragment.setArguments(bundle)就会跑出该异常</p>
<p>解决:setArguments()之前,判断Fragment是否可见,Fragment.isVisible();</p>
<p>转载:http://jogickis.iteye.com/blog/1990790</p>
<p>下边两个问题,是在开发中碰到的一些关于Fragment的偶发性的问题,下面是网上搜了一些解决方式:</p>
<p>1、关于Fragment(XXFragment) not attached to Activity 异常。出现该异常,是因为Fragment的还没有Attach到Activity时,调用了如getResource()等,需要上下文Content的函数。</p>
<p>解决方法,就是等将调用的代码写在OnStart()中。网上还有几处这样的参考:http://stackoverflow.com/questions/10919240/fragment-myfragment-not-attached-to-activity<br>
回答的主要是在调用
getResources().getString(R.string.app<u>name);
getResources().getString(R.string.app</u>name);</p>
<p>之前增加一个判断isAdded(),两外说这个异常解决办法的有http://stackoverflow.com/questions/6870325/android-compatibility-package-fragment-not-attached-to-activity
这个是针对另外一种情况下的解决方式。</p>
<p>2、在使用Fragment保存参数的时候,可能是因为需要保存的参数比较大或者比较多,这种情况下页会引起异常。比如代码</p>
<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="n">Bundle</span> <span class="n">b</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Bundle</span><span class="o">();</span> <span class="n">b</span><span class="o">.</span><span class="na">putParcelable</span><span class="o">(</span><span class="s">"bitmap"</span><span class="o">,</span> <span class="n">bitmap2</span><span class="o">);</span> <span class="n">imageRecognitionFragment</span><span class="o">.</span><span class="na">setArguments</span><span class="o">(</span><span class="n">b</span><span class="o">);</span>
<span class="n">Bundle</span> <span class="n">b</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Bundle</span><span class="o">();</span> <span class="n">b</span><span class="o">.</span><span class="na">putParcelable</span><span class="o">(</span><span class="s">"bitmap"</span><span class="o">,</span> <span class="n">bitmap2</span><span class="o">);</span> <span class="n">imageRecognitionFragment</span><span class="o">.</span><span class="na">setArguments</span><span class="o">(</span><span class="n">b</span><span class="o">);</span>
</code></pre></div>
<p>设置好参数,并且添加hide(),add(),方法之后,需要commit(),来实现两个Fragment跳转的时候,这种情形下参数需要进行系统保存,但是这个时候你已经实现了跳转,系统参数却没有保存。
此时就会报java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState异常。</p>
<p>分析原因:你并不需要系统保存的参数,只要你自己设置的参数能够传递过去,在另外一个Fragment里能够顺利接受就行了,现在android里提供了另外一种形式的提交方式commitAllowingStateLoss(),从名字上就能看出,这种提交是允许状态值丢失的。到此问题得到完美解决,值的传递是你自己控制的。</p>
<p>这里也说一下另外一个问题,bitmap 也可以通过Bundle传递的,使用putParacelable就可以了</p>
<p>转载:http://www.cnblogs.com/fanglove/archive/2013/05/09/3069325.html</p>
Android打包错误Export aborted because fatal lint errors were found
2013-11-22T00:00:00+00:00
http://wuxiaolong.me/android/2013/11/22/Export-aborted-because-fatal-lint-errors-were-found
<p>打包时报如下错误:
<img src="http://wuxiaolong.qiniudn.com/2013-11-22-Export-aborted-because-fatal-lint-errors-were-found-1.jpg" alt=""></p>
<p>Export aborted because fatal lint errors were found. These are listed in the Lint View. Either fix these before running Export again,or turn off"Run full error check when exporting app" in the Android > Lint Error Checking preference page.</p>
<p>解决方法如下: </p>
<p>1、选择Project->Properties,弹出“Properties for 你的项目名称”
<img src="http://wuxiaolong.qiniudn.com/2013-11-22-Export-aborted-because-fatal-lint-errors-were-found-3.jpg" alt="">
2、选择Adnroid Lint Preferences->Configure Workspace Settings...,弹出Preferences(Filtered)对话框,将"Run full error check when exporting app and abort if fatal errors are found "前的勾去掉,点击Apply再点击OK.
<img src="http://wuxiaolong.qiniudn.com/2013-11-22-Export-aborted-because-fatal-lint-errors-were-found-2.jpg" alt="">
3、回到项目右击选择Android Tools->Clean Lint Markers,待项目自己更新完成即可。
这时就可以打包了。</p>
Android屏幕适配不同的资源图片、布局
2013-07-23T00:00:00+00:00
http://wuxiaolong.me/android/2013/07/23/screen-adaptation
<p>在Android 2.1版本之前,存放资源图片的文件夹名称为drawable,应用程序用到的所有的资源图片都放在其中,所以很难解决不同屏幕大小的图片适配问题。</p>
<p>1、资源图片</p>
<p>自android 2.1版本开始,存放资源图片的文件夹由原来的一个drawable文件夹变成了drawable-hdpi、drawable-mdpi和drawable-ldpi,这是为了支持不同终端设备的不同分辨率。</p>
<p>drawable-hdpi、drawable-mdpi、drawable-ldpi的区别:</p>
<p>(1)drawable-hdpi里面存放高分辨率的图片,如WVGA(480x800),FWVGA(480x854)</p>
<p>(2)drawable-mdpi里面存放中等分辨率的图片,如(320x480)</p>
<p>(3)drawable-ldpi里面存放低分辨率的图片,如QVGA(240x320)</p>
<p>系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片,同一资源的不同分辨率的图片应该命以相同的名称存放在不同的资源图片文件夹中。</p>
<p>2、布局的适配:</p>
<p>在第1点中我们已经解决了资源图片的适配问题,但是图片的大小不同势必会造成布局的差异,如果使用一个统一的布局文件,
可能会造成资源图片无法完整显示在屏幕内,所以对于这种问题,解决方法是建立不同的layout文件夹,对于不同屏幕的分辨率,书写其专用的.xml文件。</p>
<p>多个layout文件夹在命名上有相应规则,以分辨率480x854为例,需要建立480x854像素的layout文件夹,命名:layout-854x480,</p>
<p>有两点需要<code>注意</code>:①大数(854)必须在前,否则会报错;②两个数字之间的符号是小写英文字母“x”,不是乘号。系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的布局文件。如下:
<img src="http://wuxiaolong.qiniudn.com/2013-07-23-screen-adaptation-1.jpg" alt="布局文件"></p>
<p>如果你建立的layout文件夹的分辨率是你的eclipse加载的android工具所支持的分辨率,那么在可视化的布局界面中会自动给出屏幕分辨率、屏幕尺寸(红色箭头处)等参数,值得注意的是,如果红色箭头处是“Custom…”,那么你就要人为对其进行修改,选择合适的屏幕尺寸。
<img src="http://wuxiaolong.qiniudn.com/2013-07-23-screen-adaptation-2.jpg" alt="选择合适的屏幕尺寸"></p>
<p>3、设置屏幕的横竖屏显示:
如果不做特殊说明,开发的应用是横竖屏重力敏感的,如果禁止横竖屏切换,需要在AndroidManifest.xml文件中做相应的修改:</p>
<div class="highlight"><pre><code class="language-java" data-lang="java"> <span class="o"><</span><span class="n">activity</span> <span class="nl">android:</span><span class="n">name</span><span class="o">=</span><span class="s">".MenuView"</span>
<span class="nl">android:</span><span class="n">label</span><span class="o">=</span><span class="s">"@string/app_name"</span>
<span class="nl">android:</span><span class="n">screenOrientation</span><span class="o">=</span><span class="s">"portrait"</span><span class="o">></span>
</code></pre></div>
<p>在activity的属性中添“android:screenOrientation="portrait"”,portrait表示竖屏,横屏则用landscape表示。</p>
<p>4、dip和px的问题:</p>
<p>在网上找了好多关于“dip和px的区别”的资料,但是解释的都不是很清楚。
我很肤浅的理解:dip是相对的,px是绝对的,所以dip能够有效解决不同型号手机不同分辨率的布局适配问题。</p>
<p>但是由于在第2点中已经用不同layout文件夹解决了布局适配的问题,所以在其中使用dip就是没有意义的,甚至更加麻烦。
既然已经分了不同的布局文件,所以在各个布局文件中直接使用px单位就可以了。</p>
Android如何防止apk程序被反编译
2013-07-23T00:00:00+00:00
http://wuxiaolong.me/android/2013/07/23/how-to-prevent-the-APK-program-by-decompile
<p>作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹。proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。新建项目都会有以下两个文件:
<img src="http://wuxiaolong.qiniudn.com/2013-07-18-mobile-phone-information-acquisition-1.png" alt="">
project.properties文件“proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt”注释放开。
<img src="http://wuxiaolong.qiniudn.com/2013-07-18-mobile-phone-information-acquisition-2.png" alt="">
然后在proguard-project.txt文件里做混淆,例如:</p>
<div class="highlight"><pre><code class="language-java" data-lang="java"> <span class="err">#</span><span class="o">---------------</span><span class="nl">Begin:</span> <span class="n">support</span><span class="o">-</span><span class="n">v4包</span> <span class="o">----------</span>
<span class="o">-</span><span class="n">libraryjars</span> <span class="n">libs</span><span class="o">/</span><span class="n">android</span><span class="o">-</span><span class="n">support</span><span class="o">-</span><span class="n">v4</span><span class="o">.</span><span class="na">jar</span>
<span class="o">-</span><span class="n">dontwarn</span> <span class="n">android</span><span class="o">.</span><span class="na">support</span><span class="o">.</span><span class="na">v4</span><span class="o">.**</span> <span class="err">#</span><span class="n">打包时忽略以下类的警告</span>
<span class="o">-</span><span class="n">keep</span> <span class="kd">class</span> <span class="nc">android</span><span class="o">.</span><span class="na">support</span><span class="o">.</span><span class="na">v4</span><span class="o">.**</span> <span class="o">{</span> <span class="o">*;</span> <span class="o">}</span>
<span class="o">-</span><span class="n">keep</span> <span class="kd">interface</span> <span class="nc">android</span><span class="o">.</span><span class="na">support</span><span class="o">.</span><span class="na">v4</span><span class="o">.</span><span class="na">app</span><span class="o">.**</span> <span class="o">{</span> <span class="o">*;</span> <span class="o">}</span>
<span class="o">-</span><span class="n">keep</span> <span class="kd">public</span> <span class="kd">class</span> <span class="err">* </span><span class="nc">extends</span> <span class="n">android</span><span class="o">.</span><span class="na">support</span><span class="o">.</span><span class="na">v4</span><span class="o">.**</span>
<span class="err">#</span><span class="o">-</span><span class="n">keep</span> <span class="kd">public</span> <span class="kd">class</span> <span class="err">* </span><span class="nc">extends</span> <span class="n">android</span><span class="o">.</span><span class="na">app</span><span class="o">.</span><span class="na">Fragment</span>
<span class="err">#</span><span class="o">---------------</span><span class="nl">End:</span> <span class="n">support</span><span class="o">-</span><span class="n">v4包</span> <span class="o">----------</span>
</code></pre></div>
<p>以上是混淆了support-v4包,如果混淆其他的jar,举一反三。
比如A.jar,它的包名是a.b.c.d。然后做混淆就如下:</p>
<div class="highlight"><pre><code class="language-java" data-lang="java"> <span class="o">-</span><span class="n">keep</span> <span class="kd">class</span> <span class="nc">a</span><span class="o">.</span><span class="na">b</span><span class="o">.</span><span class="na">c</span><span class="o">.</span><span class="na">d</span><span class="o">.**</span> <span class="o">{</span> <span class="o">*;</span> <span class="o">}</span>
</code></pre></div>
<p>正常的编译签名后就可以防止代码被反编译了。反编译经过代码混淆的apk得到的代码应该类似于下面的效果,是很难看懂的:
<img src="http://wuxiaolong.qiniudn.com/2013-07-18-mobile-phone-information-acquisition-3.png" alt=""></p>
Android之ListView属性
2013-07-19T00:00:00+00:00
http://wuxiaolong.me/android/2013/07/19/listView
<div class="highlight"><pre><code class="language-java" data-lang="java"> <span class="o"><</span><span class="n">ListView</span>
<span class="nl">android:</span><span class="n">divider</span><span class="o">=</span><span class="s">"@drawable/song_item_line"</span> <span class="n">item之间的分割线</span>
<span class="nl">android:</span><span class="n">cacheColorHint</span><span class="o">=</span><span class="s">"#00000000"</span><span class="n">拖动系统切换item时的缓存色</span>
<span class="nl">android:</span><span class="n">scrollbars</span><span class="o">=</span><span class="s">"none"</span><span class="n">不显示滚动条</span>
<span class="nl">android:</span><span class="n">listSelector</span><span class="o">=</span><span class="s">"#00000000"</span><span class="o">/></span><span class="n">选中时背景色</span>
<span class="nl">android:</span><span class="n">fadingEdge</span><span class="o">=</span><span class="s">"none"</span> <span class="n">设置后上边和下边没有阴影了</span>
<span class="nl">android:</span><span class="n">fastScrollEnabled</span><span class="o">=</span><span class="s">"true"</span> <span class="n">快速滚动滑块</span>
<span class="nl">android:</span><span class="n">cacheColorHint</span> <span class="n">如果你是用图片做背景的话</span><span class="err">,</span><span class="nl">那也只要将android:</span><span class="n">cacheColorHint指定为透明</span><span class="err">(#</span><span class="mi">00000000</span><span class="err">)</span><span class="n">就可以了</span><span class="o">.</span>
<span class="nl">android:</span><span class="n">divider</span><span class="o">=</span><span class="s">"@drawable/list_driver"</span> <span class="n">设置显示分割线图形</span><span class="err">,</span><span class="n">如果不想显示分割线则只要设置为</span>
<span class="nl">android:</span><span class="n">divider</span><span class="o">=</span><span class="s">"@null"</span> <span class="n">就可以了</span><span class="err">,</span><span class="n">分割线可以自定义颜色</span><span class="err">、</span><span class="n">或图片</span><span class="o">.</span>
<span class="nl">android:</span><span class="n">dividerHeight</span><span class="o">=</span><span class="s">"6px"</span><span class="n">设置分割线高度像素</span><span class="o">.</span>
<span class="nl">android:</span><span class="n">fadeScrollbars</span><span class="o">=</span><span class="s">"true"</span> <span class="n">滚动条的自动隐藏和显示</span><span class="o">.</span>
<span class="nl">android:</span><span class="n">transcriptMode</span><span class="o">=</span><span class="s">"alwaysScroll"</span> <span class="err">(</span><span class="n">支持ScrollBar</span><span class="err">)</span><span class="n">自动滑动到最底部</span><span class="o">.</span>
<span class="nl">android:</span><span class="n">stackFromBottom</span><span class="o">=</span><span class="s">"true"</span> <span class="n">设置你做好的列表显示在列表的最下面</span><span class="err">,</span><span class="n">值为true和false</span><span class="o">.</span>
<span class="nl">android:</span><span class="n">drawSelectorOnTop</span><span class="o">=</span><span class="s">"true"</span> <span class="n">点击某一条记录</span><span class="err">,</span><span class="n">颜色会显示在最上面</span><span class="err">,</span><span class="n">记录上的文字被遮住</span><span class="err">,</span><span class="n">所以点击文字不放</span><span class="err">,</span><span class="n">文字就看不到</span>
<span class="nl">android:</span><span class="n">drawSelectorOnTop</span><span class="o">=</span><span class="s">"false"</span> <span class="n">点击某条记录不放</span><span class="err">,</span><span class="n">颜色会在记录的后面</span><span class="err">,</span><span class="n">成为背景色</span><span class="err">,</span><span class="n">但是记录内容的文字是可见的</span>
<span class="o">/></span>
</code></pre></div>
android之获取手机信息
2013-07-18T00:00:00+00:00
http://wuxiaolong.me/android/2013/07/18/mobile-phone-information-acquisition
<p>android获取手机信息(号码,内存,CPU,分辨率,MAC,IP,SD卡,IMEI,经纬度,信号强度等等)</p>
<div class="highlight"><pre><code class="language-java" data-lang="java"> <span class="kn">package</span> <span class="n">com</span><span class="o">.</span><span class="na">android</span><span class="o">.</span><span class="na">xiaomolong</span><span class="o">.</span><span class="na">example</span><span class="o">.</span><span class="na">apkdemo</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.io.BufferedReader</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.io.File</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.io.FileReader</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.io.IOException</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.io.InputStream</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.io.InputStreamReader</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.net.HttpURLConnection</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.net.InetAddress</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.net.MalformedURLException</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.net.NetworkInterface</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.net.SocketException</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.net.URL</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.net.URLConnection</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.util.Enumeration</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.util.List</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.app.Activity</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.app.ActivityManager</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.app.ActivityManager.MemoryInfo</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.app.AlertDialog</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.content.Context</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.content.DialogInterface</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.location.Criteria</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.location.Location</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.location.LocationListener</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.location.LocationManager</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.net.ConnectivityManager</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.net.NetworkInfo</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.net.wifi.WifiInfo</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.net.wifi.WifiManager</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.os.Bundle</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.os.Environment</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.os.StatFs</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.telephony.CellLocation</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.telephony.NeighboringCellInfo</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.telephony.PhoneStateListener</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.telephony.ServiceState</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.telephony.SignalStrength</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.telephony.TelephonyManager</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.telephony.cdma.CdmaCellLocation</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.telephony.gsm.GsmCellLocation</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.text.format.Formatter</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.util.DisplayMetrics</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.util.Log</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.view.Gravity</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.view.WindowManager</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">android.widget.Toast</span><span class="o">;</span>
<span class="cm">/**</span>
<span class="cm"> * </span>
<span class="cm"> * @author 小尛龙</span>
<span class="cm"> * </span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="kd">class</span> <span class="nc">MainActivity</span> <span class="kd">extends</span> <span class="n">Activity</span> <span class="o">{</span>
<span class="nd">@Override</span>
<span class="kd">protected</span> <span class="kt">void</span> <span class="nf">onCreate</span><span class="o">(</span><span class="n">Bundle</span> <span class="n">savedInstanceState</span><span class="o">)</span> <span class="o">{</span>
<span class="kd">super</span><span class="o">.</span><span class="na">onCreate</span><span class="o">(</span><span class="n">savedInstanceState</span><span class="o">);</span>
<span class="n">setContentView</span><span class="o">(</span><span class="n">R</span><span class="o">.</span><span class="na">layout</span><span class="o">.</span><span class="na">activity_main</span><span class="o">);</span>
<span class="n">Log</span><span class="o">.</span><span class="na">d</span><span class="o">(</span><span class="s">"wxl"</span><span class="o">,</span> <span class="n">getSystemMemory</span><span class="o">());</span>
<span class="o">}</span>
<span class="c1">// 获取Android手机中SD卡存储信息 获取剩余空间</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">getSDCardInfo</span><span class="o">()</span> <span class="o">{</span>
<span class="c1">// 在manifest.xml文件中要添加</span>
<span class="cm">/*</span>
<span class="cm"> * <uses-permission</span>
<span class="cm"> * android:name="android.permission.WRITE_EXTERNAL_STORAGE"></span>
<span class="cm"> * </uses-permission></span>
<span class="cm"> */</span>
<span class="c1">// 需要判断手机上面SD卡是否插好,如果有SD卡的情况下,我们才可以访问得到并获取到它的相关信息,当然以下这个语句需要用if做判断</span>
<span class="k">if</span> <span class="o">(</span><span class="n">Environment</span><span class="o">.</span><span class="na">getExternalStorageState</span><span class="o">().</span><span class="na">equals</span><span class="o">(</span>
<span class="n">Environment</span><span class="o">.</span><span class="na">MEDIA_MOUNTED</span><span class="o">))</span> <span class="o">{</span>
<span class="c1">// 取得sdcard文件路径</span>
<span class="n">File</span> <span class="n">path</span> <span class="o">=</span> <span class="n">Environment</span><span class="o">.</span><span class="na">getExternalStorageDirectory</span><span class="o">();</span>
<span class="n">StatFs</span> <span class="n">statfs</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">StatFs</span><span class="o">(</span><span class="n">path</span><span class="o">.</span><span class="na">getPath</span><span class="o">());</span>
<span class="c1">// 获取block的SIZE</span>
<span class="kt">long</span> <span class="n">blocSize</span> <span class="o">=</span> <span class="n">statfs</span><span class="o">.</span><span class="na">getBlockSize</span><span class="o">();</span>
<span class="c1">// 获取BLOCK数量</span>
<span class="kt">long</span> <span class="n">totalBlocks</span> <span class="o">=</span> <span class="n">statfs</span><span class="o">.</span><span class="na">getBlockCount</span><span class="o">();</span>
<span class="c1">// 空闲的Block的数量</span>
<span class="kt">long</span> <span class="n">availaBlock</span> <span class="o">=</span> <span class="n">statfs</span><span class="o">.</span><span class="na">getAvailableBlocks</span><span class="o">();</span>
<span class="c1">// 计算总空间大小和空闲的空间大小</span>
<span class="c1">// 存储空间大小跟空闲的存储空间大小就被计算出来了。</span>
<span class="kt">long</span> <span class="n">availableSize</span> <span class="o">=</span> <span class="n">blocSize</span> <span class="o">*</span> <span class="n">availaBlock</span><span class="o">;</span>
<span class="c1">// (availableBlocks * blockSize)/1024 KIB 单位</span>
<span class="c1">// (availableBlocks * blockSize)/1024 /1024 MIB单位</span>
<span class="kt">long</span> <span class="n">allSize</span> <span class="o">=</span> <span class="n">blocSize</span> <span class="o">*</span> <span class="n">totalBlocks</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c1">// 获取手机ip method-1</span>
<span class="kd">public</span> <span class="n">String</span> <span class="nf">getLocalIpAddress</span><span class="o">()</span> <span class="o">{</span>
<span class="k">try</span> <span class="o">{</span>
<span class="k">for</span> <span class="o">(</span><span class="n">Enumeration</span><span class="o"><</span><span class="n">NetworkInterface</span><span class="o">></span> <span class="n">en</span> <span class="o">=</span> <span class="n">NetworkInterface</span>
<span class="o">.</span><span class="na">getNetworkInterfaces</span><span class="o">();</span> <span class="n">en</span><span class="o">.</span><span class="na">hasMoreElements</span><span class="o">();)</span> <span class="o">{</span>
<span class="n">NetworkInterface</span> <span class="n">intf</span> <span class="o">=</span> <span class="n">en</span><span class="o">.</span><span class="na">nextElement</span><span class="o">();</span>
<span class="k">for</span> <span class="o">(</span><span class="n">Enumeration</span><span class="o"><</span><span class="n">InetAddress</span><span class="o">></span> <span class="n">enumIpAddr</span> <span class="o">=</span> <span class="n">intf</span>
<span class="o">.</span><span class="na">getInetAddresses</span><span class="o">();</span> <span class="n">enumIpAddr</span><span class="o">.</span><span class="na">hasMoreElements</span><span class="o">();)</span> <span class="o">{</span>
<span class="n">InetAddress</span> <span class="n">inetAddress</span> <span class="o">=</span> <span class="n">enumIpAddr</span><span class="o">.</span><span class="na">nextElement</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(!</span><span class="n">inetAddress</span><span class="o">.</span><span class="na">isLoopbackAddress</span><span class="o">())</span> <span class="o">{</span>
<span class="n">Toast</span><span class="o">.</span><span class="na">makeText</span><span class="o">(</span><span class="k">this</span><span class="o">,</span>
<span class="n">inetAddress</span><span class="o">.</span><span class="na">getHostAddress</span><span class="o">().</span><span class="na">toString</span><span class="o">(),</span> <span class="mi">3000</span><span class="o">)</span>
<span class="o">.</span><span class="na">show</span><span class="o">();</span>
<span class="k">return</span> <span class="n">inetAddress</span><span class="o">.</span><span class="na">getHostAddress</span><span class="o">().</span><span class="na">toString</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">SocketException</span> <span class="n">ex</span><span class="o">)</span> <span class="o">{</span>
<span class="n">ex</span><span class="o">.</span><span class="na">printStackTrace</span><span class="o">();</span>
<span class="c1">// Log.e("ifo", ex.toString());</span>
<span class="o">}</span>
<span class="k">return</span> <span class="s">""</span><span class="o">;</span>
<span class="o">}</span>
<span class="c1">// 需要权限</span>
<span class="c1">// <uses-permission</span>
<span class="c1">// android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission></span>
<span class="c1">// <uses-permission</span>
<span class="c1">// android:name="android.permission.INTERNET"></uses-permission></span>
<span class="c1">// 获取手机ip method-2</span>
<span class="c1">// 首先设置用户权限</span>
<span class="c1">// <uses-permission</span>
<span class="c1">// android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission></span>
<span class="c1">// <uses-permission</span>
<span class="c1">// android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission></span>
<span class="c1">// <uses-permission</span>
<span class="c1">// android:name="android.permission.WAKE_LOCK"></uses-permission></span>
<span class="kd">public</span> <span class="n">String</span> <span class="nf">getLocalIpAddress2</span><span class="o">()</span> <span class="o">{</span>
<span class="c1">// 获取wifi服务</span>
<span class="n">WifiManager</span> <span class="n">wifiManager</span> <span class="o">=</span> <span class="o">(</span><span class="n">WifiManager</span><span class="o">)</span> <span class="n">getSystemService</span><span class="o">(</span><span class="n">Context</span><span class="o">.</span><span class="na">WIFI_SERVICE</span><span class="o">);</span>
<span class="c1">// 判断wifi是否开启</span>
<span class="k">if</span> <span class="o">(!</span><span class="n">wifiManager</span><span class="o">.</span><span class="na">isWifiEnabled</span><span class="o">())</span> <span class="o">{</span>
<span class="n">wifiManager</span><span class="o">.</span><span class="na">setWifiEnabled</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="o">}</span>
<span class="n">WifiInfo</span> <span class="n">wifiInfo</span> <span class="o">=</span> <span class="n">wifiManager</span><span class="o">.</span><span class="na">getConnectionInfo</span><span class="o">();</span>
<span class="kt">int</span> <span class="n">ipAddress</span> <span class="o">=</span> <span class="n">wifiInfo</span><span class="o">.</span><span class="na">getIpAddress</span><span class="o">();</span>
<span class="n">String</span> <span class="n">ip</span> <span class="o">=</span> <span class="n">intToIp</span><span class="o">(</span><span class="n">ipAddress</span><span class="o">);</span>
<span class="k">return</span> <span class="n">ip</span><span class="o">;</span>
<span class="o">}</span>
<span class="kd">private</span> <span class="n">String</span> <span class="nf">intToIp</span><span class="o">(</span><span class="kt">int</span> <span class="n">i</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="o">(</span><span class="n">i</span> <span class="o">&</span> <span class="mh">0xFF</span><span class="o">)</span> <span class="o">+</span> <span class="s">"."</span> <span class="o">+</span> <span class="o">((</span><span class="n">i</span> <span class="o">>></span> <span class="mi">8</span><span class="o">)</span> <span class="o">&</span> <span class="mh">0xFF</span><span class="o">)</span> <span class="o">+</span> <span class="s">"."</span> <span class="o">+</span> <span class="o">((</span><span class="n">i</span> <span class="o">>></span> <span class="mi">16</span><span class="o">)</span> <span class="o">&</span> <span class="mh">0xFF</span><span class="o">)</span>
<span class="o">+</span> <span class="s">"."</span> <span class="o">+</span> <span class="o">(</span><span class="n">i</span> <span class="o">>></span> <span class="mi">24</span> <span class="o">&</span> <span class="mh">0xFF</span><span class="o">);</span>
<span class="o">}</span>
<span class="c1">// 查看本机外网IP</span>
<span class="cm">/*</span>
<span class="cm"> * 该方法需要设备支持上网 查看</span>
<span class="cm"> * System.out.println((GetNetIp("http://fw.qq.com/ipaddress"))); 加权限</span>
<span class="cm"> * <uses-permission</span>
<span class="cm"> * android:name="android.permission.INTERNET"></uses-permission></span>
<span class="cm"> * 通过获取http://fw.qq.com/ipaddress网页取得外网IP 这里有几个查看IP的网址然后提取IP试试。</span>
<span class="cm"> * http://ip168.com/ http://www.cmyip.com/ http://city.ip138.com/ip2city.asp</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="n">String</span> <span class="nf">GetNetIp</span><span class="o">(</span><span class="n">String</span> <span class="n">ipaddr</span><span class="o">)</span> <span class="o">{</span>
<span class="n">URL</span> <span class="n">infoUrl</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="n">InputStream</span> <span class="n">inStream</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">try</span> <span class="o">{</span>
<span class="n">infoUrl</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">URL</span><span class="o">(</span><span class="n">ipaddr</span><span class="o">);</span>
<span class="n">URLConnection</span> <span class="n">connection</span> <span class="o">=</span> <span class="n">infoUrl</span><span class="o">.</span><span class="na">openConnection</span><span class="o">();</span>
<span class="n">HttpURLConnection</span> <span class="n">httpConnection</span> <span class="o">=</span> <span class="o">(</span><span class="n">HttpURLConnection</span><span class="o">)</span> <span class="n">connection</span><span class="o">;</span>
<span class="kt">int</span> <span class="n">responseCode</span> <span class="o">=</span> <span class="n">httpConnection</span><span class="o">.</span><span class="na">getResponseCode</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="n">responseCode</span> <span class="o">==</span> <span class="n">HttpURLConnection</span><span class="o">.</span><span class="na">HTTP_OK</span><span class="o">)</span> <span class="o">{</span>
<span class="n">inStream</span> <span class="o">=</span> <span class="n">httpConnection</span><span class="o">.</span><span class="na">getInputStream</span><span class="o">();</span>
<span class="n">BufferedReader</span> <span class="n">reader</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">BufferedReader</span><span class="o">(</span>
<span class="k">new</span> <span class="nf">InputStreamReader</span><span class="o">(</span><span class="n">inStream</span><span class="o">,</span> <span class="s">"utf-8"</span><span class="o">));</span>
<span class="n">StringBuilder</span> <span class="n">strber</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">StringBuilder</span><span class="o">();</span>
<span class="n">String</span> <span class="n">line</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">while</span> <span class="o">((</span><span class="n">line</span> <span class="o">=</span> <span class="n">reader</span><span class="o">.</span><span class="na">readLine</span><span class="o">())</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span>
<span class="n">strber</span><span class="o">.</span><span class="na">append</span><span class="o">(</span><span class="n">line</span> <span class="o">+</span> <span class="s">"\n"</span><span class="o">);</span>
<span class="n">inStream</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
<span class="k">return</span> <span class="n">strber</span><span class="o">.</span><span class="na">toString</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">MalformedURLException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
<span class="c1">// TODO Auto-generated catch block</span>
<span class="n">e</span><span class="o">.</span><span class="na">printStackTrace</span><span class="o">();</span>
<span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">IOException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
<span class="c1">// TODO Auto-generated catch block</span>
<span class="n">e</span><span class="o">.</span><span class="na">printStackTrace</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">return</span> <span class="s">""</span><span class="o">;</span>
<span class="o">}</span>
<span class="c1">// 获取手机MAC地址</span>
<span class="kd">private</span> <span class="n">String</span> <span class="nf">getMacAddress</span><span class="o">()</span> <span class="o">{</span>
<span class="n">String</span> <span class="n">result</span> <span class="o">=</span> <span class="s">""</span><span class="o">;</span>
<span class="n">WifiManager</span> <span class="n">wifiManager</span> <span class="o">=</span> <span class="o">(</span><span class="n">WifiManager</span><span class="o">)</span> <span class="n">getSystemService</span><span class="o">(</span><span class="n">Context</span><span class="o">.</span><span class="na">WIFI_SERVICE</span><span class="o">);</span>
<span class="n">WifiInfo</span> <span class="n">wifiInfo</span> <span class="o">=</span> <span class="n">wifiManager</span><span class="o">.</span><span class="na">getConnectionInfo</span><span class="o">();</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">wifiInfo</span><span class="o">.</span><span class="na">getMacAddress</span><span class="o">();</span>
<span class="c1">// Log.i(TAG, "macAdd:" + result);</span>
<span class="k">return</span> <span class="n">result</span><span class="o">;</span>
<span class="o">}</span>
<span class="c1">// 获取手机屏幕高度</span>
<span class="kd">private</span> <span class="n">String</span> <span class="nf">getWeithAndHeight</span><span class="o">()</span> <span class="o">{</span>
<span class="c1">// 这种方式在service中无法使用,</span>
<span class="n">DisplayMetrics</span> <span class="n">dm</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">DisplayMetrics</span><span class="o">();</span>
<span class="n">getWindowManager</span><span class="o">().</span><span class="na">getDefaultDisplay</span><span class="o">().</span><span class="na">getMetrics</span><span class="o">(</span><span class="n">dm</span><span class="o">);</span>
<span class="kt">int</span> <span class="n">width</span> <span class="o">=</span> <span class="n">dm</span><span class="o">.</span><span class="na">widthPixels</span><span class="o">;</span> <span class="c1">// 宽</span>
<span class="kt">int</span> <span class="n">height</span> <span class="o">=</span> <span class="n">dm</span><span class="o">.</span><span class="na">heightPixels</span><span class="o">;</span> <span class="c1">// 高</span>
<span class="kt">float</span> <span class="n">density</span> <span class="o">=</span> <span class="n">dm</span><span class="o">.</span><span class="na">density</span><span class="o">;</span> <span class="c1">// 屏幕密度(0.75 / 1.0 / 1.5)</span>
<span class="kt">int</span> <span class="n">densityDpi</span> <span class="o">=</span> <span class="n">dm</span><span class="o">.</span><span class="na">densityDpi</span><span class="o">;</span> <span class="c1">// 屏幕密度DPI(120 / 160 / 240)</span>
<span class="c1">// 在service中也能得到高和宽</span>
<span class="n">WindowManager</span> <span class="n">mWindowManager</span> <span class="o">=</span> <span class="o">(</span><span class="n">WindowManager</span><span class="o">)</span> <span class="n">getSystemService</span><span class="o">(</span><span class="n">Context</span><span class="o">.</span><span class="na">WINDOW_SERVICE</span><span class="o">);</span>
<span class="n">width</span> <span class="o">=</span> <span class="n">mWindowManager</span><span class="o">.</span><span class="na">getDefaultDisplay</span><span class="o">().</span><span class="na">getWidth</span><span class="o">();</span>
<span class="n">height</span> <span class="o">=</span> <span class="n">mWindowManager</span><span class="o">.</span><span class="na">getDefaultDisplay</span><span class="o">().</span><span class="na">getHeight</span><span class="o">();</span>
<span class="c1">// 居中显示Toast</span>
<span class="n">Toast</span> <span class="n">msg</span> <span class="o">=</span> <span class="n">Toast</span><span class="o">.</span><span class="na">makeText</span><span class="o">(</span><span class="k">this</span><span class="o">,</span> <span class="s">"宽="</span> <span class="o">+</span> <span class="n">width</span> <span class="o">+</span> <span class="s">" 高="</span> <span class="o">+</span> <span class="n">height</span><span class="o">,</span>
<span class="n">Toast</span><span class="o">.</span><span class="na">LENGTH_LONG</span><span class="o">);</span>
<span class="n">msg</span><span class="o">.</span><span class="na">setGravity</span><span class="o">(</span><span class="n">Gravity</span><span class="o">.</span><span class="na">CENTER</span><span class="o">,</span> <span class="n">msg</span><span class="o">.</span><span class="na">getXOffset</span><span class="o">()</span> <span class="o">/</span> <span class="mi">2</span><span class="o">,</span>
<span class="n">msg</span><span class="o">.</span><span class="na">getYOffset</span><span class="o">()</span> <span class="o">/</span> <span class="mi">2</span><span class="o">);</span>
<span class="n">msg</span><span class="o">.</span><span class="na">show</span><span class="o">();</span>
<span class="k">return</span> <span class="s">"(像素)宽:"</span> <span class="o">+</span> <span class="n">width</span> <span class="o">+</span> <span class="s">"\n"</span> <span class="o">+</span> <span class="s">"(像素)高:"</span> <span class="o">+</span> <span class="n">height</span> <span class="o">+</span> <span class="s">"\n"</span>
<span class="o">+</span> <span class="s">"屏幕密度(0.75 / 1.0 / 1.5):"</span> <span class="o">+</span> <span class="n">density</span> <span class="o">+</span> <span class="s">"\n"</span>
<span class="o">+</span> <span class="s">"屏幕密度DPI(120 / 160 / 240):"</span> <span class="o">+</span> <span class="n">densityDpi</span> <span class="o">+</span> <span class="s">"\n"</span><span class="o">;</span>
<span class="cm">/*</span>
<span class="cm"> * 下面的代码即可获取屏幕的尺寸。 在一个Activity的onCreate方法中,写入如下代码: DisplayMetrics metric</span>
<span class="cm"> * = new DisplayMetrics();</span>
<span class="cm"> * getWindowManager().getDefaultDisplay().getMetrics(metric); int width</span>
<span class="cm"> * = metric.widthPixels; // 屏幕宽度(像素) int height = metric.heightPixels;</span>
<span class="cm"> * // 屏幕高度(像素) float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)</span>
<span class="cm"> * int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240)</span>
<span class="cm"> * </span>
<span class="cm"> * 但是,需要注意的是,在一个低密度的小屏手机上,仅靠上面的代码是不能获取正确的尺寸的。</span>
<span class="cm"> * 比如说,一部240x320像素的低密度手机,如果运行上述代码,获取到的屏幕尺寸是320x427。</span>
<span class="cm"> * 因此,研究之后发现,若没有设定多分辨率支持的话</span>
<span class="cm"> * ,Android系统会将240x320的低密度(120)尺寸转换为中等密度(160)对应的尺寸,</span>
<span class="cm"> * 这样的话就大大影响了程序的编码。所以,需要在工程的AndroidManifest</span>
<span class="cm"> * .xml文件中,加入supports-screens节点,具体的内容如下: <supports-screens</span>
<span class="cm"> * android:smallScreens="true" android:normalScreens="true"</span>
<span class="cm"> * android:largeScreens="true" android:resizeable="true"</span>
<span class="cm"> * android:anyDensity="true" /></span>
<span class="cm"> * 这样的话,当前的Android程序就支持了多种分辨率,那么就可以得到正确的物理尺寸了。</span>
<span class="cm"> */</span>
<span class="o">}</span>
<span class="c1">// 获取手机经纬度</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">getLocation</span><span class="o">()</span> <span class="o">{</span>
<span class="c1">// 1. 创建一个 LocationManager对象。</span>
<span class="n">LocationManager</span> <span class="n">locationManager</span> <span class="o">=</span> <span class="o">(</span><span class="n">LocationManager</span><span class="o">)</span> <span class="n">getSystemService</span><span class="o">(</span><span class="n">Context</span><span class="o">.</span><span class="na">LOCATION_SERVICE</span><span class="o">);</span>
<span class="c1">// 2. 创建一个 LocationListener对象。</span>
<span class="n">LocationListener</span> <span class="n">myGPSListener</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">LocationListener</span><span class="o">()</span> <span class="o">{</span>
<span class="c1">// 一旦Location发生改变就会调用这个方法</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onLocationChanged</span><span class="o">(</span><span class="n">Location</span> <span class="n">location</span><span class="o">)</span> <span class="o">{</span>
<span class="kt">double</span> <span class="n">latitude</span> <span class="o">=</span> <span class="n">location</span><span class="o">.</span><span class="na">getLatitude</span><span class="o">();</span>
<span class="kt">double</span> <span class="n">longitude</span> <span class="o">=</span> <span class="n">location</span><span class="o">.</span><span class="na">getLongitude</span><span class="o">();</span>
<span class="o">}</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onStatusChanged</span><span class="o">(</span><span class="n">String</span> <span class="n">provider</span><span class="o">,</span> <span class="kt">int</span> <span class="n">status</span><span class="o">,</span>
<span class="n">Bundle</span> <span class="n">extras</span><span class="o">)</span> <span class="o">{</span>
<span class="o">}</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onProviderEnabled</span><span class="o">(</span><span class="n">String</span> <span class="n">provider</span><span class="o">)</span> <span class="o">{</span>
<span class="o">}</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onProviderDisabled</span><span class="o">(</span><span class="n">String</span> <span class="n">provider</span><span class="o">)</span> <span class="o">{</span>
<span class="o">}</span>
<span class="o">};</span>
<span class="c1">// 3.向LocationManager 注册一个LocationListener。</span>
<span class="n">Criteria</span> <span class="n">criteria</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Criteria</span><span class="o">();</span>
<span class="n">criteria</span><span class="o">.</span><span class="na">setAccuracy</span><span class="o">(</span><span class="n">Criteria</span><span class="o">.</span><span class="na">ACCURACY_COARSE</span><span class="o">);</span>
<span class="n">criteria</span><span class="o">.</span><span class="na">setAltitudeRequired</span><span class="o">(</span><span class="kc">false</span><span class="o">);</span>
<span class="n">criteria</span><span class="o">.</span><span class="na">setCostAllowed</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="n">criteria</span><span class="o">.</span><span class="na">setPowerRequirement</span><span class="o">(</span><span class="n">Criteria</span><span class="o">.</span><span class="na">POWER_LOW</span><span class="o">);</span>
<span class="n">String</span> <span class="n">provider</span> <span class="o">=</span> <span class="n">locationManager</span><span class="o">.</span><span class="na">getBestProvider</span><span class="o">(</span><span class="n">criteria</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span> <span class="c1">// 根据Criteria</span>
<span class="c1">// 的设置获取一个最佳的Provider</span>
<span class="n">locationManager</span>
<span class="o">.</span><span class="na">requestLocationUpdates</span><span class="o">(</span><span class="n">provider</span><span class="o">,</span> <span class="mi">5000</span><span class="o">,</span> <span class="mi">0</span><span class="o">,</span> <span class="n">myGPSListener</span><span class="o">);</span>
<span class="c1">// 4.移除LocationManager 注册的 LocationListener。</span>
<span class="n">locationManager</span><span class="o">.</span><span class="na">removeUpdates</span><span class="o">(</span><span class="n">myGPSListener</span><span class="o">);</span>
<span class="o">}</span>
<span class="c1">// 当前网络是否连接</span>
<span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">isNetConnecting</span><span class="o">()</span> <span class="o">{</span>
<span class="n">ConnectivityManager</span> <span class="n">connectivityManager</span> <span class="o">=</span> <span class="o">(</span><span class="n">ConnectivityManager</span><span class="o">)</span> <span class="n">getSystemService</span><span class="o">(</span><span class="n">Context</span><span class="o">.</span><span class="na">CONNECTIVITY_SERVICE</span><span class="o">);</span>
<span class="n">NetworkInfo</span> <span class="n">networkInfo</span> <span class="o">=</span> <span class="n">connectivityManager</span><span class="o">.</span><span class="na">getActiveNetworkInfo</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="n">networkInfo</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">||</span> <span class="o">!</span><span class="n">networkInfo</span><span class="o">.</span><span class="na">isConnected</span><span class="o">())</span> <span class="o">{</span>
<span class="c1">// info.setConnected(false);</span>
<span class="k">return</span> <span class="kc">false</span><span class="o">;</span>
<span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
<span class="c1">// info.setConnected(true);</span>
<span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c1">// 获取信号强度</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">getPhoneState</span><span class="o">()</span> <span class="o">{</span>
<span class="c1">// 1. 创建telephonyManager 对象。</span>
<span class="n">TelephonyManager</span> <span class="n">telephonyManager</span> <span class="o">=</span> <span class="o">(</span><span class="n">TelephonyManager</span><span class="o">)</span> <span class="cm">/* context. */</span><span class="n">getSystemService</span><span class="o">(</span><span class="n">Context</span><span class="o">.</span><span class="na">TELEPHONY_SERVICE</span><span class="o">);</span>
<span class="c1">// 2. 创建PhoneStateListener 对象</span>
<span class="n">PhoneStateListener</span> <span class="n">MyPhoneListener</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">PhoneStateListener</span><span class="o">()</span> <span class="o">{</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onCellLocationChanged</span><span class="o">(</span><span class="n">CellLocation</span> <span class="n">location</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="n">location</span> <span class="k">instanceof</span> <span class="n">GsmCellLocation</span><span class="o">)</span> <span class="o">{</span><span class="c1">// gsm网络</span>
<span class="kt">int</span> <span class="n">CID</span> <span class="o">=</span> <span class="o">((</span><span class="n">GsmCellLocation</span><span class="o">)</span> <span class="n">location</span><span class="o">).</span><span class="na">getCid</span><span class="o">();</span>
<span class="o">}</span> <span class="k">else</span> <span class="nf">if</span> <span class="o">(</span><span class="n">location</span> <span class="k">instanceof</span> <span class="n">CdmaCellLocation</span><span class="o">)</span> <span class="o">{</span><span class="c1">// 其他CDMA等网络</span>
<span class="kt">int</span> <span class="n">ID</span> <span class="o">=</span> <span class="o">((</span><span class="n">CdmaCellLocation</span><span class="o">)</span> <span class="n">location</span><span class="o">).</span><span class="na">getBaseStationId</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onServiceStateChanged</span><span class="o">(</span><span class="n">ServiceState</span> <span class="n">serviceState</span><span class="o">)</span> <span class="o">{</span>
<span class="kd">super</span><span class="o">.</span><span class="na">onServiceStateChanged</span><span class="o">(</span><span class="n">serviceState</span><span class="o">);</span>
<span class="o">}</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onSignalStrengthsChanged</span><span class="o">(</span><span class="n">SignalStrength</span> <span class="n">signalStrength</span><span class="o">)</span> <span class="o">{</span>
<span class="kt">int</span> <span class="n">asu</span> <span class="o">=</span> <span class="n">signalStrength</span><span class="o">.</span><span class="na">getGsmSignalStrength</span><span class="o">();</span>
<span class="kt">int</span> <span class="n">dbm</span> <span class="o">=</span> <span class="o">-</span><span class="mi">113</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">asu</span><span class="o">;</span> <span class="c1">// 信号强度</span>
<span class="kd">super</span><span class="o">.</span><span class="na">onSignalStrengthsChanged</span><span class="o">(</span><span class="n">signalStrength</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">};</span>
<span class="c1">// 3. 监听信号改变</span>
<span class="n">telephonyManager</span><span class="o">.</span><span class="na">listen</span><span class="o">(</span><span class="n">MyPhoneListener</span><span class="o">,</span>
<span class="n">PhoneStateListener</span><span class="o">.</span><span class="na">LISTEN_SIGNAL_STRENGTHS</span><span class="o">);</span>
<span class="cm">/*</span>
<span class="cm"> * 可能需要的权限 <uses-permission</span>
<span class="cm"> * android:name="android.permission.WAKE_LOCK"></uses-permission></span>
<span class="cm"> * <uses-permission</span>
<span class="cm"> * android:name="android.permission.ACCESS_COARSE_LOCATION"/></span>
<span class="cm"> * <uses-permission</span>
<span class="cm"> * android:name="android.permission.ACCESS_FINE_LOCATION"/></span>
<span class="cm"> * <uses-permission android:name="android.permission.READ_PHONE_STATE"</span>
<span class="cm"> * /> <uses-permission</span>
<span class="cm"> * android:name="android.permission.ACCESS_NETWORK_STATE" /></span>
<span class="cm"> */</span>
<span class="o">}</span>
<span class="c1">// 获取手机可用内存和总内存</span>
<span class="kd">private</span> <span class="n">String</span> <span class="nf">getSystemMemory</span><span class="o">()</span> <span class="o">{</span>
<span class="cm">/*</span>
<span class="cm"> * 在Android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小。这个该如何实现呢?</span>
<span class="cm"> * 通过读取文件"/proc/meminfo"</span>
<span class="cm"> * 的信息能够获取手机Memory的总量,而通过ActivityManager.getMemoryInfo</span>
<span class="cm"> * (ActivityManager.MemoryInfo)方法可以获取当前的可用Memory量。</span>
<span class="cm"> * "/proc/meminfo"文件记录了android手机的一些内存信息</span>
<span class="cm"> * ,在命令行窗口里输入"adb shell",进入shell环境,输入</span>
<span class="cm"> * "cat /proc/meminfo"即可在命令行里显示meminfo文件的内容,具体如下所示。</span>
<span class="cm"> * </span>
<span class="cm"> * C:\Users\Figo>adb shell # cat /proc/meminfo cat /proc/meminfo</span>
<span class="cm"> * MemTotal: 94096 kB MemFree: 1684 kB Buffers: 16 kB Cached: 27160 kB</span>
<span class="cm"> * SwapCached: 0 kB Active: 35392 kB Inactive: 44180 kB Active(anon):</span>
<span class="cm"> * 26540 kB Inactive(anon): 28244 kB Active(file): 8852 kB</span>
<span class="cm"> * Inactive(file): 15936 kB Unevictable: 280 kB Mlocked: 0 kB *</span>
<span class="cm"> * SwapTotal: 0 kB SwapFree: 0 kB Dirty: 0 kB Writeback: 0 kB AnonPages:</span>
<span class="cm"> * 52688 kB Mapped: 17960 kB Slab: 3816 kB SReclaimable: 936 kB</span>
<span class="cm"> * SUnreclaim: 2880 kB PageTables: 5260 kB NFS_Unstable: 0 kB Bounce: 0</span>
<span class="cm"> * kB WritebackTmp: 0 kB CommitLimit: 47048 kB Committed_AS: 1483784 kB</span>
<span class="cm"> * VmallocTotal: 876544 kB VmallocUsed: 15456 kB VmallocChunk: 829444 kB</span>
<span class="cm"> * #</span>
<span class="cm"> * </span>
<span class="cm"> * 下面先对"/proc/meminfo"文件里列出的字段进行粗略解释: MemTotal: 所有可用RAM大小。 MemFree:</span>
<span class="cm"> * LowFree与HighFree的总和,被系统留着未使用的内存。 Buffers: 用来给文件做缓冲大小。 Cached:</span>
<span class="cm"> * 被高速缓冲存储器(cache memory)用的内存的大小(等于diskcache minus SwapCache)。</span>
<span class="cm"> * SwapCached:被高速缓冲存储器(cache</span>
<span class="cm"> * memory)用的交换空间的大小。已经被交换出来的内存,仍然被存放在swapfile中,</span>
<span class="cm"> * 用来在需要的时候很快的被替换而不需要再次打开I/O端口。 Active:</span>
<span class="cm"> * 在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要,否则不会被移作他用。 Inactive:</span>
<span class="cm"> * 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径。 SwapTotal: 交换空间的总大小。 SwapFree:</span>
<span class="cm"> * 未被使用交换空间的大小。 Dirty: 等待被写回到磁盘的内存大小。 Writeback: 正在被写回到磁盘的内存大小。</span>
<span class="cm"> * AnonPages:未映射页的内存大小。 Mapped: 设备和文件等映射的大小。 Slab:</span>
<span class="cm"> * 内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗。 SReclaimable:可收回Slab的大小。</span>
<span class="cm"> * SUnreclaim:不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)。</span>
<span class="cm"> * PageTables:管理内存分页页面的索引表的大小。 NFS_Unstable:不稳定页表的大小。</span>
<span class="cm"> * 要获取android手机总内存大小,只需读取"/proc/meminfo"文件的第1行,并进行简单的字符串处理即可。</span>
<span class="cm"> */</span>
<span class="n">String</span> <span class="n">availMemory</span> <span class="o">=</span> <span class="n">getAvailMemory</span><span class="o">();</span>
<span class="n">String</span> <span class="n">totalMemory</span> <span class="o">=</span> <span class="n">getTotalMemory</span><span class="o">();</span>
<span class="k">return</span> <span class="s">"可用内存="</span> <span class="o">+</span> <span class="n">availMemory</span> <span class="o">+</span> <span class="s">"\n"</span> <span class="o">+</span> <span class="s">"总内存="</span> <span class="o">+</span> <span class="n">totalMemory</span><span class="o">;</span>
<span class="o">}</span><span class="c1">// 手机的内存信息主要在/proc/meminfo文件中,其中第一行是总内存,而剩余内存可通过ActivityManager.MemoryInfo得到。</span>
<span class="kd">private</span> <span class="n">String</span> <span class="nf">getAvailMemory</span><span class="o">()</span> <span class="o">{</span><span class="c1">// 获取android当前可用内存大小</span>
<span class="n">ActivityManager</span> <span class="n">am</span> <span class="o">=</span> <span class="o">(</span><span class="n">ActivityManager</span><span class="o">)</span> <span class="n">getSystemService</span><span class="o">(</span><span class="n">Context</span><span class="o">.</span><span class="na">ACTIVITY_SERVICE</span><span class="o">);</span>
<span class="n">MemoryInfo</span> <span class="n">mi</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">MemoryInfo</span><span class="o">();</span>
<span class="n">am</span><span class="o">.</span><span class="na">getMemoryInfo</span><span class="o">(</span><span class="n">mi</span><span class="o">);</span>
<span class="c1">// mi.availMem; 当前系统的可用内存</span>
<span class="k">return</span> <span class="n">Formatter</span><span class="o">.</span><span class="na">formatFileSize</span><span class="o">(</span><span class="n">getBaseContext</span><span class="o">(),</span> <span class="n">mi</span><span class="o">.</span><span class="na">availMem</span><span class="o">);</span><span class="c1">// 将获取的内存大小规格化</span>
<span class="o">}</span>
<span class="kd">private</span> <span class="n">String</span> <span class="nf">getTotalMemory</span><span class="o">()</span> <span class="o">{</span>
<span class="n">String</span> <span class="n">str1</span> <span class="o">=</span> <span class="s">"/proc/meminfo"</span><span class="o">;</span><span class="c1">// 系统内存信息文件</span>
<span class="n">String</span> <span class="n">str2</span><span class="o">;</span>
<span class="n">String</span><span class="o">[]</span> <span class="n">arrayOfString</span><span class="o">;</span>
<span class="kt">long</span> <span class="n">initial_memory</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span>
<span class="k">try</span> <span class="o">{</span>
<span class="n">FileReader</span> <span class="n">localFileReader</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">FileReader</span><span class="o">(</span><span class="n">str1</span><span class="o">);</span>
<span class="n">BufferedReader</span> <span class="n">localBufferedReader</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">BufferedReader</span><span class="o">(</span>
<span class="n">localFileReader</span><span class="o">,</span> <span class="mi">8192</span><span class="o">);</span>
<span class="n">str2</span> <span class="o">=</span> <span class="n">localBufferedReader</span><span class="o">.</span><span class="na">readLine</span><span class="o">();</span><span class="c1">// 读取meminfo第一行,系统总内存大小</span>
<span class="n">arrayOfString</span> <span class="o">=</span> <span class="n">str2</span><span class="o">.</span><span class="na">split</span><span class="o">(</span><span class="s">"\\s+"</span><span class="o">);</span>
<span class="k">for</span> <span class="o">(</span><span class="n">String</span> <span class="n">num</span> <span class="o">:</span> <span class="n">arrayOfString</span><span class="o">)</span> <span class="o">{</span>
<span class="n">Log</span><span class="o">.</span><span class="na">i</span><span class="o">(</span><span class="n">str2</span><span class="o">,</span> <span class="n">num</span> <span class="o">+</span> <span class="s">"\t"</span><span class="o">);</span>
<span class="o">}</span>
<span class="n">initial_memory</span> <span class="o">=</span> <span class="n">Integer</span><span class="o">.</span><span class="na">valueOf</span><span class="o">(</span><span class="n">arrayOfString</span><span class="o">[</span><span class="mi">1</span><span class="o">]).</span><span class="na">intValue</span><span class="o">()</span> <span class="o">*</span> <span class="mi">1024</span><span class="o">;</span><span class="c1">// 获得系统总内存,单位是KB,乘以1024转换为Byte</span>
<span class="n">localBufferedReader</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
<span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">IOException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
<span class="o">}</span>
<span class="k">return</span> <span class="n">Formatter</span><span class="o">.</span><span class="na">formatFileSize</span><span class="o">(</span><span class="n">getBaseContext</span><span class="o">(),</span> <span class="n">initial_memory</span><span class="o">);</span><span class="c1">// Byte转换为KB或者MB,内存大小规格化</span>
<span class="o">}</span>
<span class="c1">// 获取手机CPU信息</span>
<span class="kd">private</span> <span class="n">String</span> <span class="nf">getCpuInfo</span><span class="o">()</span> <span class="o">{</span>
<span class="n">String</span> <span class="n">str1</span> <span class="o">=</span> <span class="s">"/proc/cpuinfo"</span><span class="o">;</span>
<span class="n">String</span> <span class="n">str2</span> <span class="o">=</span> <span class="s">""</span><span class="o">;</span>
<span class="n">String</span><span class="o">[]</span> <span class="n">cpuInfo</span> <span class="o">=</span> <span class="o">{</span> <span class="s">""</span><span class="o">,</span> <span class="s">""</span> <span class="o">};</span> <span class="c1">// 1-cpu型号 //2-cpu频率</span>
<span class="n">String</span><span class="o">[]</span> <span class="n">arrayOfString</span><span class="o">;</span>
<span class="k">try</span> <span class="o">{</span>
<span class="n">FileReader</span> <span class="n">fr</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">FileReader</span><span class="o">(</span><span class="n">str1</span><span class="o">);</span>
<span class="n">BufferedReader</span> <span class="n">localBufferedReader</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">BufferedReader</span><span class="o">(</span><span class="n">fr</span><span class="o">,</span> <span class="mi">8192</span><span class="o">);</span>
<span class="n">str2</span> <span class="o">=</span> <span class="n">localBufferedReader</span><span class="o">.</span><span class="na">readLine</span><span class="o">();</span>
<span class="n">arrayOfString</span> <span class="o">=</span> <span class="n">str2</span><span class="o">.</span><span class="na">split</span><span class="o">(</span><span class="s">"\\s+"</span><span class="o">);</span>
<span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">2</span><span class="o">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">arrayOfString</span><span class="o">.</span><span class="na">length</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="n">cpuInfo</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span> <span class="o">=</span> <span class="n">cpuInfo</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span> <span class="o">+</span> <span class="n">arrayOfString</span><span class="o">[</span><span class="n">i</span><span class="o">]</span> <span class="o">+</span> <span class="s">" "</span><span class="o">;</span>
<span class="o">}</span>
<span class="n">str2</span> <span class="o">=</span> <span class="n">localBufferedReader</span><span class="o">.</span><span class="na">readLine</span><span class="o">();</span>
<span class="n">arrayOfString</span> <span class="o">=</span> <span class="n">str2</span><span class="o">.</span><span class="na">split</span><span class="o">(</span><span class="s">"\\s+"</span><span class="o">);</span>
<span class="n">cpuInfo</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span> <span class="o">+=</span> <span class="n">arrayOfString</span><span class="o">[</span><span class="mi">2</span><span class="o">];</span>
<span class="n">localBufferedReader</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
<span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">IOException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
<span class="o">}</span>
<span class="c1">// Log.i(TAG, "cpuinfo:" + cpuInfo[0] + " " + cpuInfo[1]);</span>
<span class="k">return</span> <span class="s">"1-cpu型号:"</span> <span class="o">+</span> <span class="n">cpuInfo</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span> <span class="o">+</span> <span class="s">"2-cpu频率:"</span> <span class="o">+</span> <span class="n">cpuInfo</span><span class="o">[</span><span class="mi">1</span><span class="o">];</span>
<span class="o">}</span><span class="c1">// 和内存信息同理,cpu信息可通过读取/proc/cpuinfo文件来得到,其中第一行为cpu型号,第二行为cpu频率。</span>
<span class="cm">/*</span>
<span class="cm"> * 一、Android 获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)</span>
<span class="cm"> * 1、通过PackageManager可获取手机端已安装的apk文件的信息,具体代码如下: PackageManager</span>
<span class="cm"> * packageManager = this.getPackageManager(); List<PackageInfo></span>
<span class="cm"> * packageInfoList = packageManager.getInstalledPackages(0);</span>
<span class="cm"> * 通过上述方法,可得到手机中安装的所有应用程序,包括手动安装的apk包的信息、、系统预装的应用软件的信息,要区分这两类软件可使用以下方法:</span>
<span class="cm"> * (a)从packageInfoList获取的packageInfo</span>
<span class="cm"> * ,再通过packageInfo.applicationInfo获取applicationInfo。</span>
<span class="cm"> * (b)判断(applicationInfo.flags &</span>
<span class="cm"> * ApplicationInfo.FLAG_SYSTEM)的值,该值大于0时,表示获取的应用为系统预装的应用,反之则为手动安装的应用。</span>
<span class="cm"> * (1)获取应用的代码: public static List<PackageInfo> getAllApps(Context context) {</span>
<span class="cm"> * List<PackageInfo> apps = new ArrayList<PackageInfo>(); PackageManager</span>
<span class="cm"> * pManager = context.getPackageManager(); //获取手机内所有应用 List<PackageInfo></span>
<span class="cm"> * paklist = pManager.getInstalledPackages(0); for (int i = 0; i <</span>
<span class="cm"> * paklist.size(); i++) { PackageInfo pak = (PackageInfo) paklist.get(i);</span>
<span class="cm"> * //判断是否为非系统预装的应用程序 if ((pak.applicationInfo.flags &</span>
<span class="cm"> * pak.applicationInfo.FLAG_SYSTEM) <= 0) { apps.add(pak); } } return apps;</span>
<span class="cm"> * } (2)、获取图片、应用名、包名: PackageManager pManager =</span>
<span class="cm"> * MessageSendActivity.this.getPackageManager(); List<PackageInfo> appList =</span>
<span class="cm"> * Utils.getAllApps(MessageSendActivity.this); for(int</span>
<span class="cm"> * i=0;i<appList.size();i++) { PackageInfo pinfo = appList.get(i); shareItem</span>
<span class="cm"> * = new ShareItemInfo();</span>
<span class="cm"> * shareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo));</span>
<span class="cm"> * shareItem</span>
<span class="cm"> * .setLabel(pManager.getApplicationLabel(pinfo.applicationInfo).toString</span>
<span class="cm"> * ()); shareItem.setPackageName(pinfo.applicationInfo.packageName); }</span>
<span class="cm"> * 其中ShareItemInfo 类自己写的,各位可以忽略 (3)获取支持分享的应用的代码: public static</span>
<span class="cm"> * List<ResolveInfo> getShareApps(Context context){ List<ResolveInfo> mApps</span>
<span class="cm"> * = new ArrayList<ResolveInfo>(); Intent intent=new</span>
<span class="cm"> * Intent(Intent.ACTION_SEND,null);</span>
<span class="cm"> * intent.addCategory(Intent.CATEGORY_DEFAULT);</span>
<span class="cm"> * intent.setType("text/plain"); PackageManager pManager =</span>
<span class="cm"> * context.getPackageManager(); mApps =</span>
<span class="cm"> * pManager.queryIntentActivities(intent</span>
<span class="cm"> * ,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT); return mApps; }</span>
<span class="cm"> * 由于该方法,返回的并不是PackageInfo 对象。而是ResolveInfo。因此获取图片、应用名、包名的方法不一样,如下:</span>
<span class="cm"> * PackageManager pManager = MessageSendActivity.this.getPackageManager();</span>
<span class="cm"> * List<ResolveInfo> resolveList =</span>
<span class="cm"> * Utils.getShareApps(MessageSendActivity.this); for(int</span>
<span class="cm"> * i=0;i<resolveList.size();i++) { ResolveInfo resolve = resolveList.get(i);</span>
<span class="cm"> * ShareItemInfo shareItem = new ShareItemInfo(); //set Icon</span>
<span class="cm"> * shareItem.setIcon(resolve.loadIcon(pManager)); //set Application Name</span>
<span class="cm"> * shareItem.setLabel(resolve.loadLabel(pManager).toString()); //set Package</span>
<span class="cm"> * Name shareItem.setPackageName(resolve.activityInfo.packageName); } 总结: 通过</span>
<span class="cm"> * PackageInfo 获取具体信息方法: 包名获取方法:packageInfo.packageName</span>
<span class="cm"> * icon获取获取方法:packageManager.getApplicationIcon(applicationInfo)</span>
<span class="cm"> * 应用名称获取方法:packageManager.getApplicationLabel(applicationInfo)</span>
<span class="cm"> * 使用权限获取方法:packageManager</span>
<span class="cm"> * .getPackageInfo(packageName,PackageManager.GET_PERMISSIONS)</span>
<span class="cm"> * .requestedPermissions 通过 ResolveInfo 获取具体信息方法:</span>
<span class="cm"> * 包名获取方法:resolve.activityInfo.packageName</span>
<span class="cm"> * icon获取获取方法:resolve.loadIcon(packageManager)</span>
<span class="cm"> * 应用名称获取方法:resolve.loadLabel(packageManager).toString()</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="n">String</span> <span class="nf">getSimCardInfo</span><span class="o">()</span> <span class="o">{</span>
<span class="c1">// 在manifest.xml文件中要添加</span>
<span class="c1">// <uses-permission android:name="android.permission.READ_PHONE_STATE"/></span>
<span class="cm">/*</span>
<span class="cm"> * TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法。其中包括手机SIM的状态和信息</span>
<span class="cm"> * 、电信网络的状态及手机用户的信息。</span>
<span class="cm"> * 在应用程序中可以使用这些get方法获取相关数据。TelephonyManager类的对象可以通过Context</span>
<span class="cm"> * .getSystemService(Context.TELEPHONY_SERVICE)</span>
<span class="cm"> * 方法来获得,需要注意的是有些通讯信息的获取对应用程序的权限有一定的限制</span>
<span class="cm"> * ,在开发的时候需要为其添加相应的权限。以下列出TelephonyManager类所有方法及说明:</span>
<span class="cm"> * TelephonyManager提供设备上获取通讯服务信息的入口。 应用程序可以使用这个类方法确定的电信服务商和国家</span>
<span class="cm"> * 以及某些类型的用户访问信息。 应用程序也可以注册一个监听器到电话收状态的变化。不需要直接实例化这个类</span>
<span class="cm"> * 使用Context.getSystemService (Context.TELEPHONY_SERVICE)来获取这个类的实例。</span>
<span class="cm"> */</span>
<span class="c1">// 解释:</span>
<span class="c1">// IMSI是国际移动用户识别码的简称(International Mobile Subscriber Identity)</span>
<span class="c1">// IMSI共有15位,其结构如下:</span>
<span class="c1">// MCC+MNC+MIN</span>
<span class="c1">// MCC:Mobile Country Code,移动国家码,共3位,中国为460;</span>
<span class="c1">// MNC:Mobile NetworkCode,移动网络码,共2位</span>
<span class="c1">// 在中国,移动的代码为电00和02,联通的代码为01,电信的代码为03</span>
<span class="c1">// 合起来就是(也是Android手机中APN配置文件中的代码):</span>
<span class="c1">// 中国移动:46000 46002</span>
<span class="c1">// 中国联通:46001</span>
<span class="c1">// 中国电信:46003</span>
<span class="c1">// 举例,一个典型的IMSI号码为460030912121001</span>
<span class="c1">// IMEI是International Mobile Equipment Identity (国际移动设备标识)的简称</span>
<span class="c1">// IMEI由15位数字组成的”电子串号”,它与每台手机一一对应,而且该码是全世界唯一的</span>
<span class="c1">// 其组成为:</span>
<span class="c1">// 1. 前6位数(TAC)是”型号核准号码”,一般代表机型</span>
<span class="c1">// 2. 接着的2位数(FAC)是”最后装配号”,一般代表产地</span>
<span class="c1">// 3. 之后的6位数(SNR)是”串号”,一般代表生产顺序号</span>
<span class="c1">// 4. 最后1位数(SP)通常是”0″,为检验码,目前暂备用</span>
<span class="n">TelephonyManager</span> <span class="n">tm</span> <span class="o">=</span> <span class="o">(</span><span class="n">TelephonyManager</span><span class="o">)</span> <span class="k">this</span>
<span class="o">.</span><span class="na">getSystemService</span><span class="o">(</span><span class="n">TELEPHONY_SERVICE</span><span class="o">);</span>
<span class="cm">/*</span>
<span class="cm"> * 电话状态: 1.tm.CALL_STATE_IDLE=0 无活动,无任何状态时 2.tm.CALL_STATE_RINGING=1</span>
<span class="cm"> * 响铃,电话进来时 3.tm.CALL_STATE_OFFHOOK=2 摘机</span>
<span class="cm"> */</span>
<span class="n">tm</span><span class="o">.</span><span class="na">getCallState</span><span class="o">();</span><span class="c1">// int</span>
<span class="cm">/*</span>
<span class="cm"> * 电话方位:</span>
<span class="cm"> */</span>
<span class="c1">// 返回当前移动终端的位置</span>
<span class="n">CellLocation</span> <span class="n">location</span> <span class="o">=</span> <span class="n">tm</span><span class="o">.</span><span class="na">getCellLocation</span><span class="o">();</span>
<span class="c1">// 请求位置更新,如果更新将产生广播,接收对象为注册LISTEN_CELL_LOCATION的对象,需要的permission名称为</span>
<span class="c1">// ACCESS_COARSE_LOCATION。</span>
<span class="n">location</span><span class="o">.</span><span class="na">requestLocationUpdate</span><span class="o">();</span>
<span class="cm">/**</span>
<span class="cm"> * 获取数据活动状态</span>
<span class="cm"> * </span>
<span class="cm"> * DATA_ACTIVITY_IN 数据连接状态:活动,正在接受数据 DATA_ACTIVITY_OUT 数据连接状态:活动,正在发送数据</span>
<span class="cm"> * DATA_ACTIVITY_INOUT 数据连接状态:活动,正在接受和发送数据 DATA_ACTIVITY_NONE</span>
<span class="cm"> * 数据连接状态:活动,但无数据发送和接受</span>
<span class="cm"> */</span>
<span class="n">tm</span><span class="o">.</span><span class="na">getDataActivity</span><span class="o">();</span>
<span class="cm">/**</span>
<span class="cm"> * 获取数据连接状态</span>
<span class="cm"> * </span>
<span class="cm"> * DATA_CONNECTED 数据连接状态:已连接 DATA_CONNECTING 数据连接状态:正在连接</span>
<span class="cm"> * DATA_DISCONNECTED 数据连接状态:断开 DATA_SUSPENDED 数据连接状态:暂停</span>
<span class="cm"> */</span>
<span class="n">tm</span><span class="o">.</span><span class="na">getDataState</span><span class="o">();</span>
<span class="cm">/**</span>
<span class="cm"> * 返回当前移动终端的唯一标识,设备ID</span>
<span class="cm"> * </span>
<span class="cm"> * 如果是GSM网络,返回IMEI;如果是CDMA网络,返回MEID Return null if device ID is not</span>
<span class="cm"> * available.</span>
<span class="cm"> */</span>
<span class="n">String</span> <span class="n">Imei</span> <span class="o">=</span> <span class="n">tm</span><span class="o">.</span><span class="na">getDeviceId</span><span class="o">();</span><span class="c1">// String</span>
<span class="cm">/*</span>
<span class="cm"> * 返回移动终端的软件版本,例如:GSM手机的IMEI/SV码。 设备的软件版本号: 例如:the IMEI/SV(software</span>
<span class="cm"> * version) for GSM phones. Return null if the software version is not</span>
<span class="cm"> * available.</span>
<span class="cm"> */</span>
<span class="n">tm</span><span class="o">.</span><span class="na">getDeviceSoftwareVersion</span><span class="o">();</span><span class="c1">// String</span>
<span class="cm">/*</span>
<span class="cm"> * 手机号: GSM手机的 MSISDN. Return null if it is unavailable.</span>
<span class="cm"> */</span>
<span class="n">String</span> <span class="n">phoneNum</span> <span class="o">=</span> <span class="n">tm</span><span class="o">.</span><span class="na">getLine1Number</span><span class="o">();</span><span class="c1">// String</span>
<span class="cm">/*</span>
<span class="cm"> * 获取ISO标准的国家码,即国际长途区号。 注意:仅当用户已在网络注册后有效。 在CDMA网络中结果也许不可靠。</span>
<span class="cm"> */</span>
<span class="n">tm</span><span class="o">.</span><span class="na">getNetworkCountryIso</span><span class="o">();</span><span class="c1">// String</span>
<span class="cm">/*</span>
<span class="cm"> * MCC+MNC(mobile country code + mobile network code) 注意:仅当用户已在网络注册时有效。</span>
<span class="cm"> * 在CDMA网络中结果也许不可靠。</span>
<span class="cm"> */</span>
<span class="n">tm</span><span class="o">.</span><span class="na">getNetworkOperator</span><span class="o">();</span><span class="c1">// String</span>
<span class="cm">/*</span>
<span class="cm"> * 按照字母次序的current registered operator(当前已注册的用户)的名字 注意:仅当用户已在网络注册时有效。</span>
<span class="cm"> * 在CDMA网络中结果也许不可靠。</span>
<span class="cm"> */</span>
<span class="n">tm</span><span class="o">.</span><span class="na">getNetworkOperatorName</span><span class="o">();</span><span class="c1">// String</span>
<span class="cm">/*</span>
<span class="cm"> * 当前使用的网络类型: 例如: NETWORK_TYPE_UNKNOWN 网络类型未知 0 NETWORK_TYPE_GPRS GPRS网络</span>
<span class="cm"> * 1 NETWORK_TYPE_EDGE EDGE网络 2 NETWORK_TYPE_UMTS UMTS网络 3</span>
<span class="cm"> * NETWORK_TYPE_HSDPA HSDPA网络 8 NETWORK_TYPE_HSUPA HSUPA网络 9</span>
<span class="cm"> * NETWORK_TYPE_HSPA HSPA网络 10 NETWORK_TYPE_CDMA CDMA网络,IS95A 或 IS95B. 4</span>
<span class="cm"> * NETWORK_TYPE_EVDO_0 EVDO网络, revision 0. 5 NETWORK_TYPE_EVDO_A EVDO网络,</span>
<span class="cm"> * revision A. 6 NETWORK_TYPE_1xRTT 1xRTT网络 7</span>
<span class="cm"> */</span>
<span class="n">tm</span><span class="o">.</span><span class="na">getNetworkType</span><span class="o">();</span><span class="c1">// int</span>
<span class="cm">/*</span>
<span class="cm"> * 手机类型: 例如: PHONE_TYPE_NONE 无信号 PHONE_TYPE_GSM GSM信号 PHONE_TYPE_CDMA</span>
<span class="cm"> * CDMA信号</span>
<span class="cm"> */</span>
<span class="n">tm</span><span class="o">.</span><span class="na">getPhoneType</span><span class="o">();</span><span class="c1">// int</span>
<span class="cm">/*</span>
<span class="cm"> * Returns the ISO country code equivalent for the SIM provider's</span>
<span class="cm"> * country code. 获取ISO国家码,相当于提供SIM卡的国家码。</span>
<span class="cm"> */</span>
<span class="n">tm</span><span class="o">.</span><span class="na">getSimCountryIso</span><span class="o">();</span><span class="c1">// String</span>
<span class="cm">/*</span>
<span class="cm"> * Returns the MCC+MNC (mobile country code + mobile network code) of</span>
<span class="cm"> * the provider of the SIM. 5 or 6 decimal digits.</span>
<span class="cm"> * 获取SIM卡提供的移动国家码和移动网络码.5或6位的十进制数字. SIM卡的状态必须是</span>
<span class="cm"> * SIM_STATE_READY(使用getSimState()判断).</span>
<span class="cm"> */</span>
<span class="n">tm</span><span class="o">.</span><span class="na">getSimOperator</span><span class="o">();</span><span class="c1">// String</span>
<span class="cm">/*</span>
<span class="cm"> * 服务商名称: 例如:中国移动、联通 SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).</span>
<span class="cm"> */</span>
<span class="n">tm</span><span class="o">.</span><span class="na">getSimOperatorName</span><span class="o">();</span><span class="c1">// String</span>
<span class="cm">/*</span>
<span class="cm"> * SIM卡的序列号: 需要权限:READ_PHONE_STATE</span>
<span class="cm"> */</span>
<span class="n">tm</span><span class="o">.</span><span class="na">getSimSerialNumber</span><span class="o">();</span><span class="c1">// String</span>
<span class="cm">/*</span>
<span class="cm"> * SIM的状态信息: SIM_STATE_UNKNOWN 未知状态 0 SIM_STATE_ABSENT 没插卡 1</span>
<span class="cm"> * SIM_STATE_PIN_REQUIRED 锁定状态,需要用户的PIN码解锁 2 SIM_STATE_PUK_REQUIRED</span>
<span class="cm"> * 锁定状态,需要用户的PUK码解锁 3 SIM_STATE_NETWORK_LOCKED 锁定状态,需要网络的PIN码解锁 4</span>
<span class="cm"> * SIM_STATE_READY 就绪状态 5</span>
<span class="cm"> */</span>
<span class="n">tm</span><span class="o">.</span><span class="na">getSimState</span><span class="o">();</span><span class="c1">// int</span>
<span class="cm">/*</span>
<span class="cm"> * 唯一的用户ID: 例如:IMSI(国际移动用户识别码) for a GSM phone. 需要权限:READ_PHONE_STATE</span>
<span class="cm"> */</span>
<span class="n">tm</span><span class="o">.</span><span class="na">getSubscriberId</span><span class="o">();</span><span class="c1">// String</span>
<span class="cm">/*</span>
<span class="cm"> * 取得和语音邮件相关的标签,即为识别符 需要权限:READ_PHONE_STATE</span>
<span class="cm"> */</span>
<span class="n">tm</span><span class="o">.</span><span class="na">getVoiceMailAlphaTag</span><span class="o">();</span><span class="c1">// String</span>
<span class="cm">/*</span>
<span class="cm"> * 获取语音邮件号码: 需要权限:READ_PHONE_STATE</span>
<span class="cm"> */</span>
<span class="n">tm</span><span class="o">.</span><span class="na">getVoiceMailNumber</span><span class="o">();</span><span class="c1">// String</span>
<span class="cm">/*</span>
<span class="cm"> * ICC卡是否存在</span>
<span class="cm"> */</span>
<span class="n">tm</span><span class="o">.</span><span class="na">hasIccCard</span><span class="o">();</span><span class="c1">// boolean</span>
<span class="cm">/*</span>
<span class="cm"> * 是否漫游: (在GSM用途下)</span>
<span class="cm"> */</span>
<span class="n">tm</span><span class="o">.</span><span class="na">isNetworkRoaming</span><span class="o">();</span><span class="c1">//</span>
<span class="n">String</span> <span class="n">ProvidersName</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="c1">// 返回唯一的用户ID;就是这张卡的编号神马的</span>
<span class="n">String</span> <span class="n">IMSI</span> <span class="o">=</span> <span class="n">tm</span><span class="o">.</span><span class="na">getSubscriberId</span><span class="o">();</span> <span class="c1">// 国际移动用户识别码</span>
<span class="c1">// IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信。</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">IMSI</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="n">IMSI</span><span class="o">.</span><span class="na">startsWith</span><span class="o">(</span><span class="s">"46000"</span><span class="o">)</span> <span class="o">||</span> <span class="n">IMSI</span><span class="o">.</span><span class="na">startsWith</span><span class="o">(</span><span class="s">"46002"</span><span class="o">))</span> <span class="o">{</span>
<span class="n">ProvidersName</span> <span class="o">=</span> <span class="s">"中国移动"</span><span class="o">;</span>
<span class="o">}</span> <span class="k">else</span> <span class="nf">if</span> <span class="o">(</span><span class="n">IMSI</span><span class="o">.</span><span class="na">startsWith</span><span class="o">(</span><span class="s">"46001"</span><span class="o">))</span> <span class="o">{</span>
<span class="n">ProvidersName</span> <span class="o">=</span> <span class="s">"中国联通"</span><span class="o">;</span>
<span class="o">}</span> <span class="k">else</span> <span class="nf">if</span> <span class="o">(</span><span class="n">IMSI</span><span class="o">.</span><span class="na">startsWith</span><span class="o">(</span><span class="s">"46003"</span><span class="o">))</span> <span class="o">{</span>
<span class="n">ProvidersName</span> <span class="o">=</span> <span class="s">"中国电信"</span><span class="o">;</span>
<span class="o">}</span>
<span class="c1">// 返回当前移动终端附近移动终端的信息</span>
<span class="cm">/*</span>
<span class="cm"> * 附近的电话的信息: 类型:List<NeighboringCellInfo></span>
<span class="cm"> * 需要权限:android.Manifest.permission#ACCESS_COARSE_UPDATES</span>
<span class="cm"> */</span>
<span class="n">List</span><span class="o"><</span><span class="n">NeighboringCellInfo</span><span class="o">></span> <span class="n">infos</span> <span class="o">=</span> <span class="n">tm</span><span class="o">.</span><span class="na">getNeighboringCellInfo</span><span class="o">();</span>
<span class="k">for</span> <span class="o">(</span><span class="n">NeighboringCellInfo</span> <span class="n">info</span> <span class="o">:</span> <span class="n">infos</span><span class="o">)</span> <span class="o">{</span>
<span class="c1">// 获取邻居小区号</span>
<span class="kt">int</span> <span class="n">cid</span> <span class="o">=</span> <span class="n">info</span><span class="o">.</span><span class="na">getCid</span><span class="o">();</span>
<span class="c1">// 获取邻居小区LAC,LAC:</span>
<span class="c1">// 位置区域码。为了确定移动台的位置,每个GSM/PLMN的覆盖区都被划分成许多位置区,LAC则用于标识不同的位置区。</span>
<span class="n">info</span><span class="o">.</span><span class="na">getLac</span><span class="o">();</span>
<span class="n">info</span><span class="o">.</span><span class="na">getNetworkType</span><span class="o">();</span>
<span class="n">info</span><span class="o">.</span><span class="na">getPsc</span><span class="o">();</span>
<span class="c1">// 获取邻居小区信号强度</span>
<span class="n">info</span><span class="o">.</span><span class="na">getRssi</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">return</span> <span class="s">"手机号码:"</span> <span class="o">+</span> <span class="n">phoneNum</span> <span class="o">+</span> <span class="s">"\n"</span> <span class="o">+</span> <span class="s">"服务商:"</span> <span class="o">+</span> <span class="n">ProvidersName</span> <span class="o">+</span> <span class="s">"\n"</span>
<span class="o">+</span> <span class="s">"IMEI:"</span> <span class="o">+</span> <span class="n">Imei</span><span class="o">;</span>
<span class="o">}</span>
<span class="c1">// 显示信息对话框</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">showDialog</span><span class="o">(</span><span class="n">String</span> <span class="n">title</span><span class="o">,</span> <span class="n">String</span> <span class="n">info</span><span class="o">)</span> <span class="o">{</span>
<span class="n">AlertDialog</span> <span class="n">dialog</span> <span class="o">=</span> <span class="k">new</span> <span class="n">AlertDialog</span><span class="o">.</span><span class="na">Builder</span><span class="o">(</span><span class="k">this</span><span class="o">)</span>
<span class="o">.</span><span class="na">setTitle</span><span class="o">(</span><span class="n">title</span><span class="o">)</span>
<span class="o">.</span><span class="na">setMessage</span><span class="o">(</span><span class="n">info</span><span class="o">)</span>
<span class="o">.</span><span class="na">setPositiveButton</span><span class="o">(</span><span class="s">"close"</span><span class="o">,</span>
<span class="k">new</span> <span class="n">DialogInterface</span><span class="o">.</span><span class="na">OnClickListener</span><span class="o">()</span> <span class="o">{</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onClick</span><span class="o">(</span><span class="n">DialogInterface</span> <span class="n">dialog</span><span class="o">,</span>
<span class="kt">int</span> <span class="n">which</span><span class="o">)</span> <span class="o">{</span>
<span class="n">dialog</span><span class="o">.</span><span class="na">cancel</span><span class="o">();</span>
<span class="n">dialog</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}).</span><span class="na">create</span><span class="o">();</span>
<span class="n">dialog</span><span class="o">.</span><span class="na">show</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
</code></pre></div>
Android之美化控件Shape
2013-07-09T00:00:00+00:00
http://wuxiaolong.me/android/2013/07/09/shape
<p>除了使用drawable这样的图片外,随着图片资源增多,程序也越来越大,今天我们自定义图形shape的方法。</p>
<div class="highlight"><pre><code class="language-java" data-lang="java"> <span class="o"><</span><span class="n">shape</span><span class="o">></span>
<span class="o"><!--</span> <span class="n">实心</span> <span class="o">--></span>
<span class="o"><</span><span class="n">solid</span> <span class="nl">android:</span><span class="n">color</span><span class="o">=</span><span class="s">"#ff9d77"</span><span class="o">/></span>
<span class="o"><!--</span> <span class="n">渐变</span> <span class="o">--></span>
<span class="o"><</span><span class="n">gradient</span>
<span class="nl">android:</span><span class="n">startColor</span><span class="o">=</span><span class="s">"#ff8c00"</span>
<span class="nl">android:</span><span class="n">endColor</span><span class="o">=</span><span class="s">"#FFFFFF"</span>
<span class="nl">android:</span><span class="n">angle</span><span class="o">=</span><span class="s">"270"</span> <span class="o">/></span>
<span class="o"><!--</span> <span class="n">描边</span> <span class="o">--></span>
<span class="o"><</span><span class="n">stroke</span>
<span class="nl">android:</span><span class="n">width</span><span class="o">=</span><span class="s">"2dp"</span>
<span class="nl">android:</span><span class="n">color</span><span class="o">=</span><span class="s">"#dcdcdc"</span> <span class="o">/></span>
<span class="o"><!--</span> <span class="n">圆角</span> <span class="o">--></span>
<span class="o"><</span><span class="n">corners</span>
<span class="nl">android:</span><span class="n">radius</span><span class="o">=</span><span class="s">"2dp"</span> <span class="o">/></span>
<span class="o"><</span><span class="n">padding</span>
<span class="nl">android:</span><span class="n">left</span><span class="o">=</span><span class="s">"10dp"</span>
<span class="nl">android:</span><span class="n">top</span><span class="o">=</span><span class="s">"10dp"</span>
<span class="nl">android:</span><span class="n">right</span><span class="o">=</span><span class="s">"10dp"</span>
<span class="nl">android:</span><span class="n">bottom</span><span class="o">=</span><span class="s">"10dp"</span> <span class="o">/></span>
<span class="o"></</span><span class="n">shape</span><span class="o">></span>
</code></pre></div>
<ul>
<li><p>solid:实心,就是填充的意思</p>
<p>android:color指定填充的颜色</p></li>
<li><p>gradient:渐变</p>
<p>android:startColor和android:endColor分别为起始和结束颜色,ndroid:angle是渐变角度,必须为45的整数倍。</p>
<p>另外渐变默认的模式为android:type="linear",即线性渐变,可以指定渐变为径向渐变,android:type="radial",径向渐变需要指定半径android:gradientRadius="50"。</p></li>
<li><p>stroke:描边</p>
<p>android:width="2dp" 描边的宽度,android:color 描边的颜色。
我们还可以把描边弄成虚线的形式,设置方式为:
android:dashWidth="5dp"
android:dashGap="3dp"
其中android:dashWidth表示'-'这样一个横线的宽度,android:dashGap表示之间隔开的距离。</p></li>
<li><p>corners:圆角
android:radius为角的弧度,值越大角越圆。
我们还可以把四个角设定成不同的角度,方法为:</p></li>
</ul>
<div class="highlight"><pre><code class="language-java" data-lang="java"> <span class="o"><</span><span class="n">corners</span>
<span class="nl">android:</span><span class="n">topRightRadius</span><span class="o">=</span><span class="s">"20dp"</span> <span class="n">右上角</span>
<span class="nl">android:</span><span class="n">bottomLeftRadius</span><span class="o">=</span><span class="s">"20dp"</span> <span class="n">右下角</span>
<span class="nl">android:</span><span class="n">topLeftRadius</span><span class="o">=</span><span class="s">"1dp"</span> <span class="n">左上角</span>
<span class="nl">android:</span><span class="n">bottomRightRadius</span><span class="o">=</span><span class="s">"0dp"</span> <span class="n">左下角</span>
<span class="o">/></span>
</code></pre></div><div class="highlight"><pre><code class="language-text" data-lang="text">这里有个地方需要注意,bottomLeftRadius是右下角,而不是左下角,这个有点郁闷,不过不影响使用,记得别搞错了就行。
</code></pre></div>
<ul>
<li>padding:间隔
这个就不用多说了,XML布局文件中经常用到。</li>
</ul>
<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="o"><?</span><span class="n">xml</span> <span class="n">version</span><span class="o">=</span><span class="s">"1.0"</span> <span class="n">encoding</span><span class="o">=</span><span class="s">"utf-8"</span><span class="o">?></span>
<span class="o"><</span><span class="n">selector</span>
<span class="nl">xmlns:</span><span class="n">android</span><span class="o">=</span><span class="s">"http://schemas.android.com/apk/res/android"</span><span class="o">></span>
<span class="o"><</span><span class="n">item</span> <span class="nl">android:</span><span class="n">state_pressed</span><span class="o">=</span><span class="s">"true"</span> <span class="o">></span>
<span class="o"><</span><span class="n">shape</span><span class="o">></span>
<span class="o"><</span><span class="n">gradient</span>
<span class="nl">android:</span><span class="n">startColor</span><span class="o">=</span><span class="s">"#ff8c00"</span>
<span class="nl">android:</span><span class="n">endColor</span><span class="o">=</span><span class="s">"#FFFFFF"</span>
<span class="nl">android:</span><span class="n">angle</span><span class="o">=</span><span class="s">"270"</span> <span class="o">/></span>
<span class="o"><</span><span class="n">stroke</span>
<span class="nl">android:</span><span class="n">width</span><span class="o">=</span><span class="s">"2dp"</span>
<span class="nl">android:</span><span class="n">color</span><span class="o">=</span><span class="s">"#dcdcdc"</span> <span class="o">/></span>
<span class="o"><</span><span class="n">corners</span>
<span class="nl">android:</span><span class="n">radius</span><span class="o">=</span><span class="s">"10dp"</span> <span class="o">/></span>
<span class="o"><</span><span class="n">padding</span>
<span class="nl">android:</span><span class="n">left</span><span class="o">=</span><span class="s">"10dp"</span>
<span class="nl">android:</span><span class="n">top</span><span class="o">=</span><span class="s">"10dp"</span>
<span class="nl">android:</span><span class="n">right</span><span class="o">=</span><span class="s">"10dp"</span>
<span class="nl">android:</span><span class="n">bottom</span><span class="o">=</span><span class="s">"10dp"</span> <span class="o">/></span>
<span class="o"></</span><span class="n">shape</span><span class="o">></span>
<span class="o"></</span><span class="n">item</span><span class="o">></span>
<span class="o"><</span><span class="n">item</span> <span class="nl">android:</span><span class="n">state_focused</span><span class="o">=</span><span class="s">"true"</span> <span class="o">></span>
<span class="o"><</span><span class="n">shape</span><span class="o">></span>
<span class="o"><</span><span class="n">gradient</span>
<span class="nl">android:</span><span class="n">startColor</span><span class="o">=</span><span class="s">"#ffc2b7"</span>
<span class="nl">android:</span><span class="n">endColor</span><span class="o">=</span><span class="s">"#ffc2b7"</span>
<span class="nl">android:</span><span class="n">angle</span><span class="o">=</span><span class="s">"270"</span> <span class="o">/></span>
<span class="o"><</span><span class="n">stroke</span>
<span class="nl">android:</span><span class="n">width</span><span class="o">=</span><span class="s">"2dp"</span>
<span class="nl">android:</span><span class="n">color</span><span class="o">=</span><span class="s">"#dcdcdc"</span> <span class="o">/></span>
<span class="o"><</span><span class="n">corners</span>
<span class="nl">android:</span><span class="n">radius</span><span class="o">=</span><span class="s">"10dp"</span> <span class="o">/></span>
<span class="o"><</span><span class="n">padding</span>
<span class="nl">android:</span><span class="n">left</span><span class="o">=</span><span class="s">"10dp"</span>
<span class="nl">android:</span><span class="n">top</span><span class="o">=</span><span class="s">"10dp"</span>
<span class="nl">android:</span><span class="n">right</span><span class="o">=</span><span class="s">"10dp"</span>
<span class="nl">android:</span><span class="n">bottom</span><span class="o">=</span><span class="s">"10dp"</span> <span class="o">/></span>
<span class="o"></</span><span class="n">shape</span><span class="o">></span>
<span class="o"></</span><span class="n">item</span><span class="o">></span>
<span class="o"><</span><span class="n">item</span><span class="o">></span>
<span class="o"><</span><span class="n">shape</span><span class="o">></span>
<span class="o"><</span><span class="n">gradient</span>
<span class="nl">android:</span><span class="n">startColor</span><span class="o">=</span><span class="s">"#ff9d77"</span>
<span class="nl">android:</span><span class="n">endColor</span><span class="o">=</span><span class="s">"#ff9d77"</span>
<span class="nl">android:</span><span class="n">angle</span><span class="o">=</span><span class="s">"270"</span> <span class="o">/></span>
<span class="o"><</span><span class="n">stroke</span>
<span class="nl">android:</span><span class="n">width</span><span class="o">=</span><span class="s">"2dp"</span>
<span class="nl">android:</span><span class="n">color</span><span class="o">=</span><span class="s">"#fad3cf"</span> <span class="o">/></span>
<span class="o"><</span><span class="n">corners</span>
<span class="nl">android:</span><span class="n">radius</span><span class="o">=</span><span class="s">"10dp"</span> <span class="o">/></span>
<span class="o"><</span><span class="n">padding</span>
<span class="nl">android:</span><span class="n">left</span><span class="o">=</span><span class="s">"10dp"</span>
<span class="nl">android:</span><span class="n">top</span><span class="o">=</span><span class="s">"10dp"</span>
<span class="nl">android:</span><span class="n">right</span><span class="o">=</span><span class="s">"10dp"</span>
<span class="nl">android:</span><span class="n">bottom</span><span class="o">=</span><span class="s">"10dp"</span> <span class="o">/></span>
<span class="o"></</span><span class="n">shape</span><span class="o">></span>
<span class="o"></</span><span class="n">item</span><span class="o">></span>
<span class="o"></</span><span class="n">selector</span><span class="o">></span>
</code></pre></div>
<p>以上几个item的区别主要是体现在state<u>pressed按下或state</u>focused获得焦点时,当当来判断显示什么类型,而没有state_xxx属性的item可以看作是常规状态下。</p>
<p>常规状态效果图:
<img src="http://wuxiaolong.qiniudn.com/2013-07-09-shape-1.png" alt="常规状态效果图">
state<u>pressed按下或state</u>focused获得焦点:
<img src="http://wuxiaolong.qiniudn.com/2013-07-09-shape-2.png" alt="常规状态效果图"></p>
Android开发者应该保持以下特质
2013-06-14T00:00:00+00:00
http://wuxiaolong.me/android/2013/06/14/android-developers-should-keep-the-following-characteristics
<ol>
<li>深读SDK文档</li>
<li>深读SDK的APIDemo和Samples</li>
<li>掌握GIT开源代码</li>
<li>多了解Android开源项目,学习别人的手法写程序</li>
</ol>
SQLite随机取n行的方法
2013-03-02T00:00:00+00:00
http://wuxiaolong.me/android/2013/03/02/methods-SQLite-were-randomly-selected-for-the-N
<p>百度SQLite 随机取n行的方法大多数如下:</p>
<div class="highlight"><pre><code class="language-java" data-lang="java"> <span class="n">SELECT</span> <span class="n">key</span><span class="o">,</span><span class="n">value</span> <span class="n">FROM</span> <span class="n">dict</span> <span class="n">ORDER</span> <span class="n">BY</span> <span class="nf">RANDOM</span><span class="o">(</span><span class="n">key</span><span class="o">)</span> <span class="n">LIMIT</span> <span class="mi">1</span>
</code></pre></div>
<p>那如何写入android的SQLite?LIMIT 1
我也懂了就是拿到一条数据,可能是key给我误导了,
我运行时一直报错,现在才调试好。
现在分享给大家,代码如下:</p>
<div class="highlight"><pre><code class="language-java" data-lang="java"> <span class="n">Cursor</span> <span class="n">cursor</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="na">query</span><span class="o">(</span><span class="s">"表名"</span><span class="o">,</span> <span class="k">new</span> <span class="n">String</span><span class="o">[]</span> <span class="o">{</span> <span class="s">"*"</span> <span class="o">},</span> <span class="kc">null</span><span class="o">,</span> <span class="kc">null</span><span class="o">,</span><span class="kc">null</span><span class="o">,</span> <span class="kc">null</span><span class="o">,</span> <span class="s">"RANDOM()"</span><span class="o">);</span>
</code></pre></div>