投稿

9月, 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...