- 1. Coroutineって多分こういう事。
- 2. URIに値を追加する
- 3. AndroidでFirebaseStorageを使ってみよう
- 4. Firebaseと連携してAndroid Studioに?を追加する方法
- 5. 漫画のセリフ画像を共有できるアプリを作ってみた
- 6. Oculus Store 申請時に対応必須の Entitlement Check について
- 7. 【Android】HorizontalScrollViewとScrollViewを同期的にスクロールさせてみた
- 8. FlutterのreleaseビルドでHTTP通信が使えないとき
- 9. Groupieと生のRecyclerViewの比較
- 10. Android で OpenCV のサンプル face-detection を試す
- 11. Androidで学生証(Felica)のIC残高を読む
- 12. TechTrainを利用してチームでアプリ開発をした話(Android編)
- 13. 実際にDIしてみた
- 14. ExoPlayerで早送りと巻き戻しの秒数を設定する
- 15. Androidの実機でデバック中に配置エラーが出た場合の対処
- 16. 【Androidアプリ】音声テキスト変換して記録・ファイル保存・再表示するアプリが出来た♪
- 17. Material Componentsを使ってDark ThemeのElevation Overlayを実装する方法
- 18. Dependency Injectionの意味について考える
- 19. 星を使った(使ってない)AR
- 20. CircleCIお触り!Androidのビルド実行~サーバへのapkアップロードまでやってみた
Coroutineって多分こういう事。
1. 指定したthreadの処理(図ではMain thread)にCoroutineの処理がわりこむ。Main threadでcoroutineの処理が始まる。
2. Coroutine内のsuspend function(データ取ってきたり、5秒delayさすとか、終わるまでcoroutineの処理を一時停止させる処理)が終わるのをまっている間、Main threadはcoroutine外の処理に戻って実行できる。
3. suspend functionが終われば、またcoroutineの処理の続きに戻る。
![UNADJUSTEDNONRAW_thumb_d85.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252245/8e660835-83c1-40eb-cb4c-a82ba5a9ee6c.jpeg)緑の色鉛筆がMain threadの想定される処理順序です。
##ref.
[codelab 6章](https://codelabs.developers.google.com/codelab
URIに値を追加する
初投稿です。Android で URI にパスやクエリパラメータなどを追加したいときは[`Uri.buildUpon()`](https://developer.android.com/reference/android/net/Uri.html#buildUpon()) が便利ですね。
“`kotlin
val uri = Uri.parse(uriString)
.buildUpon()
.appendPath(“path”)
.appendQueryParameter(“foo”, “bar”)
.build()
“`– [Uri – Android Developers](https://developer.android.com/reference/android/net/Uri)
– [Uri.Builder – Android Developers](https://developer.android.com/reference/android/net/Uri.Builder.html)
AndroidでFirebaseStorageを使ってみよう
Android初心者アドベントカレンダー9日目を担当しますカーキです.
普段はLife is Tech!というところで大学生メンターをしたり、名古屋のスタートアップのスタメンという会社でモバイルアプリエンジニアインターン生として働いています.## FirebaseStorageとは
[FirebaseStorage](https://firebase.google.com/docs/storage/android/start?hl=ja)はGoogleが提供する[Firebase](https://firebase.google.com/?hl=ja)の機能の一つです.
FirebaseStorageではその名の通り、ファイルの送受信がいとも簡単に行うことができます.
そしてAndroidでは後述しますが画像を受け取る際にGlideという画像ローダーライブラリを使用することができます!(やったね!) :thumbsup:## 準備
### プロジェクト側
`build.gradle`にfirebase-storageを追加します.
またGlideを使ってファイルをダウンロード
Firebaseと連携してAndroid Studioに?を追加する方法
この記事は[Android #2 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/android-2)の12/9の記事です。
前日は @tak-wisteria さんの「[Android × TDD](https://qiita.com/tak-wisteria/items/b09e208415ac317e425b)」でした。# はじめに
Android Studioを普段使用している方で上記のアイコンがあるのをご存知でしょうか。
上記の?の画像はゲーム画面などではなくAndroid Studioの一部を拡大したものです。?は若干不気味ですがAndroid開発をとて
漫画のセリフ画像を共有できるアプリを作ってみた
この記事は[個人開発 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/private-development) 8日目の記事です。
## 概要
[漫画のセリフ画像を共有できるアプリ](https://apps.apple.com/jp/app/%E6%BC%AB%E7%94%BB%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%97/id1326447543)を作ってみたので、サーバ側の構成等も含めて紹介したいと思います。## 機能
作品名やキーワード検索から漫画のセリフ画像を選択し、共有ボタンからコピペ or 直接LINE等の外部アプリを開いて送るだけです。Oculus Store 申請時に対応必須の Entitlement Check について
# はじめに
Oculus Store へアプリを申請する場合は、
`Entitlement Check` という仕組みを導入する必要があります :white_check_mark:`Entitlement Check` とはユーザがアプリを起動する際に、
Oculus Store 経由で公式に配布されているものかを確認する仕組みになります :mag:`Entitlement Check` に通らなかったアプリは不正なコピーとみなされ、
アプリが強制終了される必要があります :x:そこで本記事では、`Entitlement Check` の実装方法について書いていきます :pencil:
なお既に [Oculus Developer のページ](https://dashboard.oculus.com/) からアプリの作成は完了済みで、
Unity プロジェクトに [Oculus Integration](https://assetstore.unity.com/packages/tools/integration/oculus-integration-8202
【Android】HorizontalScrollViewとScrollViewを同期的にスクロールさせてみた
# 作ったもの
こんなものを実装してみました。
![screen_record.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136368/09055fb6-d367-660f-1d92-9c5af67a5fcc.gif)縦と横のScrollViewを同期させていて、縦がn%スクロールすれば同じく横もn%スクロールします。
縦と横どちらから操作しても同じように動くように実装しています。# 処理の流れ
1. 各ScrolViewの最大スクロール位置を計算
2. 各ScrollViewのタップ時に、どちらのScrollViewをタップしているのかを保持
3. タップ中のScrollViewがスクロールされる度に、(1)で計算した最大スクロール位置のうち何%スクロールしたのかを計算
4. タップしていない側のScrollViewのスクロール位置を、(3)で算出した割合の位置に変更# 実装
こちらの記事ではポイントとなるコードのスニペットのみ記載しています。
完全なコードは[Github](htt
FlutterのreleaseビルドでHTTP通信が使えないとき
# FlutterのreleaseビルドでHTTP通信が使えないとき
つい先日、debugモードでのビルドが正常に動いていたためreleaseモードでビルドして実行しようとした際に
“`
[ERROR:flutter/lib/ui/ui_dart_state.cc(148)]
Unhandled Exception: SocketException: Failed host lookup: ‘example.com/api/hogehoge’
(OS Error: No address associated with hostname, errno = 7)
“`といったエラーが出ました。
Failed host lookup(ホスト検索に失敗)と出ていたのでURLが間違えていたのかと思い確認してみるが間違えていなかった。
後ろのほうを見てみると、OS Error: No address associated with hostname(ホスト名に関連付けられたアドレスがありません)となっているため、もしかしたら権限回り?と思い調べてみました
## StackOver
Groupieと生のRecyclerViewの比較
#どんな内容?
GroupieというRecyclerViewを簡単に便利に使えるライブラリを使ったので生のRecyclerViewとの比較をしました。
ソースは[こちら](https://github.com/kkt-yu/groupie_practice)。(開いたらついでにスターつけていってください)
![demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476234/2fe23b65-5def-41b6-5aa7-fef9abb0f754.gif)#環境
– Kotlin:1.3.61
– groupie:2.7.2
– アーキテクチャ:MVVM#比較の概要
– 生のRecyclerViewで必要だったファイル
1. Fragment
2. ListのViewModel
3. ListのAdapter
4. ItemのViewHolder
5. ItemのViewModel
– Groupieで必要だったファイル
1. Fragment
2. BindableItem
Android で OpenCV のサンプル face-detection を試す
[AndroidStudio で OpenCV をインポートする](https://qiita.com/ohwada/items/71eb18296aac46f9f5ee)
の続きです。### 概要
Android 用 OpenCV には、
8個のサンプルが同封されている。
そのうち face-detection について、解説する。### face-detection
顔検出機能の最もシンプルなサンプルです。
2つの実行モードがある。
– Java APIを使う
– Native API を使うどちらも、カスケード型分類器 を使用する。
Java API でも、Google Nexus Oneデバイスでほぼリアルタイムのパフォーマンスを表示できる。
メニューは2通りある。
– 顔のサイズを選択
– Java / Native Detector の切り替え### カスケード型分類器 (Cascade Classifier)
特徴分類ファイル (Classifier File) を利用したオブジェクト検出器です。
機械学習のCNN(Convolutiona
Androidで学生証(Felica)のIC残高を読む
# はじめに
この記事は、[SLP KBIT Advent Calendar 2019](https://adventar.org/calendars/4214) の8日目の記事です。
最近、AndroidのNFC機能を使って、ICカードのデータを読み取ることができることを知りました。
そこで「自分の学生証も読み取れるのでは?」と思ったので試してみました。# 読み取るデータについて
今回は学生証に格納されている大学生協のIC残高を読み取ってみたいと思います。
自分が持っている学生証は、Felicaに対応したICカードになっているので、NFCのFelicaに対応した端末で読み取ることができます。Felicaの規格に関しては、 [FeliCaカード ユーザーズマニュアル 抜粋版](https://www.sony.co.jp/Products/felica/business/tech-support/st_usmnl.html) にまとめられています。
学生証のデータ構造に関しては、 [大学生協Felicaの仕様](https://gist.github.com/oboeni
TechTrainを利用してチームでアプリ開発をした話(Android編)
# はじめに
部活のプロジェクトで「技術好きの学生向けのSNSアプリを開発しよう!」ということになりチーム開発をすることになりました。
そこで、TechTrainというエンジニア志望のU30向けメンタリングサービスを利用し、インターンという形でリリースを目指して開発を続けてきました。
結果としてはリリースならず…!となってしまいましたが…
メンターさんの指導のもと、実務レベルでのアプリ開発を4~12月の8ヶ月間行なってきたので得られたものが非常に多かったです…!
今回、僕はAndroid担当兼PMというポジションでこのプロジェクトに関わってきたので、それぞれの立場から記事を書こうと思う次第…
本記事は前半のAndroid編です!
今回、Android開発をした際の道のりを順を追って書いていきます。
また、メンターさんから頂いたアドバイス等の中から、ぜひ発信したいと思った内容を一部お伝えしたいと考えてます。
なお、Qiita初投稿なので、お手柔らかに…# アーキテクチャの選定
まず、アプリケーションの全体の大まかな構造を決定するに当たって考えなくちゃいけないのが「
実際にDIしてみた
# 前置き
[前回](https://qiita.com/yogita109/items/d0e8cc8c7f873b0c01ef)はDIの意味について考えてみたが、では実際にDIとはどのようにすれば良いのか。
DIのやり方は複数あり、それぞれの方法について説明していきます。# 内部でDIした場合
まず何も考えずにDIしてみます。“` kotlin
interface Engine {
fun start()
}class GasolineEngine: Engine {
fun start() {
println(“start”)
}
}class Car {
// GasolineEngineクラスのインスタンスをDIしている
private engine = GasolineEngine()fun start() {
engine.start()
}
}fun main(args: Array) {
val car = Car()
car.start(
ExoPlayerで早送りと巻き戻しの秒数を設定する
定義しているlayoutファイルのViewに
app:fastforward_incerment、app:rewind_incrementを追加する。“`
“`参考記事(Exoplayerを丁寧に解説しているからとても分かりやすい):
https://medium.com/fungjai/playing-video-by-exoplayer-b97903be0b33
Androidの実機でデバック中に配置エラーが出た場合の対処
メモ書きみたいなものですが、ちょっとハマったので書きます。
Xamarin Formsのアプリを作成中、実機をアップグレードしたら下記のエラーで配置できなくなった。エミュレータだと実行できる。
“`Mono.AndroidTools.RequiresUninstallException: The installed package is incompatible. Please manually uninstall and try again.
“`まあ、手動でuninstallしろってことなんだけど、既に実機のアプリは削除してある。やり方がわからなくて調べた。
どうやらadbコマンドを使うらしい。
VS2019の「ツール」→「Android」→「Android Adb コマンドプロンプト」でAndroid Adb コマンドプロンプトを立ち上げる。
「よく使うadbのコマンド」を参照する。
https://qiita.com/t2low/items/cb37cec5f864c4748e14アプリ名は「FileUploader」なので、
“`adb shell p
【Androidアプリ】音声テキスト変換して記録・ファイル保存・再表示するアプリが出来た♪
このところ取り組んできたスマホアプリ、「音声をテキストで記録・ファイル保存・再表示するアプリ」が出来ました。
英語、日本語、そしてタイ語で記録再表示を確認できました。
入力はGoogle音声入力を利用するので、対応する言語は使えそうです。**以下の表は一度保存した3つのファイルを表示したもの**
| 1 | 2 | 3 |
|:-:|:-:|:-:|
| ![test.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/ae62ad78-e389-1e15-739b-063c236b8992.jpeg)|![test2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/3501631d-d29c-a439-e197-827d4ca410f8.jpeg)|![testfile.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com
Material Componentsを使ってDark ThemeのElevation Overlayを実装する方法
この記事は [Android Advent Calendar 2019](https://qiita.com/advent-calendar/2019/android) の7日目の記事です。
# はじめに
マテリアルデザインを取り入れているアプリでDark Themeをサポートする場合、アプリのThemeを `Theme.AppCompat.DayNight` の派生Themeに変更したり、ColorやDrawableの `-night` の代替リソースを用意したり、といった作業を行うことになりますが、それに加えて必要になるのがElevation Overlayの適用です。
本記事では、Elevation Overlayとは何かを説明し、[Material Components for Android](https://github.com/material-components/material-components-android) を使ってElevation OverlayをViewに適用する方法を説明します。
なお、この記事の執筆時点 (2019年12月7日) で、Ma
Dependency Injectionの意味について考える
# Dependency Injectionとは
日本語で直訳すると依存性の注入と訳されます。
DIとはなんぞや、を考えるために今回は
依存という単語と注入という単語
に分けてDIについて考えていきます。# プログラミングにおける依存とは
そもそも依存とは、それがなくては生きていけない状態という意味です。
現実世界で一例を考えてみると、車というものはエンジンというモジュールが必要であり、
エンジンが無いと走行することができません。
この状態は、車はエンジンに依存している、という風に表現できます。では上記をプログラムの世界で表現してみましょう。
“`kotlin
class Car {
// 車はエンジンが無いと走行することができないので、エンジンが必須です。
val engine = Engine()// 車を走らせるためにエンジンをかけます
fun start() {
engine.start()
}
}
“`
CarクラスはEngineクラスの参照を必要
星を使った(使ってない)AR
# きっかけ
[レジャー好きな人の支援](https://speakerdeck.com/miyatanam/ar-support-for-leisure-lovers)
AR_FukuokaでLTした。やったことは星を利用したAR(\*1)。この年になって星を使う事になるとは思わなかったが、やってよかったと思ってる。
![ペルセウス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42445/3e4efa81-0307-0e10-f4be-88509ccad091.png)
星座を利用するって壮大
CircleCIお触り!Androidのビルド実行~サーバへのapkアップロードまでやってみた
#1.経緯
今回、CircleCIって便利そうだけどどうなのっていうのが社内で意見があり、これから新しくサービスやるかもっということだったので、触ってみました。
サーバ側で導入したいとのことですが、私、AndroidがメインなのでまずはAndroidをビルドして、サーバにapkアップロードしたいというところまで。
また、アプリ側的にはあくまでも社内のテスト時の配布用とかなので、今の所は利用する予定はないのですが、サーバ的に本番へのマージ作業とかの際、Push時にそのまま処理走るのが困るので、一度処理を止めて確認した上で後続の処理が走らせれるようにするところまでをやってます。iOS側もやる予定なので出来たらその時に記事書くかもです。
テスト実施してから、ビルドを走らせるとかはゆくゆくできるようにしたいなと思います。#2.やったこと
【Androidのビルド,Apkの吐き出し】->【CircleCIの管理画面での承認待ち】-> 【社内のサーバにapkをアップロード】
*正確には最後のアップロードまでは出来ていません。。。詳しくは3.導入の流れを参照#3.導入の流れ
今回はテス