渡されるインテントのキーを取得する

インテントを使用してアクティビティを起動した場合、アクティビティマネージャは
アクティビティに送信された内容をLogCatに出力します。

Logcatでみると「has Extras」と表示されてるのでキーがわからない。

しかし「受信側のアプリは送信されるキーを知らない限り、その値を受け取れない。」
というのは間違いだと。

エクストラ情報は、BundleによってHashMapオブジェクトとして管理されています。

受信側ですべてのキーを取得する。

Intent intent = getIntent();
Bundle extras = intent.getExtras();
StringBuilder sb = newStringBuilder();
if (extras != null) {
    Iterator<?> it = extras.keySet().iterator();
    while (it.hasNext()) {
        String key = (String) it.next();
        Log.v("IntentReceive", "key: " + key);
    }
}

NetworkOnMainThreadException

簡単にHTTP接続するだけなのに、IOException ではまる。

NetworkOnMainThreadException | Android Developers 

アプリケーションは、メインスレッド上でのネットワーク操作を実行しようとしたときにスローされる例外。
これは、HonetCOmbSDK以上をターゲットとするアプリケーションのためにスローされます。
以前のSDKバージョンをターゲットとするアプリケーションは、そのメインイベントループのスレッドで
ネットワーキングを行うことが許可されているが、それは大きく落胆している。

AsyncTask内で実行していたのをメインスレッドでやろうとしてこれ。
「メインスレッドでネットワーク操作をしてはいけない」ということで。

AsyncTask | Android Developers 

4.0以降。

AsyncTaskLoader | Android Developers 

簡単に、接続するだけなので、StrictMode を解除するか、
いや、TaskLoader に馴染んでおくか。


参考:

Designing for Responsiveness | Android Developers 

New Gingerbread API: StrictMode | Android Developers Blog 

StrictModeとNetworkOnMainThreadException - Kazzzの日記 

ブロートウェアの削除ツールなのか?

Create a De-Bloat Script and Auto APK Installer | xda-developers 

中身をみてみると。

Eag-debloat $ tree .
.
├── AdbWinApi.dll
├── AdbWinUsbApi.dll
├── Debloat.bat
├── Instructions.txt
├── adb.exe
└── fastboot.exe

batをみる。

@ echo off
CLS
echo         Welcome to Anti-Bloat Tool For Galaxy R!
echo                 by eaglerazor123 @xda-devs!
echo  .              First Read Instructions Text! 
echo  ..
echo  ...
echo  ....
echo  .....
echo Rebooting to Recovery!.Stay Calm!
adb reboot recovery
ping -n 7 127.0.0.1 > nul
echo Press any key when your phone is booted into Clockworkmod Recovery
pause
ping -n 8 127.0.0.1 > nul
adb shell mount /system
echo Would you like to remove Samsung Shit? 
echo [Type y for YES, n for NO]
set input=
set /p input=
if %input%==y goto y
if %input%==n goto n
if %input%==Y goto y
if %input%==N goto n
:n
goto p
:y
echo Starting ADB
@ echo off
adb shell rm /system/app/BuddiesNow.apk
adb shell rm /system/app/BuddiesNow.odex
adb shell rm /system/app/cooldict.apk
adb shell rm /system/app/Divx.apk
adb shell rm /system/app/Divx.odex
adb shell rm /system/app/DualClock.apk
adb shell rm /system/app/DualClock.odex
adb shell rm /system/app/ImgoTV.apk
adb shell rm /system/app/iReader.apk
adb shell rm /system/app/Kies.apk
adb shell rm /system/app/Kies.odex
adb shell rm /system/app/KiesAir.apk
adb shell rm /system/app/kieswifi.apk
adb shell rm /system/app/kieswifi.odex
adb shell rm /system/app/Kobo.apk
adb shell rm /system/app/MediaHub.apk
adb shell rm /system/app/MediaHub.odex
adb shell rm /system/app/MiniDiary.apk
adb shell rm /system/app/MiniDiary.odex
adb shell rm /system/app/Memo.apk
adb shell rm /system/app/Memo.odex
adb shell rm /system/app/PolarisOffice.apk
adb shell rm /system/app/PostIt.apk
adb shell rm /system/app/PostIt.odex
adb shell rm /system/app/Protips.apk
adb shell rm /system/app/Protips.odex
adb shell rm /system/app/MinimalHome.apk
adb shell rm /system/app/MinimalHome.odex
adb shell rm /system/app/MobilePrint.apk
adb shell rm system/aap/MobilePrint.odex
adb shell rm /system/app/MobileTrackerEngineTwo.apk
adb shell rm /system/app/MobileTrackerEngineTwo.odex
adb shell rm /system/app/MobileTrackerUI.apk
adb shell rm /system/app/MobileTrackerUI.odex
adb shell rm /system/app/ReadersHub.apk
adb shell rm /system/app/ReadersHub.odex
adb shell rm /system/app/samsungappswidget.apk
adb shell rm /system/app/samsungappswidget.odex
adb shell rm /system/app/SocialHub.apk
adb shell rm /system/app/SocialHub.odex
adb shell rm /system/app/TrimApp.apk
adb shell rm /system/app/TrimApp.odex
adb shell rm /system/app/Zinio.apk
adb shell rm /system/app/SamsungAppsUNA3.apk
adb shell rm /system/app/SamsungIM.apk

goto p
:p
echo Would you like to remove the Touchwiz Launcher (Y for Yes / N for NO)
set input=
set /p input=
if %input%==y goto r
if %input%==n goto t
if %input%==Y goto r
if %input%==N goto t
:r
adb shell rm /system/app/TouchWiz30Launcher.apk
adb shell rm /system/app/TouchWiz30Launcher.odex
goto t
:t
echo Would you like to remove the Samsung Widgets? (Y for Yes / N for NO)
set input=
set /p input=
if %input%==y goto e
if %input%==n goto f
if %input%==Y goto e
if %input%==N goto f
:e
adb shell rm /system/app/SamsungAppsUNA3.apk
adb shell rm /system/app/SamsungWidget_News.apk
adb shell rm /system/app/SamsungWidget_News.odex
adb shell rm /system/app/SamsungWidget_ProgramMonitor.apk
adb shell rm /system/app/SamsungWidget_ProgramMonitor.odex
adb shell rm /system/app/SamsungWidget_StockClock.apk
adb shell rm /system/app/SamsungWidget_StockClock.odex
adb shell rm /system/app/SamsungWidget_WeatherClock.apk
adb shell rm /system/app/SamsungWidget_WeatherClock.odex
goto k

:k
echo It is reccomended that you reboot your phone now. Would you like to?
echo (Y for Yes / N for NO)
echo [please wait as this may take a minute]
set input=
set /p input=
if %input%==y goto b
if %input%==n goto o
if %input%==Y goto b
if %input%==N goto o
:b
echo [please wait while ADB reboots your phone]
adb reboot
goto o
:o
echo Bloatware Removed! 
echo.
echo..
echo Close The Window To Skip Auto Install!
echo Press Continue For Auto Apk Installer And Make Sure You Reconnet USB Cable Before Pressing Continue!
pause


@ECHO off
title Auto APK Installer

:Start
cls
echo 1. Install APK's
echo 2. Quit
set /p choice=I choose (1,2):
if %choice%==1 goto apkinstall
if %choice%==2 exit

:apkinstall
cls
echo Running Install Script 
FOR %%n in (*.apk) DO adb install %%n
echo Done!
pause
exit

apkインストーラというほどでもない実質1行のスクリプト

いえるのは、日本だけでなく、海外有名ベンダーもクソなアプリを
たくさんいれこんでいるということか。

mozc_tool

結構使うので使いやすく。
ヘルプがないのがこまる。

エイリアスを作っておくべし。

alias mozc-config="/usr/lib/mozc/mozc_tool -mode=config_dialog"
alias mozc-dict="/usr/lib/mozc/mozc_tool --mode=dictionary_tool"
alias mozc-word="/usr/lib/mozc/mozc_tool --mode=word_register_dialog"
alias mozc-palette="/usr/lib/mozc/mozc_tool --mode=character_palette"
alias mozc-hand="/usr/lib/mozc/mozc_tool --mode=hand_writing"

git の最低限なとこだけ

使ってみようとしたが、意外とはまる。
とりあえずは、無料なgithubやbitbucketに上げておく。
基本をきちんと覚えればどこでもいけるはず。

ssh

キーを利用して暗号化して通信するのでgitの使い方の前にきっちり。
WEB画面を使って、サーバー側にキーを登録後、PCからアクセスする。

改行コードがあるので直接クリップボードへ。

$ xclip -sel clip < ~/.ssh/id_rsa_bitbacket.pub

bitbucket専用のキーを設定しておく。

$ cat .ssh/config
Host bitbucket.org
  User git
  Port 22
  Hostname bitbucket.org
  IdentityFile ~/.ssh/id_rsa_bitbucket
  TCPKeepAlive yes
  IdentitiesOnly yes

まずは、ssh単独で対象サーバに接続できるか試すとよい。

$ ssh bitbucket.org -i ~/.ssh/id_rsa_bitbucket
PTY allocation request failed on channel 0
conq: logged in as {username}.
You can use git or hg to connect to Bitbucket. Shell access is disabled.
Connection to bitbucket.org closed.
$ ssh bitbucket.org
PTY allocation request failed on channel 0
conq: logged in as {username}.
You can use git or hg to connect to Bitbucket. Shell access is disabled.
Connection to bitbucket.org closed.

git

すこし、CVSSVNとは仕組みが違い手順が変わる。
おおまかに以下の流れ。

1. git config

gitクライアントインストール後、すべてのgit処理にたいしてのglobalな設定をしておく。

$ git config --global user.name "{username}"
$ git config --global user.email "{useremail}"
$ git config --global color.ui auto
$ git config --global core.excludesfile ~/.gitignore
$ git config --global --list
user.name={username}
user.email={useremail}
color.ui=auto
core.excludesfile=/home/osaccount/.gitignore
2. git init

ソースコードディレクトリをgit処理の対象にする。
.gitディレクトリは削除することで、非対象になる。

$ mkdir /path/to/your/project
$ cd /path/to/your/project
$ git init
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       .classpath
#       .project
#       AndroidManifest.xml
#       bin/
#       build.properties
#       build.xml
#       local.properties
#       project.properties
#       res/
#       src/
3. git remote add

リモートなサーバを登録する。

$ git remote add origin ssh://git@bitbucket.org/{username}/{repositoryname}.git
$ git remote
origin
4. git add

対象ファイルを指定して、インデックスに登録。

$ git add .
5. git commit

ローカル側に保存?される。

$ git commit -a -m 'まずは最初のコミット'
6. git push

リモートなサーバにアップ。
ここではじめてSSHが利用される。

$ git push origin master
Counting objects: 28, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (17/17), done.
Writing objects: 100% (28/28), 12.70 KiB, done.
Total 28 (delta 1), reused 0 (delta 0)
remote: {repositoryname}/acl {username} is allowed. accepted payload.
To ssh://git@bitbucket.org/{username}/{repositoryname}.git
 * [new branch]      master -> master

その他

上がって欲しくないファイルは、無視するように。
androidアプリの場合。
/home/osaccount/.gitignore

# built application files
*.apk
*.ap_
# files for the dex VM
*.dex
# Java class files
*.class
# generated files
bin/
gen/
# Local configuration file (sdk path, etc)
local.properties

AdMob 4.3.1

以前からすんなり使えないのが、このサービス。
バージョンがかなりあがってたので。

ドキュメントページ

Google AdMob Ads Android Fundamentals - Google AdMob Ads SDK ― Google Developers 

充実してきており、サンプル手順通りにやるが
やはり微妙な。

Could not find class 'com.google.ads.AdView'

AdMobSDKアーカイブに含まれるjarを別ディレクトリにおいて読み込むという
ドキュメント手順どおりではこのエラー。
プロジェクト内に libs/ を作りそのにコピーしておくのだと。

Androyer in Japan: Could not find class 'com.google.ads.AdView' 

android:configChanges 行でエラー

Eclipseのメニュー
コマンド>Project>Properties>Android>Project Build Target>platform 4.0 API level 14
を選択する。

Androyer in Japan: AdMob Version 4.3.1の実装 

新しいAndroidSDKのUIに向けた記述なのだろ。