今回は各種デバイスにスポットを当てて計測していきます。
その前に前回の記事で、BrowserのhttpリクエストにおけるUser-Agentの問題で画面がスマートフォンサイズに最適化されていないと記載した件について調べてみると少し違っていましたので補足させて頂きます。
| 機能 | 使用 |
| ネットワーク通信 | ○ |
| GPS | ○ |
| WIFI制御 | × |
| バッテリー情報取得 | × |
| Bluetooth | × |
| カメラ起動 | × |
| NFC | ○ |
| WakeLock使用 | ○ |


| 機能 | 使用 |
| ネットワーク通信 | ○ |
| GPS | ○ |
| WIFI制御 | × |
| バッテリー情報取得 | × |
| Bluetooth | × |
| カメラ起動 | × |
| NFC | ○ |
| WakeLock使用 | ○ |


| 機能 | 使用 |
| ネットワーク通信 | ○ |
| GPS | ○ |
| WIFI制御 | × |
| バッテリー情報取得 | × |
| Bluetooth | × |
| カメラ起動 | × |
| NFC | ○ |
| WakeLock使用 | ○ |


| 機能 | 使用 |
| ネットワーク通信 | ○ |
| GPS | ○ |
| WIFI制御 | × |
| バッテリー情報取得 | × |
| Bluetooth | × |
| カメラ起動 | × |
| NFC | ○ |
| WakeLock使用 | ○ |


| 画面の明るさ | 電流値 |
| レベル1 | 0.12A |
| レベル2 | 0.15A |
| レベル3 | 0.25A |
| 画面の明るさ | 電流値 |
| レベル1 | 0.12A |
| レベル2 | 0.15A |
| レベル3 | 0.25A |
private class EnableDisableDiscoveryTask extends AsyncTask{
@Override
protected Void doInBackground(Boolean... enable) {
if (enable != null && enable.length > 0 && enable[0]) {
synchronized (NfcService.this) {
mScreenOn = true;
applyRouting();
}
} else {
:
}
return null;
}
}
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
:
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
:
new EnableDisableDiscoveryTask().execute(new Boolean(true));
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
:
}
}
/**
* Read mScreenState and apply NFC-C polling and NFC-EE routing
*/
void applyRouting(boolean force) {
synchronized (this) {
:
// configure NFC-C polling
if (mScreenState >= POLLING_MODE) {
if (force || !mNfcPollingEnabled) {
Log.d(TAG, "NFC-C ON");
mNfcPollingEnabled = true;
mDeviceHost.enableDiscovery();
}
} else {
if (force || mNfcPollingEnabled) {
Log.d(TAG, "NFC-C OFF");
mNfcPollingEnabled = false;
mDeviceHost.disableDiscovery();
}
}
}
}
class ApplyRoutingTask extends AsyncTask{
@Override
protected Void doInBackground(Integer... params) {
synchronized (NfcService.this) {
if (params == null || params.length != 1) {
// force apply current routing
applyRouting(true);
return null;
}
mScreenState = params[0].intValue();
boolean needWakelock = mScreenState == SCREEN_STATE_OFF;
if (needWakelock) {
mWakeLock.acquire();
}
applyRouting(false);
if (needWakelock) {
mWakeLock.release();
}
return null;
}
}
}
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
:
} else if (action.equals(Intent.ACTION_SCREEN_ON)
|| action.equals(Intent.ACTION_SCREEN_OFF)
|| action.equals(Intent.ACTION_USER_PRESENT)) {
// Perform applyRouting() in AsyncTask to serialize blocking calls
int screenState = SCREEN_STATE_OFF;
if (action.equals(Intent.ACTION_SCREEN_OFF)) {
screenState = SCREEN_STATE_OFF;
} else if (action.equals(Intent.ACTION_SCREEN_ON)) {
screenState = mKeyguard.isKeyguardLocked() ?
SCREEN_STATE_ON_LOCKED : SCREEN_STATE_ON_UNLOCKED;
} else if (action.equals(Intent.ACTION_USER_PRESENT)) {
screenState = SCREEN_STATE_ON_UNLOCKED;
}
new ApplyRoutingTask().execute(Integer.valueOf(screenState));
} else if (action.equals(ACTION_MASTER_CLEAR_NOTIFICATION)) {
:
}
}
private class EnableDisableDiscoveryTask extends AsyncTask{
@Override
protected Void doInBackground(Boolean... enable) {
if (enable != null && enable.length > 0 && enable[0]) {
synchronized (NfcService.this) {
mScreenOn = true;
applyRouting();
}
} else {
:
}
return null;
}
}
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
:
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
:
new EnableDisableDiscoveryTask().execute(new Boolean(true));
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
:
}
}
/**
* Read mScreenState and apply NFC-C polling and NFC-EE routing
*/
void applyRouting(boolean force) {
synchronized (this) {
:
// configure NFC-C polling
if (mScreenState >= POLLING_MODE) {
if (force || !mNfcPollingEnabled) {
Log.d(TAG, "NFC-C ON");
mNfcPollingEnabled = true;
mDeviceHost.enableDiscovery();
}
} else {
if (force || mNfcPollingEnabled) {
Log.d(TAG, "NFC-C OFF");
mNfcPollingEnabled = false;
mDeviceHost.disableDiscovery();
}
}
}
}
class ApplyRoutingTask extends AsyncTask{
@Override
protected Void doInBackground(Integer... params) {
synchronized (NfcService.this) {
if (params == null || params.length != 1) {
// force apply current routing
applyRouting(true);
return null;
}
mScreenState = params[0].intValue();
boolean needWakelock = mScreenState == SCREEN_STATE_OFF;
if (needWakelock) {
mWakeLock.acquire();
}
applyRouting(false);
if (needWakelock) {
mWakeLock.release();
}
return null;
}
}
}
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
:
} else if (action.equals(Intent.ACTION_SCREEN_ON)
|| action.equals(Intent.ACTION_SCREEN_OFF)
|| action.equals(Intent.ACTION_USER_PRESENT)) {
// Perform applyRouting() in AsyncTask to serialize blocking calls
int screenState = SCREEN_STATE_OFF;
if (action.equals(Intent.ACTION_SCREEN_OFF)) {
screenState = SCREEN_STATE_OFF;
} else if (action.equals(Intent.ACTION_SCREEN_ON)) {
screenState = mKeyguard.isKeyguardLocked() ?
SCREEN_STATE_ON_LOCKED : SCREEN_STATE_ON_UNLOCKED;
} else if (action.equals(Intent.ACTION_USER_PRESENT)) {
screenState = SCREEN_STATE_ON_UNLOCKED;
}
new ApplyRoutingTask().execute(Integer.valueOf(screenState));
} else if (action.equals(ACTION_MASTER_CLEAR_NOTIFICATION)) {
:
}
}
| プロセス | ? |
| サービス | ? |
| 機能 | 使用 |
| ネットワーク通信 | ○ |
| GPS | ○ |
| WIFI制御 | × |
| バッテリー情報取得 | × |
| Bluetooth | × |
| カメラ起動 | × |
| NFC | × |
| WakeLock使用 | ○ |


| プロセス | ? |
| サービス | ? |
| 機能 | 使用 |
| ネットワーク通信 | ○ |
| GPS | ○ |
| WIFI制御 | × |
| バッテリー情報取得 | × |
| Bluetooth | × |
| カメラ起動 | × |
| NFC | × |
| WakeLock使用 | ○ |


| プロセス | 1 |
| サービス | 2 |
| 機能 | 使用 |
| ネットワーク通信 | ○ |
| GPS | ○ |
| WIFI制御 | ○ |
| バッテリー情報取得 | × |
| Bluetooth | × |
| カメラ起動 | × |
| NFC | ○ |
| WakeLock使用 | ○ |
| プロセス | 1 |
| サービス | 2 |
| 機能 | 使用 |
| ネットワーク通信 | ○ |
| GPS | ○ |
| WIFI制御 | ○ |
| バッテリー情報取得 | × |
| Bluetooth | × |
| カメラ起動 | × |
| NFC | ○ |
| WakeLock使用 | ○ |
Android KitKat Hacks プロが教えるテクニック & ツール
株式会社ブリリアントサービス 著
NFC Hacks プロが教えるテクニック&ツール
株式会社ブリリアントサービス 著
Androidプログラミングの教科書
藤田 竜史、要 徳幸、住友 孝郎、日高 正博、小林 慎治、木村 尭海 著
入門Androidアプリケーションテスト
瀬戸 直喜/株式会社ブリリアントサービス 著
実践スマートフォンアプリケーション開発
株式会社ブリリアントサービス、八木 俊広、原 昇平、かわかみ ひろき 著
ジオモバイルプログラミング
郷田まり子/宅間俊志/近藤昭雄 著
ANDROID HACKS プロが教えるテクニック&ツール
株式会社ブリリアントサービス 著