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

<channel>
	<title>BPS株式会社 開発ブログ Beyond Perspective Solutions LTD. &#187; java</title>
	<atom:link href="http://www.bpsinc.jp/blog/archives/category/programming-language/java/feed" rel="self" type="application/rss+xml" />
	<link>http://www.bpsinc.jp/blog</link>
	<description>BPS株式会社（Beyond Perspective Solutions）のプログラマによる技術・開発などに関してのブログです</description>
	<lastBuildDate>Wed, 20 Jul 2011 08:14:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MusicFly v2.2.3リリース XperiaMini対応</title>
		<link>http://www.bpsinc.jp/blog/archives/2243</link>
		<comments>http://www.bpsinc.jp/blog/archives/2243#comments</comments>
		<pubDate>Fri, 30 Jul 2010 09:52:45 +0000</pubDate>
		<dc:creator>shibachan</dc:creator>
				<category><![CDATA[MusicFly]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[プレスリリース]]></category>
		<category><![CDATA[芝原]]></category>
		<category><![CDATA[XperiaMini]]></category>
		<category><![CDATA[アップデート]]></category>
		<category><![CDATA[バグ]]></category>
		<category><![CDATA[低解像度]]></category>
		<category><![CDATA[高解像度]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=2243</guid>
		<description><![CDATA[弊社BPSで開発しておりますAndroid端末向け音楽試聴アプリMusicFlyを先ほど１週間ぶりにアップデートしました。
今回のアップデートにより
XperiaMiniに代表される低解像度端末や、反対の高解像度端末など [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.bpsinc.jp">弊社BPS</a>で開発しておりますAndroid端末向け音楽試聴アプリ<a href="http://musicfly.jp">MusicFly</a>を先ほど１週間ぶりにアップデートしました。</p>
<p>今回のアップデートにより</p>
<p>XperiaMiniに代表される低解像度端末や、反対の高解像度端末などへの対応を果たし</p>
<p>全スクリーンサイズ対応のアプリケーションとなりました。</p>
<p><a href="http://android.asai24.com/archives/51378321.html">技術者向けの参考情報</a></p>
<p>また、以前より原因が解明できずにいたバグのいくつか解決することができました。</p>
<p>そのうちの一つがAndroid1.5でのみタブを利用した画面で強制終了してしまうクリティカルなバグであり、</p>
<p>今回無事解決しました。<a href="http://www.bpsinc.jp/blog/archives/2224">技術者向けの詳しい話はこちらで。</a></p>
<p>該当端末を利用している方にはご不便おかけしました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/2243/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android 1.5でTabHostを使った場合、StackOverflowErrorが発生する</title>
		<link>http://www.bpsinc.jp/blog/archives/2224</link>
		<comments>http://www.bpsinc.jp/blog/archives/2224#comments</comments>
		<pubDate>Fri, 30 Jul 2010 09:10:17 +0000</pubDate>
		<dc:creator>baba</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[馬場]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[エラー]]></category>
		<category><![CDATA[タブ]]></category>
		<category><![CDATA[バグ]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=2224</guid>
		<description><![CDATA[Androidで便利な、タブ表示。
これは、TabActivity, TabHost, TabSpecを使って簡単に実現できます。
src/MainActivity.java
package jp.bpsinc.andr [...]]]></description>
			<content:encoded><![CDATA[<p>Androidで便利な、タブ表示。</p>
<div id="attachment_2225" class="wp-caption aligncenter" style="width: 207px"><a href="http://www.bpsinc.jp/blog/wp-content/uploads/2010/07/tab.png"><img class="size-medium wp-image-2225" title="tab" src="http://www.bpsinc.jp/blog/wp-content/uploads/2010/07/tab-197x300.png" alt="タブ表示" width="197" height="300" /></a><p class="wp-caption-text">タブ表示</p></div>
<p>これは、TabActivity, TabHost, TabSpecを使って簡単に実現できます。</p>
<p>src/MainActivity.java</p>
<pre class="brush:java">package jp.bpsinc.android.tabtest;

import android.app.TabActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;

public class MainActivity extends TabActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TabHost tabHost = getTabHost();
    LayoutInflater.from(this).inflate(R.layout.main, tabHost.getTabContentView(), true);

    //タブを作る
    TabSpec tab1 = tabHost.newTabSpec("tab1");
    tab1.setIndicator("tab1");
    tab1.setContent(R.id.tab1);

    TabSpec tab2 = tabHost.newTabSpec("tab2");
    tab2.setIndicator("tab2");
    tab2.setContent(R.id.tab2);

    tabHost.addTab(tab1);
    tabHost.addTab(tab2);
  }
}</pre>
<p>res/layout/main.xml</p>
<pre class="brush:xml">&#60;?xml version="1.0" encoding="utf-8"?&#62;
&#60;FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent" android:layout_height="fill_parent"&#62;

  &#60;TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="TAB1" android:id="@+id/tab1" /&#62;
  &#60;TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="TAB2" android:id="@+id/tab2" /&#62;
&#60;/FrameLayout&#62;</pre>
<p>しかし、サンプルでなく複雑なアプリを作ると、<strong>Android 1.5 (SDK Version 3) の時だけ、StackOverflowErrorが発生する</strong>という現象に見舞われることがあります。</p>
<blockquote><p>body : java.lang.StackOverflowError<br />
at android.text.TextUtils#getChars:69<br />
at android.graphics.Canvas#drawText:1278<br />
at android.text.Layout#draw:337<br />
at android.widget.TextView#onDraw:3921<br />
at android.view.View#draw:5838<br />
at android.view.ViewGroup#drawChild:1486<br />
at android.view.ViewGroup#dispatchDraw:1228<br />
at android.view.ViewGroup#drawChild:1484<br />
at android.view.ViewGroup#dispatchDraw:1228<br />
at android.view.ViewGroup#drawChild:1484<br />
at android.view.ViewGroup#dispatchDraw:1228<br />
at android.view.ViewGroup#drawChild:1484<br />
at android.view.ViewGroup#dispatchDraw:1228<br />
at android.widget.AbsListView#dispatchDraw:1319<br />
at android.widget.ListView#dispatchDraw:2820<br />
at android.view.View#draw:5944<br />
&#8230;.</p></blockquote>
<p><a href="http://groups.google.co.jp/group/android-developers/msg/c7472f71aa9e41c5">こちらのGoogleGroupディスカッション</a>でも触れられているようですが、Android 1.5では、タブの中に多重にネストしたコンテンツがあると、StackOverflowErrorが発生します。</p>
<p>手元のエミュレータで試したところ、12回ネストしたところで、エラーになりました。</p>
<pre class="brush:xml">&#60;?xml version="1.0" encoding="utf-8"?&#62;
&#60;FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent" android:layout_height="fill_parent"&#62;

  &#60;TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="TAB1" android:id="@+id/tab1" /&#62;

  &#60;FrameLayout android:id="@+id/tab2" android:layout_width="fill_parent" android:layout_height="fill_parent"&#62;
    &#60;LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"&#62;
      &#60;LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"&#62;
        &#60;LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"&#62;
          &#60;LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"&#62;
            &#60;LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"&#62;
              &#60;LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"&#62;
                &#60;LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"&#62;
                  &#60;LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"&#62;
                    &#60;LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"&#62;
                      &#60;LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"&#62;
                        &#60;LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"&#62;
                          &#60;TextView android:text="TAB2" android:layout_width="wrap_content" android:layout_height="wrap_content" /&#62;
                        &#60;/LinearLayout&#62;
                      &#60;/LinearLayout&#62;
                    &#60;/LinearLayout&#62;
                  &#60;/LinearLayout&#62;
                &#60;/LinearLayout&#62;
              &#60;/LinearLayout&#62;
            &#60;/LinearLayout&#62;
          &#60;/LinearLayout&#62;
        &#60;/LinearLayout&#62;
      &#60;/LinearLayout&#62;
    &#60;/LinearLayout&#62;
  &#60;/FrameLayout&#62;
&#60;/FrameLayout&#62;</pre>
<p>XMLをパーツに分けて書いていると、うっかり12回を超えてしまうことがあるので、注意が必要です。<br />
解決策としては、ネスト回数を減らすか、Android 1.5を対象から外すという後ろ向きなものが最適ですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/2224/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MusicFly 他アプリから起動する</title>
		<link>http://www.bpsinc.jp/blog/archives/2109</link>
		<comments>http://www.bpsinc.jp/blog/archives/2109#comments</comments>
		<pubDate>Fri, 23 Jul 2010 02:06:46 +0000</pubDate>
		<dc:creator>shibachan</dc:creator>
				<category><![CDATA[MusicFly]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[芝原]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=2109</guid>
		<description><![CDATA[音楽試聴AndroidアプリケーションMusicFlyが先日公開されたバージョン2.2.0より、他のアプリから呼び出すことが可能になりました。
アーティスト名もしくはアルバム名を受け取ってその検索結果一覧画面を表示させる [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://musicfly.jp">音楽試聴AndroidアプリケーションMusicFly</a>が先日公開されたバージョン2.2.0より、他のアプリから呼び出すことが可能になりました。</p>
<p>アーティスト名もしくはアルバム名を受け取ってその検索結果一覧画面を表示させることができます。</p>
<div id="attachment_2186" class="wp-caption alignleft" style="width: 178px"><img class="size-medium wp-image-2186" title="src" src="http://www.bpsinc.jp/blog/wp-content/uploads/2010/07/src-168x300.png" alt="他アプリケーション" width="168" height="300" /><p class="wp-caption-text">他アプリケーション →</p></div>
<div id="attachment_2187" class="wp-caption alignleft" style="width: 178px"><img class="size-medium wp-image-2187" title="dst" src="http://www.bpsinc.jp/blog/wp-content/uploads/2010/07/dst-168x300.png" alt="MusicFly" width="168" height="300" /><p class="wp-caption-text">MusicFly</p></div>
<div style="clear:both;"></div>
<p>右の画像はサンプルアプリケーションから【hoge】という単語でMusicFlyにアーティスト検索を起動させています。</p>
<p>サンプルアプリケーションのコードを載せておきますので、参考にしていただいて、ぜひとも素晴らしいアプリを開発してください。</p>
<pre class="brush:java">        // 入力フィールド
        final EditText editText = (EditText) findViewById(R.id.text);

        // アーティスト検索ボタン
        final Button artistBtn = (Button) findViewById(R.id.btn_artist);
        artistBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // 入力フィールドのテキストを取得
                String input = editText.getText().toString();

                // アーティスト検索を実行
                Uri uri = Uri.parse(String.format("musicfly://search?type=artist&amp;name=%s", input));
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                startActivity(intent);
            }
        });

        // アルバム検索ボタン
        final Button albumBtn = (Button) findViewById(R.id.btn_album);
        albumBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String input = editText.getText().toString();
                Uri uri = Uri.parse(String.format("musicfly://search?type=album&amp;name=%s", input));
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                startActivity(intent);
            }
        });</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/2109/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AndroidにAdMob広告を配置する入門</title>
		<link>http://www.bpsinc.jp/blog/archives/2111</link>
		<comments>http://www.bpsinc.jp/blog/archives/2111#comments</comments>
		<pubDate>Wed, 14 Jul 2010 03:34:41 +0000</pubDate>
		<dc:creator>baba</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[馬場]]></category>
		<category><![CDATA[Ad]]></category>
		<category><![CDATA[AdMob]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[広告]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=2111</guid>
		<description><![CDATA[インプレッション表示の収入がないとか、クリック単価が低いとか、なかなか広告が出ないとか、アプリ・Web開発者側からするとお金にしづらいAdMobではありますが、すごく使いやすいので、使っている方も多いと思います。
And [...]]]></description>
			<content:encoded><![CDATA[<p>インプレッション表示の収入がないとか、クリック単価が低いとか、なかなか広告が出ないとか、アプリ・Web開発者側からするとお金にしづらいAdMobではありますが、すごく使いやすいので、使っている方も多いと思います。</p>
<p>Androidに完全対応した（少ない手間で組み込める）数少ない広告システムということもあり、色々お世話になります。</p>
<p>今回は、AdMobの登録～Androidで広告を表示してみるまでの簡単な手順と、注意点です。</p>
<h4>登録</h4>
<p><a href="http://jp.admob.com/">http://jp.admob.com/</a>から登録します。</p>
<h4>アプリケーションを追加</h4>
<p>ログインしたら上部タブから「マーケットプレイス」を選択します。<br />
「キャンペーン」は広告主用のものなので、開発者は「サイト及びアプリケーション」を開きます。</p>
<p>「サイト・アプリケーションを追加」ボタンをクリックし、「Android」ボタンをクリックすると、アプリ情報入力画面になります。<br />
ここに入力した内容に間違いがあっても、広告が表示されない、ということはありませんが、なるべく正直に入力しましょう。</p>
<h4>SDKのダウンロード</h4>
<p>アプリの登録を完了すると、SDKとマニュアルPDFがダウンロードできるようになります。<br />
SDKはダウンロード・解凍して、適当な場所に置いておきます。同フォルダにAdMobSDKのリファレンス（JavaDoc）もあるので、是非参考にしてください。</p>
<p>これ以降の手順は、PDFに従うのが一番です！！</p>
<h4>広告が表示されないとき</h4>
<p>ということで、解説を途中で放棄して、「PDF通りにやったのに広告が表示されない」という場合のチェックポイントです。<br />
基本的に、ManifestにパブリッシャーIDを入れて、attrs.xml、表示したいViewのXMLを書けばOKなのですが、以下の場合、広告が表示されません。</p>
<p>・ネットワーク接続できない<br />
この場合、広告は取得できず、何も表示されません。</p>
<p>・表示領域が狭い<br />
AdViewのサイズは、横幅320px以上である必要があります。それより小さいと、何も出てきません。</p>
<p>・ログに「no ads are available」と出る場合<br />
広告がありません。AdMobは広告主に比べて開発者が多いのか、広告が見つからないことが良くあります。<br />
この場合、Webの管理画面から「自社広告」を入れておけば、何も見つからないときに自社広告を表示することができます。</p>
<p>・単に遅い<br />
Viewが表示されてから広告が表示されるまで、数秒かかるのが普通です。<br />
上部に入れる場合は、48pxくらいの高さを確保しておいた方が、レイアウトが変わらなくて良いかもしれません。</p>
<h4>動的にキーワードフィルタする</h4>
<p>Web管理画面から、表示する広告のジャンル、キーワードフィルタ等を設定することができます。<br />
しかし、アプリのコードから指定すれば、現在表示しているコンテンツにマッチした広告を表示することも可能です。</p>
<p>以下のようなコードで可能です。</p>
<pre class="brush:java">
AdView ad = (AdView)findViewById(R.id.ad);
ad.setKeywords("music");
</pre>
<p>とても多機能なAdMob、うまく使いこなしたいですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/2111/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android　他のアプリケーションにファイルを渡す</title>
		<link>http://www.bpsinc.jp/blog/archives/1970</link>
		<comments>http://www.bpsinc.jp/blog/archives/1970#comments</comments>
		<pubDate>Thu, 01 Jul 2010 09:06:14 +0000</pubDate>
		<dc:creator>shibachan</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[芝原]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=1970</guid>
		<description><![CDATA[Androdではインテントという仕組みによって、アプリケーション間でデータを渡すことがきるのはご存じのとおり。
インテントに画像ファイルを詰めて、Gmailに渡せば新規メールの添付ファイルとなるし、
Twitterクライ [...]]]></description>
			<content:encoded><![CDATA[<p>Androdではインテントという仕組みによって、アプリケーション間でデータを渡すことがきるのはご存じのとおり。<br />
インテントに画像ファイルを詰めて、Gmailに渡せば新規メールの添付ファイルとなるし、<br />
Twitterクライアントに渡せば画像をつぶやいてくれたりできます。</p>
<p>では具体的にどう書けばいいのかというと、</p>
<pre class="brush:java">
File file = new File(ファイルパス);  // 他アプリに渡すファイル

Intent intent = new Intent(Intent.ACTION_SEND);  // データーを送信するインテント
intent.setType("image/png");                                // データタイプの指定
intent.putExtra(Intent.EXTRA_SUBJECT, "件名");
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
startActivity(intent);
</pre>
<p>でいけます。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/1970/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android RejectedExecutionException</title>
		<link>http://www.bpsinc.jp/blog/archives/1974</link>
		<comments>http://www.bpsinc.jp/blog/archives/1974#comments</comments>
		<pubDate>Thu, 01 Jul 2010 07:40:14 +0000</pubDate>
		<dc:creator>baba</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[馬場]]></category>
		<category><![CDATA[例外]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=1974</guid>
		<description><![CDATA[開発中は問題ないのに、いざリリースしてデータをたっぷりと詰め込んだら、RejectedExecutionExceptionが発生して強制終了、ということがあります。
これは、AsyncTaskにたくさん詰め込みすぎの場合 [...]]]></description>
			<content:encoded><![CDATA[<p>開発中は問題ないのに、いざリリースしてデータをたっぷりと詰め込んだら、RejectedExecutionExceptionが発生して強制終了、ということがあります。</p>
<p>これは、AsyncTaskにたくさん詰め込みすぎの場合などに発生します。</p>
<p>AsyncTaskでは内部的にキューを持っていますが、このキューサイズを超えるタスクをexecuteすると、ブロックされずに例外が発生します。</p>
<p>ということで、</p>
<p>・catchして後でやりなおす（すぐにやり直したら意味が無い）<br />
・catchして無視する（リスト表示程度なら、無視してユーザにリロードさせた方が良いかも）</p>
<p>などの対策をすれば良さそうです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/1974/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Androidでリリース時にデバッグログをオフにする方法</title>
		<link>http://www.bpsinc.jp/blog/archives/1946</link>
		<comments>http://www.bpsinc.jp/blog/archives/1946#comments</comments>
		<pubDate>Mon, 28 Jun 2010 08:46:19 +0000</pubDate>
		<dc:creator>shibachan</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[芝原]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=1946</guid>
		<description><![CDATA[久々の技術ネタです。
Androidでデバッグ用のログを出力する際には
Log.d(String tag, String msg);
としますが、これで出力しているログは、このまま何もしなければリリース時にユーザーさんか [...]]]></description>
			<content:encoded><![CDATA[<p>久々の技術ネタです。</p>
<p>Androidでデバッグ用のログを出力する際には</p>
<pre class="brush:java">Log.d(String tag, String msg);</pre>
<p>としますが、これで出力しているログは、このまま何もしなければリリース時にユーザーさんからも見えてしまします。</p>
<p>やはりデバッグ用のログが見えてしまうのは都合が悪いと思うので、</p>
<p>リリース時に少しのコストでこれを解消するTIPSをご紹介します。</p>
<p>方針としましては、</p>
<p>マニフェストファイルのis_debuggableがtrueの際にデバッグログの出力をオフにすることとします。</p>
<pre class="brush:java">
public class DeployUtil {

    /**
     * マニフェストファイルを読んでデバッグモードかどうかを取得
     */
    public static boolean isDebuggable(Context context) {
        PackageManager manager = context.getPackageManager();
        ApplicationInfo appInfo = null;
        try {
            appInfo = manager.getApplicationInfo(context.getPackageName(), 0);
        } catch (NameNotFoundException e) {
            return false;
        }
        if ((appInfo.flags &amp; ApplicationInfo.FLAG_DEBUGGABLE) == ApplicationInfo.FLAG_DEBUGGABLE) {
            return true;
        }
        return false;
    }
}
</pre>
<pre class="brush:java">
public class Katazou extends Application {

    private static boolean isDebuggable;

    @Override
    public void onCreate() {
        // デバッグモードか調べる
        isDebuggable = DeployUtil.isDebuggable(getApplicationContext());
    }
}
</pre>
<pre class="brush:java">
public class LogUtil {

    /**
    * デバッグログを出力する マニュフェストファイルでデバッグモードになっていなければ出力しない
    */
    public static final void d(String tag, String msg) {
        if (Katazou.isDebuggable()) {
            Log.d(tag, msg);
        }
    }
}
</pre>
<p>あとは、ソースコード中のLog.dを一括置換でLogUtil.dとすれば、<br />
リリース時にis_debuggableをtrueにするだけで簡単にデバッグログをオフにすることができます。</p>
<p>参考</p>
<p><a href="http://kamoland.com/wiki/wiki.cgi?Android%A4%C7%BC%AB%C6%B0%A5%AA%A5%D5%A4%C7%A4%AD%A4%EB%A5%ED%A5%B0%BD%D0%CE%CF">Android で自動オフできるログ出力</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/1946/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xperiaの解像度が320*569になる</title>
		<link>http://www.bpsinc.jp/blog/archives/1900</link>
		<comments>http://www.bpsinc.jp/blog/archives/1900#comments</comments>
		<pubDate>Sat, 26 Jun 2010 00:19:10 +0000</pubDate>
		<dc:creator>baba</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[馬場]]></category>
		<category><![CDATA[Xperia]]></category>
		<category><![CDATA[バグ]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=1900</guid>
		<description><![CDATA[Xperiaの解像度は480*854です。
しかし、以下のコードで解像度を取得すると、320*569と返ってくることがあります。

Display disp = getWindowManager().getDefault [...]]]></description>
			<content:encoded><![CDATA[<p>Xperiaの解像度は480*854です。</p>
<p>しかし、以下のコードで解像度を取得すると、320*569と返ってくることがあります。</p>
<pre class="brush:java">
Display disp = getWindowManager().getDefaultDisplay();
int dispWidth = disp.getWidth();
int dispHeight = disp.getHeight();
</pre>
<p>こんな時の検索ワードは、ずばり「Xperia 569 320」ですね。</p>
<p>発売直後に既に回答が議論されていました。</p>
<p><a href="http://groups.google.co.jp/group/android-group-japan/browse_thread/thread/5fad044c9b0429dd">http://groups.google.co.jp/group/android-group-japan/browse_thread/thread/5fad044c9b0429dd</a></p>
<p>要するに、minSdkVersion=&#8221;4&#8243;にしろということですね。</p>
<p>まあ、Android 1.5の機種はほぼ絶滅なので、特に問題はないんですが、なんだこれ・・・・</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/1900/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipseのパッケージ表示を階層・フラット切り替え</title>
		<link>http://www.bpsinc.jp/blog/archives/1887</link>
		<comments>http://www.bpsinc.jp/blog/archives/1887#comments</comments>
		<pubDate>Thu, 24 Jun 2010 00:09:44 +0000</pubDate>
		<dc:creator>baba</dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[馬場]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=1887</guid>
		<description><![CDATA[Javaのパッケージは、階層構造に見せかけた単なるドット区切りの名前ですが、少なくとも見た目は階層にしたいですね。
Eclipseの設定がたまに変わってしまうことがあるのですが、階層表示・フラット表示の切り替えは↓です。 [...]]]></description>
			<content:encoded><![CDATA[<p>Javaのパッケージは、階層構造に見せかけた単なるドット区切りの名前ですが、少なくとも見た目は階層にしたいですね。</p>
<p>Eclipseの設定がたまに変わってしまうことがあるのですが、階層表示・フラット表示の切り替えは↓です。</p>
<p><a href="http://www.bpsinc.jp/blog/wp-content/uploads/2010/06/eclipse.png"><img src="http://www.bpsinc.jp/blog/wp-content/uploads/2010/06/eclipse-300x194.png" alt="eclipse" title="eclipse" width="300" height="194" class="aligncenter size-medium wp-image-1888" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/1887/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>true/false一覧君</title>
		<link>http://www.bpsinc.jp/blog/archives/1686</link>
		<comments>http://www.bpsinc.jp/blog/archives/1686#comments</comments>
		<pubDate>Sat, 12 Jun 2010 00:01:24 +0000</pubDate>
		<dc:creator>baba</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[プログラミング言語]]></category>
		<category><![CDATA[馬場]]></category>
		<category><![CDATA[入門]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=1686</guid>
		<description><![CDATA[当然ながら、言語ごとに真偽判定（true/false）の基準が違います。
特にスクリプト系の言語では、明示的に型を指定しないことが多いので、たまに問題になります。
たまたま手元にあった環境で、どんな値が真に判定されるのか [...]]]></description>
			<content:encoded><![CDATA[<p>当然ながら、言語ごとに真偽判定（true/false）の基準が違います。</p>
<p>特にスクリプト系の言語では、明示的に型を指定しないことが多いので、たまに問題になります。</p>
<p>たまたま手元にあった環境で、どんな値が真に判定されるのか、というのをまとめてみました。<br />
新しい言語に突撃するときのメモ代わりにでもして頂ければ幸いです。</p>
<p>検証コードイメージ</p>
<pre class="brush:ruby">
a = 0
if a
  print 'true'
else
  print 'false'
end
</pre>
<p><a href="http://www.bpsinc.jp/blog/wp-content/uploads/2010/05/truefalse.png"><img src="http://www.bpsinc.jp/blog/wp-content/uploads/2010/05/truefalse.png" alt="truefalse" title="truefalse" width="623" class="aligncenter size-full wp-image-1687" /></a></p>
<p>凡例：<br />
× は、コンパイルエラー<br />
ｰ は、言語仕様にその値が存在しない</p>
<p>備考：<br />
*&#8221;" というのは、ナル文字の値を指す（\0なので、実体はゼロという整数値）<br />
array[] というのは、各言語での空の配列を指す<br />
※1　C言語にfalseは存在しない<br />
※2　配列のアドレスを指すため、真と評価される<br />
※3　noticeが発生するが、設定や@で抑制可能</p>
<p>こうしてみると、やはりPHPは変態です。&#8217;0&#8242; をfalseと判定する言語はあまりないですね。Webに特化しているのがよくわかります。$_GETなどは文字列で渡ってくるので、確かに手抜きに便利仕様です。</p>
<p>空配列をfalseと判定するのが、PythonとPHPというなんだかおもしろい組み合わせになりました。<br />
良く忘れるけど、rubyはゼロという数字をtrueに判定するので注意が必要ですね。</p>
<p>結局、ミスのしようが無い Java / C# は安全で好きです。<br />
また、ゼロは false、ほかは true と割り切ったC言語も、シンプルで好きです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/1686/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

