スマートフォン用アプリケーション制作 自転車向けフィットネス用アプリの

平成 27 年度 卒業研究中間レポート
スマートフォン用アプリケーション制作
自転車向けフィットネス用アプリの開発
近畿大学工学部 情報システム工学科
学籍番号 1310960001 氏名 曽根 潤治
目次
1. 研究の背景と目的
1.1 背景と目的
1.2 携帯端末の普及率
1.3 スマートフォンとは
1.4 アプリケーションソフトについて
1.5 アプリケーションの種類
1.5.1. ネイティブアプリ
1.5.2. Web アプリ
1.5.3. ハイブリッドアプリ
2. 研究状況
2.1 Android について
2.1.1. Android とは
2.1.2. Android 開発の特徴
2.1.3. Android アプリの開発に必要なもの
2.1.4. Android Studio について
2.1.5. JDK
2.1.6. Android SDK
2.1.7. Android アプリのリソースについて
2.1.8. リソースについて
2.2 サイクルコンピュータについて
2.2.1. サイクルコンピュータのセンサー
2.2.2. センサーの信号伝送方式
3. 研究計画
4. 参考文献
2
1.研究の背景と目的
1.1 背景と目的
スマートフォンが普及した昨今において,携帯電話が持つ役割は普及前と比べて大きく変わっ
た.例えば,Web サイトの閲覧や,カメラや E メール等,従来の携帯電話でも利用されていたア
プリケーションが使いやすくなったことに加え,タッチパネルや加速度センサーなど,端末に内
蔵された各種装置と併用することで,アプリケーション開発の幅が広がり,スマートフォンは携
帯端末としてより機能的になった.更に,App Store 等のサービスを利用することで,簡単にア
プリケーションを追加でき,様々な使い方が出来るようになった.よって,現在のスマートフォ
ンをはじめとする携帯電話は,単なる通信手段ではなく,PDA のような小型情報端末の機能を
従来の携帯電話に統合し,気軽に持ち運び出来るようにしたマルチメディア端末としての側面が
強いと考えられる.現在では,スマートフォン向けソーシャルゲームによるビジネスが大きく注
目されており,機能的価値だけでなく経済的価値も高い.
また,最近は交通手段や健康志向などの観点から自転車通勤が増えるとともに,サイクルコン
ピュータなどの自転車向けのスマートフォンアプリやハンドルに取り付けるスマートフォン用ホ
ルダーなどのグッズが増加している.このことから,フィットネス機器や運転のサポートとして
の用途も考えられる.
本研究では,アプリケーションの研究を通じて,スマートフォンをはじめとした携帯端末の秘
める価値や可能性を追求することを目的とする.
1.2 携帯端末の普及率
総務省のによると,パソコンや従来型携帯電話(フィーチャー・フォン)によるインターネット
の利用が減少傾向にあるのに対し,スマートフォンやタブレット端末の利用が増加している.世
代別に見ても,50 代以下の世代にスマートフォン利用が増加し,特に 30 代以下の世代への普及
が目立つ(図 1).ただ,以前に比べて,現在のスマートフォン普及率の伸びは鈍化の傾向にある
(図 2).これは,スマートフォンの普及が既に進んだからであると思われる.
図 1 スマートフォンの世代別普及率(2015 年)
3
図 2 スマートフォン普及率の変遷(2015 年)
1.3 スマートフォンとは
スマートフォンとは,明確な定義は無いが,電話やメール以外の様々な機能を利用できる携帯
電話端末で,かつての PDA( Personal Digital Assistants)が持っていた機能(スケジュール管理,アド
レス帳,メモ,E メール,インターネットなど,パソコンの機能の一部)を組み込んだ携帯端末で
ある.かつてはハードウェアキーボードが主流だったが,iPhone の登場によってソフトウェア
キーボードやマルチタッチ UI の一般化や画面の大型化が進み,操作性や機能性の水準が大幅に
向上した.現在は,従来型携帯電話(フィーチャー・フォン)に代わり普及が進み,アプリケー
ションの増加やインターネットの普及によって,ユビキタス社会の実現に一役買っている.
1.4 アプリケーションソフトについて
アプリケーションソフトとは,文書作成や数値計算など,ある特定の目的のために設計された
ソフトウェアである.「応用ソフト」とも呼ばれ,どのソフトウェアにも共通する基本的な機能
をまとめた OS(基本ソフト)に,ユーザが任意に必要とするものを組み込んで利用する.アプリ
ケーションソフトの種類も多種多様で,画像編集ソフトやデータベースソフト,ゲーム,Web ブ
ラウザ,メーリングソフトなどがある.企業で使用される財務会計や人事管理のソフトもアプリ
ケーションソフトの一種である.また,アプリケーションソフトの中でも,コンピュータウイル
ス駆除やメモリ管理など,機能や性能,操作性を向上させるために,OS や他のアプリケーショ
ンソフトが持つ機能を補うソフトをユーティリティソフトと呼ぶ.
従来の携帯電話は通話やメール等の通信機能がメインだったが,現在普及しているスマート
フォンは,アプリケーションをインストールすることによって様々な機能が利用可能となってい
4
る.また,スマートフォンは,その画面の大きさや操作性から,携帯端末の機能性やアプリケー
ションの飛躍的発展に大きく貢献している.
1.5 アプリケーションの種類
スマートフォン上で動作するアプリケーションは,大きく分けて「ネイティブアプリ」,
「Web アプリ」,「ハイブリッドアプリ」の 3 種類に分けられる.
1.5.1 ネイティブアプリ
ネイティブアプリは端末にインストールされて初めて動作するアプリケーションである.一般
的にスマートフォンのアプリケーションはこのことを指す場合が多い.動作においては,ハード
ウェアの性能に依存する側面が強く,使用端末の性能が低いと動作や処理に支障をきたす恐れが
ある.しかし,Web アプリのように通信による影響を受けない点が強みであり,アプリケーショ
ンによってはインターネットの接続なしで使用できるものもある.開発するアプリのプラット
フォームによって開発環境,使用言語が異なる.
1.5.2 Web アプリ
Web アプリは Web ブラウザ上で動作するアプリケーションである.端末にインストールする
必要が無く,OS や端末など,ハードウェアによる影響を受けない.しかし,Web 上で動作する
という特性上インターネット接続が必須であり,通信障害やサーバーの不具合によって影響を受
ける可能性がある.開発には HTML5 や CSS3,JavaScript など,Web ページ制作と同じ環境を使
用する.また,Java アップレットや Flash などといった,Web 上で実現できる動的アプリケー
ションをリッチ・インターネット・アプリケーションと呼ぶ.
1.5.3 ハイブリッドアプリ
ハイブリッドアプリとは,Web アプリを表示,動作させるネイティブアプリのことである.開
発の迅速化と,レスポンスや機能面の強化といったメリットがあり,現在注目を集めている.
1.6 自転車とスマートフォン
近年,自転車向けの電子機器が開発され,普及している.サイクルコンピュータをはじめ,動
力計(パワーメーター),電動変速機などがある.本報告書では主に最も普及していると思われる
サイクルコンピュータを取り上げる.
サイクルコンピュータとは,車輪の回転数をセンサーで検知し,走行速度や走行距離などを計
算し,表示する自転車向けの計測機器のことである.走行しながら確認するため,表示機は主に
ハンドルなど見やすい箇所に取り付ける.自動車におけるスピードメーターにあたるが,大きな
特徴として,軽量,小型のものが多く,高価な製品は様々な機能を持っている.
走行速度や車輪の回転数などを取得するため,別に用意されたセンサーを併用する.
センサーには磁気センサー(回転数センサー),GPS センサーのいずれかが使用される.一般的
なサイクルコンピュータは前者のものが多い.
表示機器は専用のものが用いられる.しかし近年,スマートフォン用サイクルコンピュータア
プリが登場し,スマートフォンを表示機器として利用する場合がある(図 3).
5
図 3 スマートフォン用サイクルコンピュータアプリの一例
2. 研究状況
2.1 Android について
現在,Android Studio を使用して参考書のサンプルプログラムを元に Android と Java の勉強を
進めている.その過程で図 4 のアプリケーションを作成した. 図 4 作成したアプリケーション(エミュレータ上で動作)
6
これは,画面上部のボタンをタップすると別の画像が表示され,シークバー(スライダー)を操
作することで表示されている画像の諧調値が増減し,色が変化するといった内容のアプリケー
ションである.このアプリケーションを作成する際に得た知識を以下に記す.
2.1.1 Android とは
Android とは,OHA(Open Handeset Alliance)が推進し,米 Google 社が中心となって開発してい
るソフトウェアプラットフォームである.2007 年に発表され,わずか数年で iPhone と双璧をな
すスマートフォンの代表格に発展した.最初は携帯端末向けだったが,現在タブレット端末や車
載システム,さらにはウェアラブルと呼ばれる身体装着型コンピュータにも Android が使用され
ている.
2.1.2 Android 開発の特徴
Android では,誰でも自由にアプリを開発し,配布することが可能である.配布の際にはイン
ターネット上で公開,もしくは Google 社の運営する「Google Play Store」を通じて販売といった
方法が考えられるが,Google Play Store でアプリを配信する際には最初に登録料$25USD(2015 年
8 月現在)を支払ってデベロッパーアカウントを取得する必要がある.しかし,登録はインター
ネット上でできる.Apple 社製携帯機器用のプラットフォームである iOS と比較すると,開発費
が安く(2015 年 8 月現在,Apple Developer Program の年間参加料が$99 USD であるのに対し),配
信するアプリの事前の審査が無いので比較的手軽で自由度の高いプラットフォームであるとされ
る.
2.1.3 Android アプリの開発に必要なもの
Android アプリ開発のために必要なものとして,総合開発環境である Android Studio と,
Android SDK,JDK が必要である.
また,には「エミュレーター」と呼ばれるソフトウェアが同梱されているため,Android 端末
を所持していなくても実行が可能である.しかし,センサーやバイブレーションなど,対応して
いない機能もあるので,それらの機能を実行する場合は Android 端末を使用する必要がある
.
2.1.4 Android Studio について
「Android Studio」は,2013 年に発表された「IntelliJ IDEA」ベースの Android アプリ開発用ソ
フトウェアで,総合開発環境(IDE)と呼ばれている.IntelliJ IDEA は,チェコの JetBrains 社が開発,
販売している IDE で,柔軟な保管機能を備える強力な IDE として定評がある.AndroidStudio は,
IntelliJ IDEA のオープンソース版(CommunityEdition)をベースに,Android アプリケーションの開
発支援の機能追加といった最適化がされている.また,AndroidStudio の開発には JetBrains 社の
メンバーも参加しており,AndroidStudio でアプリ開発用に最適化されている.
2.1.5 JDK
JDK(Java Development Kit)は,Java でのプログラミングに最低限必要な開発環境である.2015
年 8 月現在の最新バージョンは JDK8 であるが,Android のデベロッパーサイトによると推奨バー
ジョンは JDK7 と記載されているため,開発には Java SE “Development Kit 7 Update 79 (64-bit)”を
使用している.
7
2.1.6 Android SDK
Android SDK(Android Software Development Kit)は,Android アプリケーションを開発する上で必
要なコンパイラやデバッガ,ライブラリなどのソフトウェアをまとめたパッケージである.
2.1.7 Android アプリの仕組み
Android のアプリケーションは Java と XML のソースファイルで構成されている.Java のメイ
ンプログラムはアプリの動作を記述し,XML のレイアウトファイルには,画面の構成をマーク
アップして記述する.
2.1.8 リソースについて
プログラム上で画像やレイアウトファイルなどのリソースを利用するために,クラスファイル
R.java を経由して各種リソースを参照する. R.java は android アプリ開発において開発環境の一
部である aapt(Android Asset Packaging Tool)がリソース管理の為にコンパイル時に自動生成するク
ラスファイルで,リソース ID が指定されている.Android の開発においては,リソース ID を介
してリソースを参照する.その際,「R.リソースの種類.リソース名」と記述する.例えば,
src/main/res/drawable フォルダに置いた画像 droid.png を指定する場合,「R.drawable.droid」と記
述する.
コンパイルの際に画像が読み込まれないエラーが起きたが,R.java に不具合があったためだと
考えられる.
2.2 サイクルコンピュータのセンサー
磁気センサーはサイクルコンピュータとは別に自転車のフレームに取り付けられる.車輪の回
転により,スポークに取り付けられた磁石がセンサー付近を通過することでセンサーが回転を検
知し,その信号をコンピュータ本体に送信する.これを元に,走行速度や走行距離を計算し,表
示するといった仕組みである.なお,センサーと磁石は,お互いが接近するという条件のもと,
前輪(フロントフォーク)もしくは後輪(チェーンステー)どちらにも取り付ける事が可能である.
しかし,以下の理由により前輪に取り付ける場合が多い.
・コンピュータの取り付けられるハンドル付近からの距離が近い
・体重による車輪の変形が少なく,使用するタイヤの公称周長に基づいた走行距離を取得しや
すい
一方,GPS センサーによるサイクルコンピュータは地図情報と組み合わせることで現在地情報
や標高などを計測でき,磁気センサーのみの物よりも多くの機能を利用できる.しかし,速度表
示の遅延や誤差が生じることがあり,遮蔽物による受信障害のデメリットもある.また,GPS セ
ンサーを搭載しているサイクルコンピュータは多機能ゆえ高価な物が多く,バッテリー持続時間
が短い.
2.2.1 センサーの信号伝送方式
センサーが出した信号は有線と無線いずれかの方式でコンピュータ本体に伝送される.本項で
は無線による伝送方式について記述する.
サイクルコンピュータで利用される主な無線通信規格は Bluetooth と Ant+の 2 つである.
Bluetooth は,周辺機器をワイヤレスで接続するための近距離無線通信規格である。近距離と
いっても、短距離通信赤外線(IrDA)よりも通信距離が長く,最大 100 メートル以内ならば接続が
可能である.また,汎用インターフェースとしての一面を持ち,Bluetooth を採用している機器は
多い.
Ant+は 低消費電力の無線通信規格「Ant」を搭載した機器同士を接続するネットワーク機
8
器向けの規格である.Bluetooth と比較して消費電力が少なく、ネットワーク構成が柔軟であるこ
とをメリットとする.反面,通信距離が数メートルと少ない.
消費電力が少なく使用環境上通信距離が短くても済むことから,製品としてのサイクルコン
ピュータは Ant+を採用していることが多い.
2.3 その他
上記のほかに,週 2 回のミーティングで進捗報告や情報技術の解説,その他発表などを各自行
い,やってきた.
3.研究計画
8~9 月
10~11 月
12 月
1 月
2 月
Android Studio と Java の勉強を行いながら仕様設計
開発
完成,テスト
論文作成
発表資料作成,準備
4.参考文献
技術評論社「Android Studio ではじめる簡単 Android アプリ開発」有山圭二 著
WWDC:iTunes App Store の登録アプリケーション数は 150 万超でダウンロード回数は 1000 億
http://jp.techcrunch.com/2015/06/09/20150608itunes-app-store-passes-1-5m-apps-100b-downloads-30bpaid-to-developers/
ソフトバンク、スマホゲームで世界一狙う―孫社長が新ビジョン
http://jp.wsj.com/articles/SB10001424052702303343404579170580899804804
スマートフォンの普及率
http://smartphone-ec.net/2275.html
2015 通信事情
http://www.soumu.go.jp/johotsusintokei/statistics/data/150717_1.pdf
マイナビニュース:20 代のスマホ普及率
http://news.mynavi.jp/news/2015/05/20/171/
GPS の受信障害
http://www.kaiho.mlit.go.jp/syoukai/soshiki/soumu/seika/h17/h17_06.pdf
ペダル1回転で進む距離
http://www.geocities.jp/jitensha_tanken/pedal-dis.html
9
付録 図 3 のアプリケーションのプログラムソース
プログラム 1 メインアクティビティ MainActivity.java
package saml.sone.helloandroid;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.widget.SeekBar;
public class MainActivity extends ActionBarActivity implements SeekBar.OnSeekBarChangeListener {
private Button buttonPushMe;
private ImageView imageAndroid;
private SeekBar seekBarRed;
private SeekBar seekBarGreen;
private SeekBar seekBarBlue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonPushMe = (Button) findViewById(R.id.btn_pushme);
/*buttonPushMe に OnClickListener()を設定*/
buttonPushMe.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
buttonPushMe.setText("画像 droid2");
imageAndroid.setImageResource(R.drawable.droid2);
}
10
});
imageAndroid = (ImageView) findViewById(R.id.iv_android);
seekBarRed = (SeekBar) findViewById(R.id.sb_red);
seekBarRed.setOnSeekBarChangeListener(this);
seekBarGreen = (SeekBar) findViewById(R.id.sb_green);
seekBarGreen.setOnSeekBarChangeListener(this);
seekBarBlue = (SeekBar) findViewById(R.id.sb_blue);
seekBarBlue.setOnSeekBarChangeListener(this);
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){
int red = seekBarRed.getProgress();
int green = seekBarGreen.getProgress();
int blue = seekBarBlue.getProgress();
imageAndroid.setColorFilter(Color.rgb(red,green,blue),PorterDuff.Mode.LIGHTEN);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar){
}
@Override
public void onStopTrackingTouch(SeekBar seekBar){
}
}
11
プログラム 2 レイアウトファイル activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainActivity"
android:weightSum="1">
<TextView
android:text="@string/how_to"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn_pushme"
android:text="画像 droid1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/iv_android"
android:layout_width="1253dp"
android:layout_height="240dp"
android:src="@drawable/droid1"
android:layout_gravity="center"
android:layout_weight="0.60" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
12
android:layout_height="wrap_content">
<TextView android:text="@string/red_seek"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<SeekBar
android:id="@+id/sb_red"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="255"
android:layout_gravity="center_horizontal" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:text="@string/green_seek"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<SeekBar
android:id="@+id/sb_green"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="255"
android:layout_gravity="center_horizontal" />
</LinearLayout>
<LinearLayout
13
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:text="@string/blue_seek"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<SeekBar
android:id="@+id/sb_blue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="255"
android:indeterminate="false" />
</LinearLayout>
</LinearLayout>
14