<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>kiteretsu.kayac - kayac device blog</title>
    <link rel="alternate" type="text/html" href="http://kiteretsu.kayac.com/" />
    <link rel="self" type="application/atom+xml" href="http://kiteretsu.kayac.com/atom.xml" />
    <id>tag:kiteretsu.kayac.com,2009-01-16://1</id>
    <updated>2009-12-15T10:06:46Z</updated>
    <subtitle>面白法人カヤックに新しく誕生した「カヤックデバイス部」の開発日記。</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.23-ja</generator>

<entry>
    <title>LogCatがエラーで表示できなくなる問題の解決方法</title>
    <link rel="alternate" type="text/html" href="http://kiteretsu.kayac.com/2009/12/logcat.php" />
    <id>tag:kiteretsu.kayac.com,2009://1.59</id>

    <published>2009-12-15T09:46:48Z</published>
    <updated>2009-12-15T10:06:46Z</updated>

    <summary><![CDATA[&nbsp; eclipseで制作していて、上の図のようにLogCatがエラーを...]]></summary>
    <author>
        <name>hidaka</name>
        
    </author>
    
        <category term="android" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="android" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://kiteretsu.kayac.com/">
        <![CDATA[<p><a onclick="window.open('http://kiteretsu.kayac.com/assets_c/2009/12/error-70.php','popup','width=560,height=283,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://kiteretsu.kayac.com/assets_c/2009/12/error-70.php"><img width="350" height="176" alt="error.png" class="mt-image-none" style="" src="http://kiteretsu.kayac.com/assets_c/2009/12/error-thumb-350x176-70.png" /></a>&nbsp;</p> <p>eclipseで制作していて、上の図のようにLogCatがエラーを起こし表示できなく<br />なることがありました。<br /> この解決方法はworkspaceにある<br />.metadata\.plugins\org.eclipse.core.runtime\.settingsフォルダ&nbsp;内、<br />com.android.ide.eclipse.ddms.prefsをエディタで開きます。</p> <p>com.android.ide.eclipse.ddms.logcat.filters=??という行があり、<br />「|」区切りでフィルタの設定が記述されていて、<br />１データは「aaaaa\:2\:&nbsp;aaaaa\:」のように「\:」で３つに区切られていますが、<br />エラーを起こす場合、「aaaaa\:\:2\:&nbsp;aaaaa\:」のように区切りが多い部分が<br />あると思います。ここを削除。<br />（\はバックスラッシュ）</p> <p>この後、eclipseを再起動するとLogCatが正常に動作するようになります。<br /> 原因としてはフィルタリングする文字列に「:」を使用していた際に起こるようです。</p> <p>参考：<a target="_blank" href="http://groups.google.com/group/android-developers/browse_thread/thread/ad81d61fc84f6caa/a4f995034d336768?show_docid=a4f995034d336768">Logcat View fails with &quot;Could not create the view: For input string: &quot;our&quot; &quot;</a></p>]]>
        
    </content>
</entry>

<entry>
    <title>[android]端末の情報を取得</title>
    <link rel="alternate" type="text/html" href="http://kiteretsu.kayac.com/2009/12/android-12.php" />
    <id>tag:kiteretsu.kayac.com,2009://1.58</id>

    <published>2009-12-11T02:42:13Z</published>
    <updated>2009-12-11T03:27:37Z</updated>

    <summary><![CDATA[&nbsp;ホームアプリはHOME++に落ち着いてきたhidakaです。国内では...]]></summary>
    <author>
        <name>hidaka</name>
        
    </author>
    
        <category term="android" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="andtroid" label="andtroid" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="telephonymanager" label="TelephonyManager" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://kiteretsu.kayac.com/">
        <![CDATA[<p>&nbsp;ホームアプリはHOME++に落ち着いてきたhidakaです。</p><p>国内ではandroid1.6が主流ですが、海外では2.0だったり1.5だったりと<br />バージョンはまちまちだったりします。<br />特に1.6じゃなかったっけ？という国でもキャリアによって1.5だったりと<br />いうことがあります。<br />そのためアプリのminsdkversionは1.5で作るのですが1.6以上の機種には処理を<br />切り替えたい場合など端末のバージョンによって処理を変える必要がでてきます。<br />1.6で主にテストしていて使ってるコードがじつはAPI level4で1.5では強制終了<br />くらうというオチもあります。<br />今回はそのコード。つかうクラスは<a target="_blank" href="http://developer.android.com/intl/fr/reference/android/telephony/TelephonyManager.html">TelephonyManager</a>。<br />こういうのってまとめてないと、あれ？なんだっけと時間食うんですよね。</p>]]>
        <![CDATA[<p>StringBuffer sb=new StringBuffer(); <br />
TelephonyManager tm= (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); sb.append(&quot;:&quot;+tm.getSimCountryIso());<br />
sb.append(&quot;:&quot;+tm.getSimOperator());  <br />
sb.append(&quot;:&quot;+tm.getSimOperatorName());  <br />
sb.append(&quot;:&quot;+tm.getDeviceId());  <br />
sb.append(&quot;:&quot;+tm.getDeviceSoftwareVersion());  <br />
sb.append(&quot;:&quot;+tm.getLine1Number());  <br />
sb.append(&quot;:&quot;+tm.getNetworkCountryIso()); <br />
sb.append(&quot;:&quot;+tm.getNetworkOperator());  <br />
sb.append(&quot;:&quot;+tm.getNetworkOperatorName()); <br />
sb.append(&quot;:&quot;+tm.getSimSerialNumber());  <br />
sb.append(&quot;:&quot;+tm.getSubscriberId());  <br />
sb.append(&quot;:&quot;+tm.getVoiceMailAlphaTag()); <br />
sb.append(&quot;:&quot;+tm.getVoiceMailNumber());<br /><br />
//android.os.Buildからも取得<br />
sb.append(&quot;:&quot;+Build.VERSION.RELEASE); <br />sb.append(&quot;:&quot;+Build.VERSION.INCREMENTAL); <br />sb.append(&quot;:&quot;+Build.VERSION.CODENAME); <br />sb.append(&quot;:&quot;+Build.VERSION.SDK_INT); <br />sb.append(&quot;:&quot;+Build.VERSION.SDK);</p>
<p>&nbsp;とりあえず文字列で取れるもの全て。<br />
&nbsp;</p>]]>
    </content>
</entry>

<entry>
    <title>[android]SDカードの容量をチェック</title>
    <link rel="alternate" type="text/html" href="http://kiteretsu.kayac.com/2009/12/androidsd.php" />
    <id>tag:kiteretsu.kayac.com,2009://1.57</id>

    <published>2009-12-04T01:58:33Z</published>
    <updated>2009-12-04T02:10:11Z</updated>

    <summary><![CDATA[&nbsp;先週OpenHomeのスクリーンショットを上げておきながら今はGDE...]]></summary>
    <author>
        <name>hidaka</name>
        
    </author>
    
        <category term="android" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="android" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sd" label="SD" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://kiteretsu.kayac.com/">
        <![CDATA[<p>&nbsp;先週OpenHomeのスクリーンショットを上げておきながら今はGDEを試しているhidakaです。</p> <p>今回はSDカード関係のお話。StatFsクラスを使います。<br /><span class="Apple-tab-span" style="white-space:pre">	</span>File file = Environment.getExternalStorageDirectory();<br /><span class="Apple-tab-span" style="white-space:pre">	</span>StatFs statFs = new StatFs(file.getAbsolutePath());<br /><span class="Apple-tab-span" style="white-space:pre">	</span>double tmpd = statFs.getFreeBlocks() / statFs.getAvailableBlocks();<br /><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="white-space: normal; "><span class="Apple-tab-span" style="white-space: pre; ">	</span>//アプリが使用可能なブロック数</span><br />	</span>Log.i(&quot;statFs&quot;, &quot;:&quot;+statFs.getAvailableBlocks());<br /><span class="Apple-tab-span" style="white-space: pre; ">	</span>//総ブロック数<br /><span class="Apple-tab-span" style="white-space:pre">	</span>Log.i(&quot;statFs&quot;, &quot;:&quot;+statFs.getBlockCount());<br /><span class="Apple-tab-span" style="white-space: pre; ">	</span>//１ブロックのバイト数<br /><span class="Apple-tab-span" style="white-space:pre">	</span>Log.i(&quot;statFs&quot;, &quot;:&quot;+statFs.getBlockSize());<br /><span class="Apple-style-span" style="background-color: rgb(255, 255, 255); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>//空いている使用可能なブロック数(通常はgetAvailableBlocksと同じ？)</span><br /><span class="Apple-tab-span" style="white-space:pre">	</span>Log.i(&quot;statFs&quot;, &quot;:&quot;+statFs.getFreeBlocks());</p> <p>まずは<span class="Apple-style-span" style="background-color: rgb(255, 255, 255); ">Environment.getExternalStorageDirectory()でSDカードのパスを取得。<br />通常は/sdcard/ですが念のため。<br />StatFsクラスは絶対パスをつけてnewします。<br />あとは各メソッドで取得。getBlockCount&times;&nbsp;getBlockSizeがSDカードのサイズになります。</span></p><p>&nbsp;</p>]]>
        
    </content>
</entry>

<entry>
    <title>[android]ホーム画面を公開してみる2009/11版</title>
    <link rel="alternate" type="text/html" href="http://kiteretsu.kayac.com/2009/11/android200911.php" />
    <id>tag:kiteretsu.kayac.com,2009://1.56</id>

    <published>2009-11-27T02:18:41Z</published>
    <updated>2009-11-27T03:23:41Z</updated>

    <summary>有料アプリが買えるようになったということで、久しぶりにホーム画面を晒してみます。...</summary>
    <author>
        <name>hidaka</name>
        
    </author>
    
        <category term="android" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="android" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://kiteretsu.kayac.com/">
        <![CDATA[<p>有料アプリが買えるようになったということで、久しぶりにホーム画面を晒してみます。<br />以前の<a href="http://kiteretsu.kayac.com/2009/07/android-2.php"> [android]ホーム画面を公開してみる</a>とあわせてご覧ください。<br />一部開発モードの部分もありますので、参考にならない部分も多々。<br /><a onclick="window.open('http://kiteretsu.kayac.com/assets_c/2009/11/sc_set-67.php','popup','width=2240,height=480,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://kiteretsu.kayac.com/assets_c/2009/11/sc_set-67.php"><img width="450" height="96" alt="sc_set.png" class="mt-image-none" style="" src="http://kiteretsu.kayac.com/assets_c/2009/11/sc_set-thumb-450x96-67.png" /></a></p><p>はい、HomeはOpenHomeの有料版、スキンはDark Hero、7画面で4画面目がホーム。<br />設定のPersist ModeはONです。このモードをONにするとホームがかなり高速化されるのですが、バックグラウンドのサービスの殺される頻度が増加するという問題が発生します。<br />負荷テストにちょうどいいのですが、入れて動作がとまったりするアプリがあった場合には疑ってみてください。<br />また、先週はホームアプリは<a target="_blank" href="http://www.androlib.com/android.application.mobi-intuitit-android-launcher-xqED.aspx">Home++ beta</a>を試していました。機能はまだ少ないのですが上部の通知バーを下にもってくることが可能になったりと更新に期待です。<br /><br />各画面ですが、左から一番目、検索バーと電源管理しかありませんがここはスクリーンショット用画面です。いきなり開発用途ですみません。<br /><br />次、2番目。<br />自作アプリ画面。また参考にならない。。人にどんなのやってる？って話の時用ですね。<br />一番上の段が個人製作、下2段が会社での製作です。<br /><br />次、カレンダー＋デバッグ画面。<br />ファイラーはASTRO、タスク管理系2個、メモリクリーナーと設定。あいてる3コマのスペースに開発中アプリを置いて使っています。カレンダーはPure Grid Calendarです。<br /><br />中央、ホーム画面。ここは時計・天気予報・メモ帳・ごみカレンダー。すぐに見たいものを置いてる画面です。時計と天気はweather widgets。メモ帳は<a target="_blank" href="http://octoba.net/archives/20091106-mobisle-notes-free-android-208.html">Mobisle Notes Free</a>。オクトバさんに紹介があります。メモ帳は使うのがよく変わりnote everything,RTM taskなども使っていましたがこれに落ち着いています。<br /><a target="_blank" href="http://octoba.net/archives/20091108-gomi-calendar-android-212.html">ごみカレンダー</a>は個人的なニーズからサクッと週末作ったんですが重宝しています。地味ですが。<br type="_moz" /><br />右から3番目。自作以外のよく使うアプリ。Twitterは有料買ったTwidroidと最近出てきたTwicca。<br />メインはTwiDroidですが様子見ています。他はカメラ関係4個(snapphoto proはデフォルトをトイカメラ)、音楽系、ニュース系など。k-9は仕事メール専用クライアントとして設定しておき、同期は切ってあります。<br /><br />右から2番目はなにもなし。pure calendar widget買ったのでここに入れる予定なのと、アプリが増えた時用にあいています。</p><p>一番右は利用頻度が低いもの。アプリ一覧がスキンのアイコンなどで溢れやすいのでたまに使いそうなものを置いています。</p><p>で、これまでに買ったアプリですが、<br />・Pure calendar widet<br />・Pure Grid calendar widget<br />・SnapPhoto Pro<br />・OpenHome - full<br />・twidroid PRO<br />・advanced task manager<br />・weather widget forecast<br />・ボンバーマン道場（ゲーム）<br />・Buka（ゲーム）</p><p>やはり定番が多いです。ゲーム買ってみたんですがDSをやってしまいますね。十字キーは偉大。<br />あと有料のスキンをいくつか試してみたいです。<br />定番以外のアプリを知る機会の少なさはどうしても感じてしまいます。有料アプリには人気とそうじゃないものの中間層が少ない感じ。<br /><a target="_blank" href="http://jp.androlib.com/topofday.aspx?t=paid">androlib</a>のランキング上位はたまに入れてみていますが、週１本は有料を買うようにしていきたいと思います。<br />有料でいいのに、と思う無料アプリが多くてありがたいですが、やはり有料マーケットを見ていきたいので。<br /><br />ロック画面を置き換えるflyscreenやaLockは試してみたのですが画面が出せないことがあったりして結局外しました。ロック画面置き換えは自分でも試していて完全に動作させるのは難しかったので、気になっていたのですが難しいようです。</p>]]>
        
    </content>
</entry>

<entry>
    <title>[android]apkにデータベースファイルを含める</title>
    <link rel="alternate" type="text/html" href="http://kiteretsu.kayac.com/2009/11/androidapk.php" />
    <id>tag:kiteretsu.kayac.com,2009://1.55</id>

    <published>2009-11-16T11:30:28Z</published>
    <updated>2009-11-16T11:53:16Z</updated>

    <summary><![CDATA[&nbsp;アプリ作成の際、リソースとしてデータベースを含めたいことがあり、アプ...]]></summary>
    <author>
        <name>hidaka</name>
        
    </author>
    
        <category term="android" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="android" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://kiteretsu.kayac.com/">
        <![CDATA[<p>&nbsp;アプリ作成の際、リソースとしてデータベースを含めたいことがあり、アプリの初期化でやってもいいんですが件数が多くなると初回起動が遅くなるしバージョンアップ対応がめんどくさくなりそうだし、というわけでSQLite形式のdbファイル自体をapkに含めてしまう方法です。</p>]]>
        <![CDATA[<p>&nbsp;主な流れは、</p> <p>1.初回にassetフォルダからアプリのdatabasesフォルダに移動<br /> 2.通常通りDBにアクセス</p> <p>流れと言おうとしたら２つで終わりました。調べてる時は面倒だったのにわかってしまえばこれだけですね。<br /> 以下コード。<br />public void copyFile(String srcFilePath) {<br /><span class="Apple-tab-span" style="white-space:pre">	</span>File dstFile;<br /><span class="Apple-tab-span" style="white-space:pre">	</span>String dst;<br /><span class="Apple-tab-span" style="white-space:pre">	</span>dst= &quot;/data/data/&quot; + this.getPackageName() + &quot;/databases/&quot;;<br /><span class="Apple-tab-span" style="white-space:pre">	</span>dstFile=new File(dst);<br /><span class="Apple-tab-span" style="white-space:pre">	</span>dstFile.mkdirs();<br /><span class="Apple-tab-span" style="white-space:pre">	</span>dst+=srcFilePath;<br /><span class="Apple-tab-span" style="white-space:pre">	</span>dstFile = new File(dst);<br /><span class="Apple-tab-span" style="white-space:pre">	</span>InputStream input = null;<br /><span class="Apple-tab-span" style="white-space:pre">	</span>AssetManager as = getResources().getAssets();<span class="Apple-tab-span" style="white-space:pre"><br />	</span>OutputStream output = null;<br /><span class="Apple-tab-span" style="white-space:pre">	</span>try {<br /><span class="Apple-tab-span" style="white-space:pre">		</span>input = as.open(srcFilePath);<br /><span class="Apple-tab-span" style="white-space:pre">		</span>output = new FileOutputStream(dstFile);<span class="Apple-tab-span" style="white-space:pre"><br />		</span>int DEFAULT_BUFFER_SIZE = 1024 * 4;<br /><span class="Apple-tab-span" style="white-space:pre">		</span>byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];<br /><span class="Apple-tab-span" style="white-space:pre">		</span>int n = 0;<br /><span class="Apple-tab-span" style="white-space:pre">		</span>while (-1 != (n = input.read(buffer))) {<br /><span class="Apple-tab-span" style="white-space:pre">			</span>output.write(buffer, 0, n);<br /><span class="Apple-tab-span" style="white-space:pre">		</span>}<br /><span class="Apple-tab-span" style="white-space:pre">		</span>input.close();<br /><span class="Apple-tab-span" style="white-space:pre">		</span>output.close();<br /><span class="Apple-tab-span" style="white-space:pre">	</span>} catch (FileNotFoundException e) {<br /><span class="Apple-tab-span" style="white-space:pre">		</span>e.printStackTrace();<br /><span class="Apple-tab-span" style="white-space:pre">	</span>} catch (IOException e) {<br /><span class="Apple-tab-span" style="white-space:pre">		</span>e.printStackTrace();<br /><span class="Apple-tab-span" style="white-space:pre">	</span>}<br />}</p><p>(参考：<a target="_blank" href="http://www.adamrocker.com/blog/196/android_file_io.html">AndroidのFile入出力サンプル</a>:throw Life様)</p><p>copyFile(DBファイル名)という形でassetフォルダのファイル名を指定し、アプリのdatabasesフォルダに移動します。<br />このフォルダに移動した以降は通常のSQLiteOpenHelperをextendしたクラス等から扱えますので、大量の初期データがある場合などにお使いください。</p>]]>
    </content>
</entry>

<entry>
    <title>[android]マイクの音量を取得する</title>
    <link rel="alternate" type="text/html" href="http://kiteretsu.kayac.com/2009/11/android-11.php" />
    <id>tag:kiteretsu.kayac.com,2009://1.54</id>

    <published>2009-11-13T02:00:33Z</published>
    <updated>2009-12-18T06:18:42Z</updated>

    <summary>音声の録音の際、MediaRecorderクラスを使えばすぐに3gpで保存できた...</summary>
    <author>
        <name>hidaka</name>
        
    </author>
    
        <category term="android" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="android" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="audiorecord" label="AudioRecord" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="マイク" label="マイク" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://kiteretsu.kayac.com/">
        <![CDATA[<p>音声の録音の際、MediaRecorderクラスを使えばすぐに3gpで保存できたり<br />開きやすかったりと便利ですが、音声入力の音量をとりたいなど、リアルタイム<br />に扱いたい時に使うAudioTrackとAudioRecordというクラスがあります。</p> <p>バイトデータで取得できるのでいろいろとデータの利用価値が上がるのですが、<br />これで記録されるフォーマットはPCMになります。wavで知られてたりするほぼ<br />生の音声データです。<br /> これが曲者でMediaPlayerクラスで再生できなかったりAudioTrackクラスで<br />再生しようとするとファイルのバイトデータ呼んで書き込んでとまた手間になり<br />ます。でもMediaRecorderではできないようなのでこちらを使います。</p><p>int bufferReadResultTEST = audioRecordTEST.read(bufferTEST, 0,bufferSizeTEST);<br />short tmpbuff;<br />for (int i = 0; i &lt; bufferReadResultTEST; i++) {<br />tmpbuff = bufferTEST[i];<br />tmpvmax2 = Math.max(tmpvmax2, tmpbuff);<span class="Apple-tab-span" style="white-space:pre"><br /></span>}<br /><br />こんな感じ。もうちょい高速化できるだろうし全バッファ試す必要<br />もないんだけども。<br />ちなみに<span class="Apple-style-span" style="font-family: Arial, Verdana, sans-serif; ">AudioRecordで録音がめんどくさいんで同時にMediaRecorder<br />使おうとしたら録音失敗しました。</span></p> <p>&nbsp;</p>]]>
        
    </content>
</entry>

<entry>
    <title>[android]スライドUIを実装する</title>
    <link rel="alternate" type="text/html" href="http://kiteretsu.kayac.com/2009/11/androidui.php" />
    <id>tag:kiteretsu.kayac.com,2009://1.53</id>

    <published>2009-11-06T01:46:17Z</published>
    <updated>2009-11-06T02:01:34Z</updated>

    <summary><![CDATA[&nbsp;設定画面の量の調整や、下のRECOROIDの通話録音部分のスライドス...]]></summary>
    <author>
        <name>hidaka</name>
        
    </author>
    
        <category term="android" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="android" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://kiteretsu.kayac.com/">
        <![CDATA[<p>&nbsp;設定画面の量の調整や、下のRECOROIDの通話録音部分のスライドスイッチなど、ドラッグする操作のUIを実装したい場面はよくありますが、デフォルトのものだとどうしようもなくダサい。というわけでスライダの作り方です。</p><p>まずはドラッグされるボタン。android:clickableなどはtrueにしておきます。</p>  <pre>
dgr.setOnTouchListener(new OnTouchListener() {
	@Override
	public boolean onTouch(View v, MotionEvent event) {
		if (event.getAction() == 0) {
			//Drag開始
			draggingFlag=true;
		}
		if (event.getAction() == 1) {
			//Drag終了
			draggingFlag=false;
			backcancel();
		}
		if (event.getAction() == 2) {
			//Move
			if(draggingFlag){
				int x = (int)event.getX();
				int y = (int)event.getY();
				touchXY.set(x, y);
				movepos(touchXY);
			}
		}
		return false;
	}
});</pre> <p>&nbsp;</p>]]>
        <![CDATA[<p>&nbsp;次に位置の実装。スライド量180で巻数を読んで位置は戻るようにしています。<br /> padding量を調整してスライドするよう見せています。</p>  <pre>
private void movepos(Point touchXY) {
	int newX = baseX + touchXY.x;
	int newY = baseY + touchXY.y ;
	if(newX&gt;180){
		//callfunc();
		newX=newY=0;
		draggingFlag=false;
		dgr.setPadding(0, 0, 0, 0);
	}else{
		dgr.setPadding(newX, 0, 0, 0);
	}
	dgr.invalidate();
}
<br /></pre> <p>あとは初期値なんかの設定。最初のほうにやっておきます。</p><p>baseX=dgr.getLeft();<br />baseY=dgr.getTop();</p>  <p>&nbsp;スイッチの場合は端までスライドした時に位置を強制的に戻して、関数を呼ぶ、値設定の場合は位置移動の際に変更という実装になります。</p>]]>
    </content>
</entry>

<entry>
    <title>[android]RECOROIDリリースしました</title>
    <link rel="alternate" type="text/html" href="http://kiteretsu.kayac.com/2009/10/androidrecoroid.php" />
    <id>tag:kiteretsu.kayac.com,2009://1.52</id>

    <published>2009-10-29T07:27:19Z</published>
    <updated>2009-10-29T08:20:41Z</updated>

    <summary>    メモ録音・通話録音アプリ、RECOROIDリリースしました。 通話画面・...</summary>
    <author>
        <name>hidaka</name>
        
    </author>
    
        <category term="android" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="android" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="recoroid" label="recoroid" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://kiteretsu.kayac.com/">
        <![CDATA[<p><object width="520" height="300"> <param name="movie" value="http://www.youtube.com/v/xTmdLtFDcKw&amp;hl=ja&amp;fs=1&amp;" /> <param name="allowFullScreen" value="true" /> <param name="allowscriptaccess" value="always" /><embed src="http://www.youtube.com/v/xTmdLtFDcKw&amp;hl=ja&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="520" height="300"></embed></object></p> <p>メモ録音・通話録音アプリ、RECOROIDリリースしました。<br /> 通話画面・ホーム画面のウィジェット・アプリ画面にて録音できて、ウィジェットからも最新の録音を確認できるようにしました。<br /> 通話画面は誤操作防止のためスライド式スイッチにしています。止める時も同様にスライド。<br /> ウィジェットは録音開始と停止をひとつにして、直近の再生機能のみ別ウィジェットの1アプリ2ウィジェットの構成にしてあります。アプリ画面で録音開始して他のことをしても、ウィジェット画面も同時に録音状態になるためウィジェットで録音停止することができます。再生専用ウィジェットに過去ログ画面を持たせなかったのは音声メモの性質上一番最近の録音の利用頻度が他のメモに比べて高いだろうと考えたためです。保存しておくよりも使い切りといった用途ですね。</p> <p>ウィジェットについては一般的にガジェット的なもの、トグル的なものがありますが、アプリの機能ランチャーとしての使い道もあると思いました。これからアプリを作られる方はもっともユーザーがするだろう操作はウィジェットも作成して機能ランチャーとして追加するのはいかがでしょうか。</p>]]>
        
    </content>
</entry>

<entry>
    <title>[android]ボタンをもっと押しやすく</title>
    <link rel="alternate" type="text/html" href="http://kiteretsu.kayac.com/2009/10/android-10.php" />
    <id>tag:kiteretsu.kayac.com,2009://1.51</id>

    <published>2009-10-28T04:34:42Z</published>
    <updated>2009-10-28T04:41:14Z</updated>

    <summary>以前の[android]onClickEventか、onTouchEventか。...</summary>
    <author>
        <name>hidaka</name>
        
    </author>
    
        <category term="android" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="android" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ui" label="UI" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://kiteretsu.kayac.com/">
        <![CDATA[<p>以前の<a href="http://kiteretsu.kayac.com/2009/10/androidonclickeventontouchevent.php">[android]onClickEventか、onTouchEventか。 </a>の続きです。</p><p>画像ボタンを使用する際、デザイン上あまり大きくはしたくないが押しやすくしたい<br />という場合、png画像の外側に余白として5pxほど余裕を持たせるテクニックがあります。</p><p>例えば30px*30pxのボタンの場合、外側に5pxづつ追加して40px*40pxにしてボタン<br />部分以外もボタンの領域として持たせます。これと前回のonTouchEventのイベント<br />判定を組み合わせることで操作性をかなり向上させることができます。<br />&nbsp;</p>]]>
        
    </content>
</entry>

<entry>
    <title>[android]Private Trainerリリースしました</title>
    <link rel="alternate" type="text/html" href="http://kiteretsu.kayac.com/2009/10/androidprivate-trainer.php" />
    <id>tag:kiteretsu.kayac.com,2009://1.50</id>

    <published>2009-10-21T02:02:43Z</published>
    <updated>2009-10-21T02:14:43Z</updated>

    <summary>毎日のトレーニング向けに使えるアプリ、Private Trainerリリースしま...</summary>
    <author>
        <name>hidaka</name>
        
    </author>
    
        <category term="android" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="android" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="privatetrainer" label="private trainer" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="リリース" label="リリース" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://kiteretsu.kayac.com/">
        <![CDATA[<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/TRaHWHTu6k4&amp;hl=ja&amp;fs=1&amp;" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed src="http://www.youtube.com/v/TRaHWHTu6k4&amp;hl=ja&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p><p>毎日のトレーニング向けに使えるアプリ、Private Trainerリリースしました。(<a target="_blank" href="http://bm11.kayac.com/2009/project/private-trainer/">BM11記事</a>)<br />いつものコースに目標タイムを設定することで、そのペースで移動するピンを表示してくれるアプリです。<br />地図上の表示とあわせて過去の記録・平均タイム・ベストタイムなど、コース別にトレーニング管理することができます。<br />一人でトレーニングしていても、ペースメーカーとなるターゲットを表示してくれるので、飽きずに続けることができると思います。<br />バックグラウンド動作にも対応しておりますので、これまでGPSロガーアプリを使用されていた方も是非お試しください。</p><p>また、変わった使い方として毎日の通勤通学で使うことで、帰宅時間や乗換えのタイミングの参考にすることもできます。<br />このアプリは有料配信となっております。国内の方はマーケットの有料オープンまで少々お待ちください。</p>]]>
        
    </content>
</entry>

<entry>
    <title>[android]mediarecorderの注意点</title>
    <link rel="alternate" type="text/html" href="http://kiteretsu.kayac.com/2009/10/androidmediarecorder.php" />
    <id>tag:kiteretsu.kayac.com,2009://1.49</id>

    <published>2009-10-16T00:47:29Z</published>
    <updated>2009-10-16T01:14:25Z</updated>

    <summary><![CDATA[&nbsp;マイク等の録音で利用するmediarecorderを試してみたのです...]]></summary>
    <author>
        <name>hidaka</name>
        
    </author>
    
        <category term="android" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="android" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mediarecorder" label="mediarecorder" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="permission" label="permission" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="録音" label="録音" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://kiteretsu.kayac.com/">
        <![CDATA[<p>&nbsp;マイク等の録音で利用するmediarecorderを試してみたのですが、SDK1.6からは<br />パーミッション指定として、android.permission.RECORD_AUDIOと同時に一般的に<br />SDカードに保存するためandroid.permission.WRITE_EXTERNAL_STORAGEの<br />指定も必要になります。</p><p>以前のサンプルコードを見ていると1.5では不要だったためこちらについての記述が<br />ないものが多くあります。<br /><br />コードは続きへ。</p><p>&nbsp;</p>]]>
        <![CDATA[<p>//ファイル名に使う時刻取得<br />Calendar cal_N = Calendar.getInstance();<br />Date date_N = cal_N.getTime();<br />File fileE = Environment.getExternalStorageDirectory();<br />String path = fileE +&nbsp;&quot;/app_name/&quot;+ date_N.getTime() + &quot;.3gp&quot;;<br />if (RecMode == 2) {<br /><span class="Apple-style-span" style="font-family: メイリオ, 'ＭＳ Ｐゴシック', sans-serif; font-size: 13px; color: rgb(51, 51, 51); line-height: 20px; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>//通話を録音<br /><span class="Apple-style-span" style="font-family: メイリオ, 'ＭＳ Ｐゴシック', sans-serif; font-size: 13px; color: rgb(51, 51, 51); line-height: 20px; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);<br />} else {<br /><span class="Apple-style-span" style="font-family: メイリオ, 'ＭＳ Ｐゴシック', sans-serif; font-size: 13px; color: rgb(51, 51, 51); line-height: 20px; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>//マイク録音<br /><span class="Apple-style-span" style="font-family: メイリオ, 'ＭＳ Ｐゴシック', sans-serif; font-size: 13px; color: rgb(51, 51, 51); line-height: 20px; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>recorder.setAudioSource(MediaRecorder.AudioSource.MIC);<br />}<br />recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);<br />recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);<br />try {<br /><span class="Apple-style-span" style="font-family: メイリオ, 'ＭＳ Ｐゴシック', sans-serif; font-size: 13px; color: rgb(51, 51, 51); line-height: 20px; ">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;</span>recorder.setOutputFile(path);<br /><span class="Apple-style-span" style="font-family: メイリオ, 'ＭＳ Ｐゴシック', sans-serif; font-size: 13px; color: rgb(51, 51, 51); line-height: 20px; ">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;</span>recorder.prepare();<br /><span class="Apple-style-span" style="font-family: メイリオ, 'ＭＳ Ｐゴシック', sans-serif; font-size: 13px; color: rgb(51, 51, 51); line-height: 20px; ">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;</span>recorder.start();<br /><span class="Apple-style-span" style="font-family: メイリオ, 'ＭＳ Ｐゴシック', sans-serif; font-size: 13px; color: rgb(51, 51, 51); line-height: 20px; ">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;</span>rec_flag=true;<br /><span class="Apple-style-span" style="font-family: メイリオ, 'ＭＳ Ｐゴシック', sans-serif; font-size: 13px; color: rgb(51, 51, 51); line-height: 20px; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //タイマーで自動終了</span><br /><span class="Apple-style-span" style="font-family: メイリオ, 'ＭＳ Ｐゴシック', sans-serif; font-size: 13px; color: rgb(51, 51, 51); line-height: 20px; ">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;</span>TimeLimit();<br />} catch (IOException e) {<br /><span class="Apple-style-span" style="font-family: メイリオ, 'ＭＳ Ｐゴシック', sans-serif; font-size: 13px; color: rgb(51, 51, 51); line-height: 20px; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r</span>eturn;<br />}<br /><br />*for manifest XML<br />&lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot;&gt;&lt;/uses-permission&gt;<br />&lt;uses-permission android:name=&quot;android.permission.RECORD_AUDIO&quot;&gt;&lt;/uses-permission&gt;</p>]]>
    </content>
</entry>

<entry>
    <title>[android]onClickEventか、onTouchEventか。</title>
    <link rel="alternate" type="text/html" href="http://kiteretsu.kayac.com/2009/10/androidonclickeventontouchevent.php" />
    <id>tag:kiteretsu.kayac.com,2009://1.48</id>

    <published>2009-10-09T01:23:41Z</published>
    <updated>2009-10-09T01:59:31Z</updated>

    <summary><![CDATA[&nbsp;ボタン的なUIで押しやすさというのは常に問題になりますが、PC上でカ...]]></summary>
    <author>
        <name>hidaka</name>
        
    </author>
    
        <category term="android" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="android" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ui" label="UI" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://kiteretsu.kayac.com/">
        <![CDATA[<p>&nbsp;ボタン的なUIで押しやすさというのは常に問題になりますが、PC上でカーソル操作と比較して異なる点が多いので少し考えてました。</p><p>自分は開発PCもタブレットノートを使用しているのですが、指・スライタスペン・マウス操作だと感覚的に異なる点、ユーザー学習の点で違うので、ざっくり以下のようになります。</p><p>・マウス(カーソル)操作<br />カーソルは小さい。現在のポイントしている部分がわかりやすい。<br />マウス操作なのでクリック(押して、離す)という操作。<br />なので間違って押したと思った時にドラッグして操作をキャンセルすることが可能。</p><p>・指操作<br />指で操作するために画面を隠してしまう面積が大きい。<br />面で接するためポイントしている点が細かくわかりづらい。<br />液晶の感圧式・静電容量式にもよるが、押して離すというよりは触れて選択する感覚。</p><p>・スライタスペン<br />指操作に感覚は近いがポイントしている点がわかりやすい。<br />手書き入力に一番適している。</p>]]>
        <![CDATA[<p>以上を考えた場合、現在のandroid携帯ユーザーはほぼPCのユーザーでもあるようにも思いますがPCの経験のないユーザーの場合を考えた際、クリック処理はタッチパネル操作としてわかりやすいのか？という疑問があります。押して、離した時に確定されるという点。これまでの携帯だとカーソル操作＋ハードウェアボタンですよね。</p><p>そしてここで指操作の問題、画面を隠すという点です。<br />人差し指や指先で操作した場合は押し始める点と離す点のブレが生じにくいのであまり問題ありませんがHT-03Aあたりまでの片手・親指操作で液晶全域に届く場合、左手で持って右上あたりなどボタン位置によっては指の腹でおして先で離してしまいやすくなります。または第一関節で押して腹で離すなど。<br />このときに指を離す段階でポイントしている点がボタンから外れることが経験上よくあり、ボタンの反応が悪い、押しづらいように感じてしまいます。これは利き手や姿勢にもよるので人によって差がありますが。<br />ボタンの大きさである程度カバーできますが、画面崩しかねないこともありますので。</p><p>なのでいっそonTouchのevent.getAction() == 0でボタン処理に入るというのは考える価値があるように思います。<br />触れた時点で処理されるので、画面遷移などで少しキビキビ動く印象になるなど、こちらに置き換えてみると速いように印象が変わるので、一度試してみるのはいかがでしょうか。</p><p>&nbsp;</p>]]>
    </content>
</entry>

<entry>
    <title>[android]非公式bluetooth APIを試してみる</title>
    <link rel="alternate" type="text/html" href="http://kiteretsu.kayac.com/2009/10/androidbluetooth-api.php" />
    <id>tag:kiteretsu.kayac.com,2009://1.47</id>

    <published>2009-10-01T06:45:35Z</published>
    <updated>2009-10-01T07:14:42Z</updated>

    <summary>久しぶりにFlash触ってまだAS書ける気がしたhidakaです。 先日からbl...</summary>
    <author>
        <name>hidaka</name>
        
    </author>
    
        <category term="android" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="android" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="bluetooth" label="bluetooth" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://kiteretsu.kayac.com/">
        <![CDATA[<p>久しぶりにFlash触ってまだAS書ける気がしたhidakaです。</p> <p>先日からbluetoothですれ違い通信が盛り上がってきていますので、ここらで<br />非公式bluetoothAPIについて調べてみました。</p> <p>まずは以下の２つを確認。<br /> <span id="thread_subject_site">   <a href="http://groups.google.co.jp/group/android-developers/browse_thread/thread/e32b565c7597e2ef/9c4391d4b62cec14?hl=ja&amp;lnk=gst&amp;q=bluetooth#9c4391d4b62cec14" target="_blank">(unofficial) Bluetooth API v. 0.2&nbsp; </a></span>Android developers Gooleグループ<br /> <a href="http://code.google.com/p/android-bluetooth/" target="_blank">android-bluetooth</a> google code</p><p>使い方ですが、まずはサンプルがあるのでそちらに沿って確認します。<br />google codeからSVNでダウンロード。忘れずに<a href="http://android-bluetooth.googlecode.com/files/AndroidBluetoothAPI_0.2.jar">AndroidBluetoothAPI_0.2.jar</a>も<br />ダウンロード。<br />サンプルだけおとして、あれ？APIどこだ？とちょっとあせりました。</p><p>最初なのでまずは基本的な「自分の情報を取得する」と「周りの機器を探す」を<br />試してみます。</p>]]>
        <![CDATA[<p>まずは自分の情報の取得。LocalBluetoothDevice.javaをご確認ください。</p><p>//取得して<br />localBluetoothDevice = LocalBluetoothDevice.initLocalDevice(this);<br />localBluetoothDevice.isEnabled()&nbsp; //使用可能か確認<br />localBluetoothDevice.getAddress() //Macアドレス取得<br />localBluetoothDevice.getName(); //機器名取得<br />localBluetoothDevice.getManufacturer(); //製造元取得<br />localBluetoothDevice.getCompany(); //社名取得</p><p>シンプルですね。次に周りを探す前に自分がbluetooth使えるかの確認。<br />BluetoothServiceSample.javaにあります。<br />設定に少しかかるのでリスナーなど入ってますが、要は</p><p>localBluetoothDevice.isEnabled() //利用可能かtrue or false<br />localBluetoothDevice.setEnabled(false); //設定</p><p>これだけ。<br />次に周りの機器の探し方。まずはスキャンです。<br />DeviceDiscoverySample.javaですが、リスト部分が少し長いのでざっくりいくと<br />まずスキャンするのは自分なので</p><p>localBluetoothDevice.setEnabled(false);</p><p>続いて取得部分。</p><p>String address = devices.get(position);<br />name = localBluetoothDevice.getRemoteName(address);<br />RemoteBluetoothDevice remoteBluetoothDevice = localBluetoothDevice.getRemoteBluetoothDevice(address);</p><p>あとはRemoteBluetoothDeviceオブジェクトになってくれるので、<br />サンプルのように取得するだけです。<br />bluetoothを使う際に必ず使いそうなあたりをざっくりいってみました。<br />詳しくはAndroidBluetoothLibrary\docをどうぞ。<br />&nbsp;</p>]]>
    </content>
</entry>

<entry>
    <title>[android]バックグラウンドのサービスが停止する</title>
    <link rel="alternate" type="text/html" href="http://kiteretsu.kayac.com/2009/09/android-9.php" />
    <id>tag:kiteretsu.kayac.com,2009://1.46</id>

    <published>2009-09-18T09:51:05Z</published>
    <updated>2009-09-18T10:28:27Z</updated>

    <summary>常駐系アプリを作成する際、処理をバックグラウンドでサービスで走らせることがありま...</summary>
    <author>
        <name>hidaka</name>
        
    </author>
    
        <category term="android" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="android" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://kiteretsu.kayac.com/">
        <![CDATA[<p>常駐系アプリを作成する際、処理をバックグラウンドでサービスで走らせることがありますが、Timerなどでループ処理をしていた場合、停止してしまうことがあります。</p><p>これはバグではなくメモリ不足時にバックグラウンド処理を止めるというのはOS上の仕様ですが、Timerを止められると負荷が軽くなった後も再実行されません。スレッド等、中の処理を変えて試してみたのですが、Timerだとどうしても止まります。</p><p>そこで多少精度は落ちるだろうと考えられましたがここだけalarmmanagerで代用してみたところ重い処理が入ったときには遅れることがありますが止まることなく動作しました。ループの精度もTimerとの差はあまり感じられません。<br />Timerだとそのアプリ内プロセスのみで動いていたのがalarmmanager使うことで感覚的にはシステム側から要求するのでアプリ停止しても実行できているということでしょうか。<br />理由の詳細は突き詰められておりませんが、数日alarmmanagerでテストしておりますが停止することはないようです。</p><p>この件は引き続き調査中です。</p>]]>
        
    </content>
</entry>

<entry>
    <title>[android]通知バーに実行中として通知する</title>
    <link rel="alternate" type="text/html" href="http://kiteretsu.kayac.com/2009/09/android-8.php" />
    <id>tag:kiteretsu.kayac.com,2009://1.45</id>

    <published>2009-09-11T04:28:10Z</published>
    <updated>2009-09-11T04:43:09Z</updated>

    <summary>NotificationManagerで通知領域に情報を出すことができますが、そ...</summary>
    <author>
        <name>hidaka</name>
        
    </author>
    
        <category term="android" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="android" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://kiteretsu.kayac.com/">
        <![CDATA[<p>NotificationManagerで通知領域に情報を出すことができますが、そのままですと<br />通知を消去で消せてしまい、実行中のactivityに遷移させようとしていた時などに<br />遷移できなくなってしまいます。<br />以下が通知するだけのコード。</p><p>mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);<br />notification = new Notification(R.drawable.icon, notiStr, System.currentTimeMillis());<br />contentIntent = PendingIntent.getActivity(this, 0, new　Intent(this,raceMap.class),<br />Intent.FLAG_ACTIVITY_NEW_TASK);<br />notification.setLatestEventInfo(this, getString(R.string.app_name),getString(R.string.nm1), contentIntent);<br />mNM.notify(notificationId, notification);</p><p>ここに以下の1行を追加して、上段の実行中のアプリに登録することができます。</p><p>notification.flags= Notification.FLAG_ONGOING_EVENT;</p>]]>
        
    </content>
</entry>

</feed>
