投稿

2014の投稿を表示しています

「Android開発」共通のダイアログの作り方

「OK」のみのDialogFragment を例とする。 (ここに使われるのはandroid.app.DialogFragmentです。低いバージョンには使えないことを注意ください。 android:minSdkVersion =" 11 " ) public class OkDialog extends DialogFragment { public static final int TYPE_INFO = 1; public static final int TYPE_ERROR = 2; public static OkDialog newInstance(String title, String message) { OkDialog fragment = new OkDialog(); Bundle args = new Bundle(); args.putString("title", title); args.putString("message", message); fragment.setArguments(args); return fragment; } @Override public Dialog onCreateDialog(Bundle safedInstanceState) { String title = getArguments().getString("title"); String message = getArguments().getString("message"); AlertDialog.Builder builder = new AlertDialog.Builder( getActivity(),R.style.MyDialogTheme); builder.setIcon(android.R.drawable.ic_dialog_alert); builder.setTitle(title); builder.setMessage(message); builder.setPosi...

「JAVA」BigDecimalで計算時間かかる

大量小数つけデータの計算処理に、BigDecimalを使うと、時間はかなりかかる。 対策はシンプルな基本型doubleで四則演算をしましょう。

「JAVA」SimpleDateFormatの処理時間がかかる対策

SimpleDateFormatを使う時、注意すべきところは処理時間です。 大量のデータの処理にこの関数を使う時、下記のように変えたほうがずいぶんはやくなれる。    /**   * Date型を「yyyyMMddHHmmssSSS」フォーマットの文字列に変換する * @param Date Data型の日時   * @return String 変換後の文字列   */ public static String DateFormatToMsNoBreak(Date d) {  StringBuilder s = new StringBuilder();  Calendar c = Calendar.getInstance();  c.setTime(d);  s.append(c.get(Calendar.YEAR))    .append(lpad(String.valueOf(c.get(Calendar.MONTH) + 1),2,"0"))    .append(lpad(String.valueOf(c.get(Calendar.DAY_OF_MONTH)),2,"0"))    .append(lpad(String.valueOf(c.get(Calendar.HOUR_OF_DAY)),2,"0"))    .append(lpad(String.valueOf(c.get(Calendar.MINUTE)),2,"0"))    .append(lpad(String.valueOf(c.get(Calendar.SECOND)),2,"0"))    .append(lpad(String.valueOf(c.get(Calendar.MILLISECOND)),3,"0"));  return s.toString(); }

「Android開発」Bluetoothの接続方法について

日本語のBluetoothに関するページにほとんどBluetoothChatの説明があり、 Client側で接続方法は「createRfcommSocketToServiceRecord」または「createInsecureRfcommSocketToServiceRecord」で作られているんですが、 実際に実施すると、半分ぐらい接続できない場合もあります。 対策のは下記のように、COM port numberを固定1で指定して接続すると、ほぼ接続できるようになりました。 Method m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] {int.class}); BluetoothSocket tmp = (BluetoothSocket) m.invoke(device, 1); ここに「createInsecureRfcommSocket」を使う原因は Galaxy SI, Galaxy SII and couple other tabletsの機種、android 4.xの場合には、「createRfcommSocket」がサポートされてないらしい。 なお、Android 2.3.3 で Blutooth の nonsecure socket connection をサポートする API が platform に追加されました。これにより、アプリケーションは UI での認証を依頼することなく、単純なデバイスと接続することができます。 以上の対策の参照URL: ①どうして、createRfcommSocketToServiceRecord(UUID)の方法を使わない。 http://robolabwiki.sdu.dk/mediawiki/index.php/BlueTooth_Android_Trainer_Beta 「Bugs and experiences」の説明 ②createInsecureRfcommSocketToServiceRecord(java.util.UUID)の使うべきこと。 http://kenneththorman.blogspot.jp/2013/06/android-403...

「Android開発」appcompat_7の自動生成について

ADT最新版をアップデータすると、projectを新規したら、appcompat_7が自動的に生成されてしまった。 対策をグーグルでいろいろ調べて、下記のは最善対策かなと思ってた。 ①新規projectの場合、Activityの自動作成をやめる。 android application project->project name->create activityのチェックを外す->次へ ②projectが作成されてから、activityを新規作成する。 file->new->activity ③関連xmlは手動で編集する。(ここはしょうがない、手動で対応しかない)

「Android開発」画面遷移について

最近、戻るボタンの画面遷移について、内部の管理仕組みが分からないので、困ってました。ネット上でいろいろ調べて、一番、わかりやすく、ロジックの厳密で説明してもらうサイトをやっと見つかりました。共有します。 http://techblog.qoncept.jp/?p=102 纏めてみると、 ①launchModeについて、4モードに同一タスク内で振る舞うのはstandard,singleTop,singletaskで、タスク単位に振る舞うのはsingleInstanceです。 ②同一タスク内の各アクテイビティのインスタンスがスタックの形で管理されてる。  ・standardはいつも新たに、アクテイビティのインスタンスを生成して、タスクにputする。  ・singleTopは同一タスクにTopインスタンスがputしようとなるアクテイビティと同じなら、新しく生成しなく、そのまま使う。→いつもTopインスタンスより、新しくインスタンスを生成するか判定されてる。  ・singletaskは同一タスクに同一アクテイビティのインスタンスにされて、それに、再度呼ばれたアクテイビティのインスタンスの上に存在したインスタンスが全部終了される。 ③各タスクもスタックの形で管理されてる。foregroundTaskはタスクスタックにtopの存在で、下には複数backgroundTaskが存在する。 なお、起動フラグの設定より遷移の挙動も変われます。下記のサイトで参照すれば、一目瞭然 http://www.saturn.dti.ne.jp/npaka/android/LaunchMode/

「Android開発」に関して、読みたかった本

下記の本の紹介文は全部ネット上で検索した結果のままです。 Androidアプリ開発実践ノウハウ128  [¥2730] 「脱初心者」のための知識とノウハウが詰まった、Androidアプリ開発ガイドブックです。Androidプロジェクトの基本構成から、Activityの振る舞い、ActivityとThreadの関係、Serviceの作成と利用、ファイルやデータベースの利用、サーバーとの連携などを解説しています。保守効果をあげるためのプログラミング手法、セキュアコーディングやテストの方法まで、実践的な知識とノウハウも掲載。 本格アプリを作ろう! Androidプログラミングレシピ  [¥3885] Androidの実用アプリを開発するには、各種のコーディング手法を習得する必要があります。そこで本書では、80以上の実践レシピを解説。まずは、開発環境やフレームワークの考え方など基本を説明します。そのあとUI、メディア、永続化データ、システム連携、外部ライブラリなど、テーマごとにレシピを解説。本書を読むことで、Androidプログラミングの実践力を高めることができます。(本書は『Android Recipes: A Problem-Solution Approach』の翻訳書です。) 現場で使える〔逆引き+実践〕 Androidプログラミングテクニック  [¥2919] 普及が進むスマートフォンで注目されるAndroid OSですが,組込みシステムの宿命とも言うべき「リソースの制限,バッテリー駆動」といった,プログラミングに関わる制限事項が多数存在します。また「新しい情報をリアルタイムで追随しにくい」といった問題,さらには「従来型のC/C++の組込み開発をしてきた人や会社はJavaに不慣れ」「Javaに慣れた人や会社は低レベルの理解が足りず参入に苦労」という問題もあります。こういったノウハウ不足の問題に対し,本書は徹底的にチューニングの方法を解説することでも寄与します。 PS:読みました。まあまあな感じ。。。 Smashing Android UI レスポンシブUIとデザインパターン  [¥3360] 優れたUIデザインは、世界にはばたくアプリを生み出す可能性があります。UIデザインがうまくいかないと、モ...

「Android開発」「Failed to create The Java Virtual Machine」エラー

Eclipseを開く時に、「Failed to create The Java Virtual Machine」エラーが発生された対処: 「C:\Program Files\Java\jdk1.7.0_45\bin」の場合、下記のようにeclipse.iniファイルにJavaVMの指定を-vmargsの前に挿入してから、Eclipseを再起動すれば。 -vm C:/Program Files/Java/jdk1.7.0_45/bin/javaw.exe

「Android開発」戻るキー(Backキー)を押してもActivityが終了しない

//戻るキー(Backキー)を押してもActivityが終了しない public boolean dispatchKeyEvent(KeyEvent event) {     if (event.getAction()==KeyEvent.ACTION_DOWN) {         switch (event.getKeyCode()) {         case KeyEvent.KEYCODE_BACK:             return true;         }     }     return super.dispatchKeyEvent(event); }

「Android開発」画面起動後EditTextにフォーカスを当てることで、キーボードの出現防止

対応方法: ①EditTextではなく、他のViewに を使ってフォーカスを当てることで、キーボードの出現を防止 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:focusable="true" android:focusableInTouchMode="true" > <requestFocus /> </TextView> ②EditTextのフォーカスを解除 EditText mView = (EditText) findViewById(R.id.v); mView .clearFocus(); ③ボタンにフォーカスを移動する btn.setFocusable(true); btn.setFocusableInTouchMode( true); btn.requestFocus(); ※EditTextには、requestFocus();だけ ④Window の setSoftInputMode() にSoftInputModeでキーボードを隠す。個人的にこの方法で効く。 this.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); setContentView(R.layout.test);

「Android開発」string.xmlに定義された文字列がうまく表示されない場合

res/values/複数の文字列定義のxmlがある場合、ファイルを削除したり、追加したりして、 実行すると、文字列の表示がおかしくなる場合があった場合、下記の対処を試してみてください。 ・推測原因:genの下のR.javaファイルが最新化されてない。内容を確認ください。 ・R.java最新化方法:  ①対象となるプロジェクトを選択  ②Eclipsメニュー「プロジェクト」⇒「すべてビルド」   ※「自動的にビルド」が選択された場合、外してから

「Android開発」 ボタンをクリックした時の実装方法

4種類の方法がある。 1.android.view.View.OnClickListenerインターフェースをインプリメントして、クラス内で「onClick」メソッドを定義する方法。 (main.xml) ・・・ <Button      android:text="Button1"      android:id="@+id/button1"      android:layout_width="100dp"      android:layout_height="wrap_content"      android:layout_width="match_parent" /> <Button      android:text="Button2"      android:id="@+id/button2"      android:layout_width="100dp"      android:layout_height="wrap_content"      android:layout_width="match_parent" /> ・・・ (mainActivity.java) import android.view.View; public class mainActivity extends Activity implements View.OnClickListener{     @Override protected void onCreate(Bundle icicle) {         super.onCreate(icicle);         Button button1  = (Button) findViewById(R.id.button1);   ...

「Android開発」Eclipse から実機にアプリ転送方法メモ

※Androidバージョンは4.4.2 前提: EclipseからAndroidエミュレータが実行できている。 PCの環境変数にSDKのフォルダが設定されている。 手順: ①PC側に実機端末のUSBドライバーをインストールする  ・Samsungの場合、Samsung Kiesをダウンロード    Samsung GALAXY S – Galaxy S – Android – Smartphones | SAMSUNG  ・SHARPの場合、機種専用USBドライバと「SHARP共通 ADB USBドライバ」をダウンロード    https://sh-dev.sharp.co.jp/android/modules/driver/ ②携帯側にデバッグ可能にする設定  ・「アプリ」→「設定」→「アプリケーション」→「提供元不明のアプリ」にチェック  ・「アプリ」→「設定」→「アプリケーション」→「開発」→「USBデバッグ」にチェック ③PCと携帯の接続  ・付属のUSBケーブルでPCと携帯を接続   PC側のデバイスマネージャーで携帯のUSBドライバが表示され、有効になることを確認。   または、SDKのtoolのddms.batを実施して、画面に携帯のドライバが表示されることを確認。 ④Eclipseからアプリの実行  ・プロジェクトを右クリック、  ・「実行」→「実行構成」の「ターゲット」タブをクリック、  ・「デプロイ・ターゲット選択モード」の「全てのデバイス/AVDで起動する」の以外の選択肢を   チェック、「実行」をクリック、  ・「実行中のAndroidデバイスを選択する」に表示されたAVDを選択して、「OK」をクリック。  ・アプリが実行できた。  ※初心者の場合、 サンプルソースの「HelloEffects」で実行したほうがやりやすいです。 ⑤USBの安全な取り外しできない場合 コマンドプロンプトから以下のコマンドを入力してから、USBの安全な取り外しを実施 adb kill-server adbの再起動コマンド: adb start-server       

「Android開発」初心者のためのURL纏め

Android入門 世界を目指せ!Androidアプリ開発入門 Androidで楽しく学ぶJava入門(1) – はじめてのアプリ開発 Mac(OS X Mountain Lion)にAndroidの開発環境を構築

「Android開発」drawable-xxxフォルダについて

drawableのそれぞれの解析度及びアイコンサイズ: drawable-ldpi:    120dpi、36px drawable-mdpi:   160dpi、48px drawable-hdpi:   240dpi、72px drawable-xhdpi:   320dpi、96px drawable-xxhdpi:   480dpi、148px

「Android開発」"Can't bind to local XXXX for debugger"の対策

EclipseでAndroid実機実行の時に、下記のようなエラーがでました。 [2013-02-03 07:17:19 - ddms] Can't bind to local 8600 for debugger 対策方法: Eclipseの「ウィンドウ」→「設定」→「Android」→「DDMS」で、 ①「ベース・ローカル・デバッガー・ポート」を現在のと違うポートに変更(例:8601) ②「ABHOSTを使用」にチェックを入れる(「ADBHOST値」がデフォルトで127.0.0.1のまま)