アフィリエイト広告を利用しています

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

2018年09月17日

Android Studio リリースノート(2018.09.14)

エミュレータ情報
概要

アンドロイドのエミュレータ 28.0.8 「カナリア」が利用可能となったようです。
簡単には、「速度向上」と「ユーザビリティの修正」といったところでしょうか。
ポイント

1. エミュレータの速度を向上。
 ・tmpディレクトリにファイルを保持しすぎると速度低下していた模様。
 ・ADB(恐らくAndroid Debug Bridge)に生存確認のチェックファイルを保存しないことで対応。
〇Windowsの場合:
  C:\Users\\AppData\Local\Temp\AndroidEmulator\*
〇Mac/Linuxの場合:
  /tmp/android-/*

2. クイックブートのアイコンを英語圏のユーザでも理解できるように変更。
3. MIPSビルドは削除。

(Google Developersはこちら

---
【関連記事】


---
【更新履歴】
180917:初期作成



2018年09月16日

MediaPlayerの備忘録

MediaPlayer
概要

Android で「バックグラウンドで音楽を流したい」、「ミュージックプレイヤーを作りたい」など音楽を再生するニーズがあると思います。
音楽を流すためのクラスに「MediaPlayer」があります。
簡単に使い方をまとめます。

動作概要

公式のサイトにステートマシン図で動作紹介されています。
MediaPlayer.png


概要のみ簡単に説明します。
[状態一覧]
1. Idle:初期状態:MediaPlayer のインスタンス後の reset() を呼び出した状態。
2. End:終了:どのステートからでも呼ぶことができる。release() を呼び出した状態。
3. Initialized:初期化状態: setDataSource() を呼び出して、データベースにメディアデータソースをセットした状態。
4. Prepared:準備済み状態:音楽再生前の状態。prepare() 関数を呼び出した状態。
5. Preparing:準備中状態:初回の呼び出し時などに呼ばれる状態。
6. Started:開始:再生中。
7. Stoped:停止:音楽停止。
8. Paused:一時停止:一時停止。
9. PlaybackCompleted:再スタート:リスタート。

簡単なサンプル

下準備として、R.rawの配下に再生したい音楽を「music_sample」と名前を付けておいています。

_myMediaPlayer = MediaPlayer.create(getApplicationContext(),R.raw.music_sample);
_myMediaPlayer.start();
//_myMediaPlayer.stop();


start() で音楽が再生されたと思います。

(Google Developersはこちら

---
【関連記事】


---
【更新履歴】
180916:初期作成



2018年08月15日

Android 9 の特徴とAPI

Android 9 (API level 28)
概要

Android 9 (API Level 28) が公開されたので、その特徴をまとめようと思います。
追加された項目としては、大きく 3 点ありました。(原文はこちら

1. Indoor positioning with Wi-Fi RTT

Wi-FiのIEEE 802.11mcの Wi-Fi Round-Trip-Time(RTT)というプロトコルがサポートされました。
これは、屋内のGPSで位置情報を取得しにくい場合でも、Wi-Fiのアクセスポイントとの距離に基づいて位置情報を取得できる。この時、ユーザはアクセスポイントに接続していなくても、距離情報を取得することができる。このため、ユーザのプライバシーは保護しつつ、精度の高い位置情報を取得することができるようになる。
位置情報の取得精度としては、 1 ~ 2 m の誤差となるため、かなり高精度の位置情報を簡単に取得できるようになる。
例えば、道案内の精度向上やショッピングモールなどの屋内施設での道案内などに応用することができる。
うまく利用できれば、顧客の店内移動情報が取得できるのではないだろうか。
2. Display cutout support

iPhone X などの画面の上部が欠けている端末にも対応できるようになる。
アップルでは「センサーハウジング」と呼ばれ、X 開発者向けサイトでも、そのように紹介されるが、Googleでは「cutout」と表現するようだ。
関数の getDisplayCutout() で取得することができ、「LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT」、「LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES」、「LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER」の3種類が用意されている。(今回は詳しくは紹介しない。)
3. Notifications

通知機能の更新である。
プッシュ通知画面で、メッセージの返信を行うことが可能となった。

4. Multi-camera support and camera updates

マルチカメラに対応した。2 つ以上のカメラを内蔵する場合にも、制御することが可能である。

5. ImageDecoder for drawables and bitmaps

BitmapFactoryの代わりに、ImageDecoderを採用。

6. Animation

アニメーションの表示機構の導入。 GIF と WebP がAnimatedVectorDrawableのように動く。

7. HDR VP9 Video, HEIF image compression, and Media APIs

HDR VP9 や HEIF サポート。

8. Data cost sensitivity in JobScheduler

処理の向上など

(Google Developersはこちら

---
【関連記事】
SensorEventListenerの使い方備忘録

---
【更新履歴】
180815:初期作成

2018年07月19日

SenserEvent の各センサー

SenserEvent
概要

・SenserEventListenerで取得できる各センサーの値をまとめる。
・SenserEventListenerの使い方は、こちらの記事で記載しているので、ご参考までに。

Sensor.TYPE_ACCELEROMETER

public final float[]、単位[m/s^2]
加速度センサー。float配列で、各値は以下の通り。

  • values[0]:
    x軸方向の加速度(デバイスの画面と向かい合った時の横方向。)
    例えば、左から右にデバイスを移動させるとプラスの加速度

  • values[1]:
    y軸方向の加速度(デバイスの画面と向かい合った時の縦方向。)
    重力加速度分はデフォルト値から引かれている。
    例えば、デバイスを下から上へ移動させるとプラスの加速度。

  • values[2]:
    z軸方向の加速度(デバイスの画面と向かい合った時の前後方向。)
    手前方向がプラスの加速度。

Sensor.TYPE_PRESSURE

public final float[]、単位[hPa]
気圧。float配列で、各値は以下の通り。

  • values[0]:
    気圧


Sensor.TYPE_RELATIVE_HUMIDITY

public final int[]、単位[%]
相対湿度。float配列で、各値は以下の通り。

  • values[0]:
    湿度



event.getAction()

主要な取得可能な値


基本的には、配列に各軸の値が入っている。

(Google Developersはこちら

---
【関連記事】
SensorEventListenerの使い方備忘録

---
【更新履歴】
180623:初期作成
180719:項目追加



2018年05月27日

MotionEventの使い方備忘録

MotionEvent
概要

・android.view.MotionEvent配下のリスナー
・入力イベントの取得
・・タッチ入力など

クラス図
android_hardware.png


呼び出し方

onCreate()内で利用定義

<対象パーツ(スクリーン、ボタンなど)>.setOnTouchListener(new View.OnTouchListener(){
 public boolean onTouchEvent(MotionEvent event) {

 }
});

ここで、対象物を指定して、タッチ入力の取得が行える。
eventに入力状況が保存されている。
例えば、以下のように値を取得することで、画面に「触れた」「放した」、指を「スライドさせた」などの動作を取得することができる。

event.getAction()

主要な取得可能な値

eventから取得できる値を記載する。
マルチタッチに対応しており、複数の指の座標の取得が可能。
ただし、タッチ位置を取得するgetX()などの値には、1つの座標のみが取得可能。
スクリーンに初めに触れた指から0→1...と順に値が振られる。
スクリーンからすべての指を放した際に、振られた値はリセットされる。
(※マルチタッチ時は例外。放した指の値のみ解放される。)

  1. デバイス情報:getDevice
    例えば、amazonのfire8で取得される情報は以下のようなものである。

    Input Device(int): 入力したデバイスのID。機器ごとに決まる。

    Descriptor(string): 入力デバイスのディスクリプター

    Generation: デバイスの世代情報。fire8は"28"

    Location: fire8は"built-in"

    Keyboard Type: キーボード情報。タッチ入力の場合?"none"

    Has Vibrator: バイブ機能。タッチ入力の場合?"false"

    Source: タッチスクリーンの入力可能情報。
    ・AXIS_X: x方向(横、水平)のサイズ
    ・AXIS_Y: y方向(縦、垂直)のサイズ
    ・AXIS_PRESSURE: 感圧?
    ・AXIS_SIZE:
    ・AXIS_TOUCH_MAJIR:
    ・AXIS_TOUCH_MINOR:
    ・AXIS_TOOL_MAJIR:
    ・AXIS_TOOL_MINOR:


  2. x方向のタッチ位置:getX
    引数にintの値を入力することで、マルチタッチ時に複数の座標を取得することができる。
    例)event.getX(1)

  3. y方向のタッチ位置:getY

  4. タッチし始めた時間を取得:getDownTime
    デバイス内部のシステム起動時間

  5. タッチ動作:getAction
    それぞれ頭の[(int)]が返値。MotionEventの該当動作も記載。

    ・[0] MotionEvent.ACTION_DOWN: 指一本のみ触れた

    ・[1] MotionEvent.ACTION_UP: 指一本のみで触れていた場合、指を放した

    ・[2] MotionEvent.ACTION_MOVE: 指一本のみで触れていた場合、指を動かした

    ・[?] MotionEvent.ACTION_CANCEL: タッチ操作では呼ばれない?

    ・[5] ???: 発生トリガー不明(複数本の指で触れていた時に、放すと取得されることもある)

    ・[6] ???: 発生トリガー不明(複数本の指で触れていた時に、放すと取得されることもある)

    ・[261] ???: 2本の指で触れた

    ・[262] ???: 2本の指で触れていたときに、指を1本放した

    ・[517] ???: 3本の指で触れた

    ・[518] ???: 3本の指で触れていたときに、指を1本放した

    ・[773] ???: 4本の指で触れた

    ・[774] ???: 4本の指で触れていたときに、指を1本放した

    ・[1029] ???: 5本の指で触れた

    ・[1030] ???: 5本の指で触れていたときに、指を1本放した

    ・[1285] ???: 6本の指で触れた

    ・[1541] ???: 7本の指で触れた

    ・[1797] ???: 8本の指で触れた

    ・[2053] ???: 9本の指で触れた

    ・[2309] ???: 10本の指で触れた

    など

恐らく、メインに利用するのは、このような値であろうと思われる。
基本的な使い方はgoogleのページに記載されているので、そちらを確認してもらった方が確実とは思う。

(Google Developersはこちら

---
【更新履歴】
180527:初期作成
180602:getActionの追記
180916:クラス図追加

基本からしっかり身につくAndroidアプリ開発入門 Android Studio 3.x対応 [ 森 洋之 ]

価格:2,970円
(2018/9/16 17:17時点)
感想(1件)


ロリポップ!レンタルサーバー!はあなたの「やってみたい!」を応援します!

ロリポップ!なら、ホームページ、ブログ、ネットショップ…

これらが今すぐ、そして簡単にできちゃう!

マニュアルやライブチャットを完備しているので、ホームページ初心者でも安心。

これだけついてるのに月額100円(税抜)〜ととってもお得。

もちろん無料のお試し期間も10日間あるので安心ですね。


▼ロリポップ!レンタルサーバーはこちら

2018年05月06日

Intentの備忘録

Intent
概要

・android.content.Intent配下のリスナー
methods

    Androidでオブジェクト間の情報のやり取りを行う関数。
    画面遷移やバッテリ情報の取得が可能。

    IntentFilter intentFilter = new IntentFilter(Intent.ActionBatteryChanged);
    Intent intent = this.RegisterReceiver(null, intentFilter);
    int batteryLevel = intent.GetIntExtra(BatteryManager.ExtraLevel, -1);


    バッテリーの残量表示の例。

    (Google Developersはこちら

    ---
    【更新履歴】
    180506:初期作成

    ---
    【追記予定】
    Intentの追記
    IntentFilterの新規作成



TabHostの備忘録

TabHost
概要

・android.widget.FrameLayout配下のリスナー
デザイン

    タブを表示させる。
    xmlでの記載方法。

    <TabHost
    android:id="@+id/tabHost1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    [ここに追加する]
    </TabHost>


    ここで、幅は親フォームに合わせている。
    "[ここに追加する]"の項目は以下のような内容を記載する。
    まず、タブを利用するための情報を記載する。

    <LinearLayout
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical"
     android:id="@+id/linearLayout1">
     <TabWidget
      android:id="@android:id/tabs"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"/>
      [ここに追加する2]
    </LinearLayout>


    "[ここに追加する2]"の項目は以下のように記載する。
    ここでタブの各ページを追加する。
    タブの各ページはLinearLayoutを利用している。

    <FrameLayout
     android:id="@android:id/tabcontent"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:minWidth="25px"
     android:minHeight="25px">
     <LinearLayout
      android:orientation="vertical"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:id="@+id/linearLayout_tab1">
     </LinearLayout>
     <LinearLayout
      android:orientation="vertical"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:id="@+id/linearLayout_tab2">
     </LinearLayout>
     <FrameLayout>


    レイアウトだけでは、タブの表示がうまくいかないため、
    動作を定義する必要がある。
    methods

      タブの設定方法。
      OnCreate(Bundle savedInstanceState)中にタブの表示方法を定義する。

      TabHost tabHost = FindViewById(Resource.Id.tabHost1);
      tabHost.Setup();
      TabHost.TabSpec tabSpec1 = tabHost.NewTabSpec("tab1"); //─1
      tabSpec1.SetIndicator("タブ1"); //─2
      tabSpec1.SetContent(Resource.Id.linearLayout_tab1); //─3
      TabHost.TabSpec tabSpec2 = tabHost.NewTabSpec("tab2");
      tabSpec2.SetIndicator("タブ2");
      tabSpec2.SetContent(Resource.Id.linearLayout_tab2);
      tabHost.AddTab(tabSpec1); //─4
      tabHost.AddTab(tabSpec2);
      tabHost.SetCurrentTabByTag("tab1"); //─5


      各処理の説明を記載する。

      1. タブの名前を設定する。

      2. タブの表示名を設定する。

      3. タブで表示するレイアウトを指定する。

      4. タブを追加する。

      5. 初期表示のタブを設定する。



      (Google Developersはこちら

      ---
      【更新履歴】
      180505:初期作成



2018年04月28日

SQLiteDatabaseの使い方備忘録

SQLiteDatabase
概要

・android.database.sqlite配下のリスナー
methods

    データベースの作成準備。
    データベースの要素の設定。

    public static class FeedEntry implements BaseColumns {
      public static final String TABLE_NAME = "entry";
      public static final String COLUMN_NAME_TITLE = "title";
      public static final String COLUMN_NAME_SUBTITLE = "subtitle";
    }


  • execSQL
    データベースの作成/追加/更新/削除に使用する関数。
    Stringを引数とすることで挿入することができる。

    String SQL_CREATE_ENTRIES =
      "CREATE TABLE " + FeedEntry.TABLE_NAME + " (" +
      FeedEntry._ID + " INTEGER PRIMARY KEY," +
      FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + "," +
      FeedEntry.COLUMN_NAME_SUBTITLE + TEXT_TYPE + " )";
    db.execSQL(SQL_CREATE_ENTRIES);


    引数を変更することで、データベースの削除をすることも可能。

    String SQL_DELETE_ENTRIES =
      "DROP TABLE IF EXISTS " + FeedEntry.TABLE_NAME;
    db.execSQL(SQL_DELETE_ENTRIES);


    ただし、これではデータベース自体を削除するため、行の削除は後述のdeleteを使用する。

  • delete
    データベースの行データの削除を行う。

    delete(String table, String whereClause, String[] whereArgs)



  • (Google Developersはこちら

    ---
    【更新履歴】
    180426:初期作成



2018年02月10日

Kotlinの備忘録

Kotlin
概要

  • 2011年7月にリリースされた比較的新しい言語
特徴

  • Java仮想マシン上で動作
  • Javaコードと相互運用が可能
  • 型の省略が可能
変数定義

  • var
    再代入可能

  • val
    再代入不可

すっきりしたコードを書く場合は、valをメインに利用する方がよいと思われる。
switch(java):when(kotlin)

  • Kotlinにはswitchがないが、代わりにwhenを利用する
Java
switch(value) {
case: 0
//value == "0"
break;
case: 1
//value == "1"
break;
default:
//
break;
}
Kotlin
when (value) {
0 -> {
//value == "0"
}
1 -> {
//value == "1"
}
else -> {
//
}
}

if文

  • Kotlinには三項演算子がない
  • Kotlinのif文は式である
Java
int value = 0;
if( n > 0 ){
value = 1
} else {
value = 2
}
Kotlin
val value = if (n > 0) {
1
} else {
2
}



---
【更新履歴】
180208:初期作成

【対応必要箇所】



Activity Lifecycleの備忘録

Activity
概要

  • public class Activity
ループ概要

  • onCreate()で始まって、onDestroy()で終了する。

  • onStart()で目に見える処理が始まり、onStop()で終了する。

  • onResume()でユーザー対話式の処理が始まりonPause()で終了する。
ライフサイクル

MethodDescriptionKillableNext
onCreate()---NoonStart()
onRestart()---NoonStart()
onStart()---NoonResume() / onStop()
onResume()---NoonPause()
onPause()------onResume() / onStop()
onStop()---YesonResume() / onDestroy()
onDestroy()---Yes---

一覧
public class Activity extends ApplicationContext {
protected void onCreate(Bundle savedInstanceState);

protected void onStart();

protected void onRestart();

protected void onResume();

protected void onPause();

protected void onStop();

protected void onDestroy();
}
onResume()の使用例

  • Timerなどに利用可能
onResume()のOverride
@Override
public void onResume(){
super.onResume();
//Timer の起動を行う
}
Timer()の記述


(参考:https://developer.android.com/reference/android/app/Activity.html

---
【更新履歴】
180209:初期作成

【対応必要箇所】



検索
<< 2022年06月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
最新記事
タグクラウド
カテゴリーアーカイブ
日別アーカイブ
×

この広告は30日以上新しい記事の更新がないブログに表示されております。