■
ConnectBot for IS01(SSHクライアント)
数字+左Shiftキーで記号、絵・顔・記キーでCtrl、文字キーでEsc、数字+Shiftキーで記号、右Shiftきーで|(パイプ)が入力出来ます。
connectbot
■
Google Analyticsで収集した結果を示します。
21,315 ユニーク ユーザー数
41,579 ページビュー数(起動回数)
私のアプリは、米国が殆どです。
モトローラが多そうです。
ソース
trk = String.format("/model/%s", Build.MODEL); m_tracker.trackPageView(trk);
結果
/model/Droid,3768 /model/PC36100,2711 /model/SHW-M110S,2560 /model/DROIDX,2481 /model/GT-I9000,1829 /model/X10i,1553 /model/HTC+Desire,1496 /model/ADR6300,1313 /model/SO-01B,1048 /model/DROID2,949 /model/HTC+Wildfire,870 /model/Ally,868 /model/SCH-I500,801 /model/Eris,778 /model/SHW-M130L,666 /model/SPH-D700,618 /model/HERO200,598 /model/SGH-T959,572 /model/Desire+HD,533 /model/SHW-M100S,509 /model/T-Mobile+myTouch+3G,492 /model/E10i,436 /model/LU2300,411 /model/SPH-M900,407 /model/SAMSUNG-SGH-I897,379 /model/X10a,374 /model/GT-P1000,364 /model/U20i,339 /model/SKY+IM-A630K,333 /model/SKY+IM-A650S,332 /model/XT720,317 /model/HTC+Glacier,312 /model/E15i,311 /model/PB99400,305 /model/SC-02B,296 /model/T-Mobile+G1,287 /model/IS01,285 /model/GT540,281 /model/LG-KU3700,281 /model/SHW-M130K,279 /model/HTC+Legend,271 /model/Nexus+One,262 /model/SPH-M910,260 /model/SHW-M180S,258 /model/LS670,255 /model/T-Mobile+G2,254 /model/M860,241 /model/IS03,236 /model/Milestone,215 /model/SKY+IM-A600S,215 /model/HTC+Liberty,211 /model/T-Mobile+myTouch+3G+Slide,203 /model/GT-I5503,191 /model/GT-I5800,176 /model/Zio,163 /model/GT-I5700,160 /model/LG-P509,159 /model/SCH-R880,146 /model/Dell+Streak,144 /model/HTC+Bee,144 /model/Devour,138 /model/GT-I5801,135 /model/MB525,130 /model/DROID2+GLOBAL,128 /model/HTC+Vision,124 /model/LG-LU3700,122 /model/SH-03C,122 /model/XT800W,116 /model/HTC+Magic,113 /model/IM-A690L,112 /model/MTC+Evo,110 /model/LG-P500,97 /model/E10a,94 /model/HTC+Hero,90 /model/Liquid,84 /model/GT-I5500,82 /model/Vortex,81 /model/A853,80 /model/HTC+Tattoo,76 /model/Milestone+XT720,70 /model/SU950,69 /model/Ideos,65 /model/LG+KH5200,64 /model/GT-I9000M,62 /model/A854,59 /model/Galaxy,49 /model/U20a,49 /model/HTC+Aria+A6380,48 /model/GT-I9000T,47 /model/SPH-M920,47 /model/EV-S110,46 /model/EV-S100,44 /model/KU9500,44 /model/Garminfone,43 /model/LG-SU370,39 /model/X06HT,39 /model/US740,36 /model/SC-01C,35 /model/Docomo+HT-03A,33 /model/U8100,33 /model/Behold+II,31 /model/Comet,31 /model/SK-S100,29 /model/CBW+Blaze,28 /model/GT-I9000B,28 /model/Garmin-Asus+A10,24 /model/MB200,24 /model/Vodafone+845,24 /model/FroyoEris,23 /model/SBM003SH,23 /model/U8110,23 /model/LG-MS690,21 /model/MotoA953,21 /model/Spice_Mi300,21 /model/XT701,21 /model/Boston,20 /model/CHT8000,19 /model/SCH-I400,19 /model/SH-10B,19 /model/ZTE-BLADE,19 /model/SAMSUNG-SGH-I896,18 /model/U8230,18 /model/001HT,17 /model/A101IT,17 /model/Garmin-Asus+A50,17 /model/Orange+San+Francisco,17 /model/Ideos+S7,16 /model/IM-A690S,16 /model/MB502,16 /model/MotoMB511,16 /model/GT-I5500L,15 /model/Pulse+Mini,15 /model/Stream,15 /model/HUAWEI-M860,13 /model/Archos5,12 /model/E400,12 /model/LG-C710h,12 /model/DROID+PRO,11 /model/GT-I5800L,11 /model/HTC+HD2,11 /model/MB511,11 /model/Acer+Liquid,10 /model/MB300,10 /model/Motorola-XT502,10 /model/T-01C,10 /model/FroShedYo.V6,9 /model/I7500,9 /model/Tactile+internet,9 /model/ZTE-RACER,9 /model/AS740,8 /model/E130,8 /model/U8500,8 /model/Android+for+Telechips+TCC8902+MID,7 /model/E120,7 /model/HTC+Dream,7 /model/MB508,7 /model/Micromax+A60,7 /model/Alcatel+OT-980,6 /model/LG-P500h,6 /model/Nexian+NX-A890,6 /model/SPH-P100,6 /model/MTC_Android,5 /model/XT702,5 /model/Alcatel+OT-981A,4 /model/CSL_Spice_MI700,4 /model/GT-P1000M,4 /model/harmony,4 /model/MTC_A,4 /model/SGH-I987,4 /model/V-T100,4 /model/WX445,4 /model/XT800,4 /model/zt180,4 /model/Abyzou+by+ikxdf,3 /model/COSMOS_IM8500,3 /model/DAMAGEDHERO200,3 /model/Era+G1,3 /model/GT-I5500M,3 /model/Htcclay's+SuperBad+G1,3 /model/i-mobile+IE+6010,3 /model/Legend,3 /model/MB520,3 /model/MID,3 /model/Nexus+S,3 /model/SCH-I800,3 /model/SGH-T849,3 /model/TOUCHSTONE_I858,3 /model/U8220,3 /model/u8800,3 /model/C8500,2 /model/cherry+mobile-SUPERION,2 /model/Chromatic+Dream,2 /model/CSL_Spice_MI300,2 /model/Ivy,2 /model/N1,2 /model/Orange_Boston,2 /model/SmartQ+V7,2 /model/TaiwanMobileT1,2 /model/V9,2 /model/WellcoM-A88,2 /model/ZTE-U+V880,2 /model/GT-I5500B,1 /model/GT-I5503T,1 /model/GT-I897,1 /model/HTC+bravo,1 /model/LG-US670,1 /model/Motorola+XT720,1 /model/MTC+916,1 /model/wildfire,1 /model/XT300,1
■
こんばんわ
もうすぐ、アプリリリースとなったのでアプリの操作履歴が取れるようにしてみました。
GoogleAnalyticsを使用して「/hoge/fuga」みたいな物を沢山埋め込みました。
普通のWebページと同じような感じでページの識別が出来それぞれのアクセス数が記録出来ます。
埋め込んだのは以下の物です。
アプリが実行された時に1回実行されるメソッド
アクティビティのonCreate()
Build.xxx の情報
実行した、機種やSDKのバージョンを記録
UUIDを生成してユーザの識別
e.putString(tag, uuid);を使って初回起動時にUUIDを保存します。
onCreate()のソース
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.v(TAG, "onCreate"); //途中省略 //uuid String uuid; uuid = get_uuid(); //get if(uuid==null){ Log.v(TAG, "uuid null"); UUID id = UUID.randomUUID(); uuid = id.toString(); put_uuid(uuid); //put } //Analytics m_tracker = GoogleAnalyticsTracker.getInstance(); m_tracker.start("UA-xxxxxx-1", 60, this); m_tracker.trackPageView("onCreate"); m_tracker.trackPageView(m_app_name); String trk; trk = String.format("/brand/%s", Build.BRAND); m_tracker.trackPageView(trk); trk = String.format("/manufacture/%s", Build.MANUFACTURER); m_tracker.trackPageView(trk); trk = String.format("/model/%s", Build.MODEL); m_tracker.trackPageView(trk); trk = String.format("/sdk_int/%s", Build.VERSION.SDK_INT); m_tracker.trackPageView(trk); trk = String.format("/uuid/%s", uuid); m_tracker.trackPageView(trk);
UUIDの保存と読み出し
//put_uuid private void put_uuid(String uuid){ Log.v(TAG, "put_uuid " + uuid ); SharedPreferences pref = getPreferences(MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE); Editor e = pref.edit(); String tag = "uuid+m_app_name"; e.putString(tag, uuid); //put e.commit(); } //get_uuid private String get_uuid(){ SharedPreferences pref =getPreferences(MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE); String tag = "uuid+m_app_name"; String uuuid = pref.getString(tag, null); //get Log.v(TAG, "get_uuid " + uuuid ); return uuuid; }
こんな感じでユーザが操作したものの回数が記録出来ます。
機種名やSDKのバージョンは今後の開発の参考になりますし、
あまり操作していない機能はいらないということにもなります。
■
こんにちは
右Shiftキーでパイプの入力に対応しました。
これも変更箇所がわかってしまえば簡単でした。
ここで公開しています。
Androidアプリ公開用の記事 - mk18のプログラミング日記
単独で押すとTABに設定されていたところをパイプに変更しました。
TerminalKeyListener.java
これで
左SHift+数字で記号
絵・顔・記でCtrl
文字キーでEsc
左Shiftで|(パイプ)
が入力出来るようになりました。
ただしCtrlは同時押しでなく、Ctrl+Aを入力したい場合は、
「絵・顔・記」を押した後「A」を押して下さい。
当初のConnectBotではサーバ操作は不便でしたが、これで
便利になりました。
■
AndroidのレイアウトにLinearLayoutを使用して思うどおりに配置できたのでメモします。
画面の四隅に配置する
LinearLayoutを2階層にして実現しました。
linearLayout10をhorizontalにして子を3つ配置します
画像を左右に貼り付けるため真ん中にダミーのTextViewを入れて、layout_weight="1"として空白を埋めました。
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:id="@+id/linearLayout10" android:orientation="horizontal" android:layout_height="wrap_content" android:layout_weight="1" android:layout_width="fill_parent"> <ImageView android:id="@+id/ImageView11" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0" android:background="@drawable/icon" android:layout_gravity="top|left"/> <TextView android:text="TextView12" android:id="@+id/TextView12" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:layout_gravity="center|top" android:gravity="center"/> <ImageView android:id="@+id/ImageView13" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0" android:background="@drawable/icon" android:layout_gravity="top|right"/> </LinearLayout> <LinearLayout android:id="@+id/LinearLayout20" android:orientation="horizontal" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_weight="1" android:layout_gravity="center_horizontal"> <ImageView android:id="@+id/ImageView21" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0" android:background="@drawable/icon" android:layout_gravity="bottom|right"/> <TextView android:text="TextView22" android:id="@+id/TextView22" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:layout_gravity="bottom|center" android:gravity="center"/> <ImageView android:id="@+id/ImageView23" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0" android:background="@drawable/icon" android:layout_gravity="bottom|left"/> </LinearLayout> </LinearLayout>
十字の端に配置
子が水平方向に1つだけの場合はorientation="vertical"で配置します。
bottom|center"に配置したいImageView62は下に貼り付けるため、ImageView61で
押し下げました。
main2.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:id="@+id/LinearLayout40" android:layout_width="fill_parent" android:orientation="vertical" android:layout_weight="1" android:layout_height="fill_parent"> <ImageView android:id="@+id/ImageView41" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0" android:background="@drawable/icon" android:layout_gravity="top|center"/> </LinearLayout> <LinearLayout android:id="@+id/LinearLayout50" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_weight="1" android:layout_height="fill_parent"> <ImageView android:id="@+id/ImageView51" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0" android:background="@drawable/icon" android:layout_gravity="left|center_vertical"/> <ImageView android:id="@+id/ImageView52" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/icon" android:layout_gravity="center" /> <ImageView android:id="@+id/ImageView53" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0" android:background="@drawable/icon" android:layout_gravity="right|center_vertical"/> </LinearLayout> <LinearLayout android:id="@+id/LinearLayout60" android:layout_width="fill_parent" android:layout_weight="1" android:layout_height="fill_parent" android:orientation="vertical"> <ImageView android:id="@+id/ImageView61" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/icon" android:layout_gravity="top|center"/> <ImageView android:id="@+id/ImageView62" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0" android:background="@drawable/icon" android:layout_gravity="bottom|center"/> </LinearLayout> </LinearLayout>
リニアレイアウトは順番に配置するので左右に振るときや下に押し付けるときは
ダミーの子が必要かと思います。