Android関連のことを調べてみた2019年12月24日

Android関連のことを調べてみた2019年12月24日

【Android】Firebaseにユーザデータを保存する

# はじめに

僕が個人開発しているAndroidアプリに『[メモアプリ](https://play.google.com/store/apps/details?id=jp.hituzi.android.statusbarmemo&hl=ja)』というメモ帳アプリがあります。基本的にはオフラインで使えるシンプルなメモ帳アプリなのですが、機種変時のデータ移行を楽にしたいという要望もあり、Firebaseを使ってユーザデータのバックアップ作成/復元ができるようになっています。

Firebaseの**Auth**, **Firestore**, **Storage**を使うことで比較的容易にこの機能を組み込むことができましたが、それでも実装量はそれなりにあるため、本記事では、この機能の実装例を簡単にではありますが紹介します。

# 1. AndroidプロジェクトにFirebaseを追加する

以下の公式ドキュメントを参考にAndroidプロジェクトにFirebaseを追加します。
[Android プロジェクトに Firebase を追加する](https://firebase.goog

元記事を表示

Androidアプリでのエラー処理について

この記事は[CAM Advent Calendar 2019](https://qiita.com/advent-calendar/2019/cam-inc) の24日目の記事です。:golf:
昨日は@takehziさんの[トランザクションとロックと二重課金](https://qiita.com/takehzi/items/7dc5bf66f684ceae83b8)でした。

# :warning: エラー処理って何?
Androidに限らず、クライアントアプリ全般的に言えることですが、よく***「エラーが発生しました。もう一度やり直してください。」***みたいなポップアップを見かけると思うのですが、それを表示するまでに行う処理のことをここでの**エラー処理**とします。

ここで紹介するのはあくまで一つの手法です。

# :thinking: やること

**1. エラーを受け取る**
**2. 受け取ったエラーに対してそれぞれ処理を分ける**

… 以上

と言っても、これだけだとさっぱりなので順を追って説明できればと思います。

## 1. エラーを受け取る

この受

元記事を表示

人種も育ってきた環境も違う二人がともに生活を始め、価値観の違いを埋めながら成長し、まだ見ぬ未来に希望をつなげる話

#はじめに
先にタイトルのオチを書いてしまいましょう!

人種も育ってきた環境も違う二人がともに生活を始め、価値観の違いを埋めながら成長し、まだ見ぬ未来に希望をつなげる話

OSもこれまでの保守会社も違うiOSとAndroidアプリを一つの会社がまとめて受け持つことになり、過去の実装方針や思想の違いを感じながら保守を行い、いつ行われるかわからない次のリニューアルに向けで準備をすすめる話です。

弊社では現在デイリーアクティブユーザー120万人超えのモバイルアプリの保守をしています。
2011年から8年間iOSの保守のみを受け持って来たのですが、その実績から今年の5月末にAndroidもやってほしいと言われ、是非にということで、そのお話をお受けしました。
私自身がiOSよりもAndroid寄りのエンジニアなので、いつかAndroidの保守もやれればと思っていたことが、ついに現実になったのです!!

###ところが、そんなに甘い話ではなかった
Androidは今まで保守していた会社が複数あり、内部の構造はかなり煩雑
クラスの命名規則が意味不明、変数はキャメルケースとスネークケースが入り

元記事を表示

複数の要素をAppBarLayoutを使ってスクロール時に収納する

この記事は Goodpatch Advent Calender 2019 の 20日目です

Androidのアプリでたまに見かけるモダンなスクロールを作っており、
少し苦労したので、その知見を共有したいと思い書きました

# やったもの

スクロールすると上にタイトルが固定表示されるような画面で、
1つの要素ではなく複数の要素で構成したい場合に以下の方法を使って実現しました。

# 実装方法
この実装にはレイアウトで対応するのが難しく、コードで制御するようにしました。

## レイアウトの構成
“`
Android Navigation を使った引数の渡し方

# はじめに
この記事は Goodpatch Advent Calendar 2019 13日目の記事です

今年を振り返り私自身Android開発に大きな目玉機能だなと思ったのは2019年4月に正式リリースされたNavigation機能だと思っています。
Navigation機能を簡単に説明するとGUI上でAndroidの画面表示機能の1つFragmentを管理しやすくなった機能です。

以前だと、Fragmentを管理するためにはコードを記述してそのなかで管理する必要がありました。
そのため画面管理するのに設計したり、テストしたりとコードを書く以外に時間をかける必要がありました。

しかし Navigationの登場のおかげでFragmentの管理がコードから視覚的にわかるGUIに変更されたため
急な画面変更が発生し、遷移の仕方が変わったとしてもカジュアルに変更することができるようになりました。

Navigationを使いブイブイ画面を作ることはらくらくできたのですが、Fragmentで引数を渡すところで私自身結構つまづいてしまったので
今回はそのNavigationの引数の渡し

元記事を表示

【Android】はじめてのRoom

[【Android】分かった気になれる!アーキテクチャ・MVVM概説](https://qiita.com/iTakahiro/items/6b1b22efa69e55cea3fa) ではアーキテクチャ・MVVMの概要をコードを記述せずに概念のみ説明してみました。
その後の投稿では、実践編として各ライブラリを実際にコードを記述し記事にしています。
**これまでの記事** :

– [【Android】分かった気になれる!アーキテクチャ・MVVM概説](https://qiita.com/iTakahiro/items/6b1b22efa69e55cea3fa)
– [【Android】はじめてのDataBinding](https://qiita.com/iTakahiro/items/b5fe2b186750c6e774e5)

MVVMシリーズ実践編第二回目のテーマは、[Room](https://developer.android.com/training/data-storage/room/index.html)です。
DBの一つであるSQLiteを容易に扱うことのできるRo

元記事を表示

アプリを見比べたいじゃない

# アプリを見比べたい

アプリもリリースしてから年月が経つと

「今のアプリの動きってどんなだっけ。。。」

「あれ?改修後はどうなるんだっけ??」

といった具合で改修前、改修後のアプリを見比べたい時なんかが発生してきます

ですが普通にアプリを端末にインストールするとPackege(ApplicationID)が一緒なもんだからアプリを上書きインストールしてしまうんですよね。。。

あーこまった。。

##そんな時にFlavor

そう、そんな時に役立つのがFlavorなんです

前回[こちらの記事](https://qiita.com/ga_ga_chickin/items/2226f334ced1b4de2fa3)でConstファイルとか切り替えられるよっていう話をしたんですけど、Flavorさんが変えられるのはファイルだけじゃなかった

##接頭詞をつけちゃうよ

今回Flavorにやってもらう仕事はApplicationIDに接頭詞をつけることです
開発APIサーバに向いているFlavorにはdev
スクリーンショット 2019</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Android</div>
<div class='tag-cloud-link'>Kotlin</div>
<div class='tag-cloud-link'>AndroidStudio</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/ga_ga_chickin/items/1b65ca5dcd5b785b4010'>元記事を表示</a></div>
<h3 id=【ぶっちゃけAndroidアプリ開発】AsyncTaskクラスの備忘録

このTipsはJava言語をある程度学んでいる方を前提にしています。
Web通信するAndroidアプリを開発する上で、AsyncTaskという非同期クラスを使う事になりました。その時に学んだ事を備忘録として記録します。
AsyncTaskに翻弄されている方の助けになればと思います。
##サンプルコード
AsyncTaskを継承して実装したサンプルコードです。(Android Developersより)
AsyncTaskは、呼び出し側と非同期で実行したい場合に使います。なので、呼び出し側はクラスをインスタンス化して実行(executeメソッド)する事になります。(呼び出し方は後述)

“`.java
private class DownloadFilesTask extends AsyncTask {
protected Long doInBackground(URL… urls) {
int count = urls.length;
long totalSize = 0;

元記事を表示

Epoxyのスクロールがかくつくので調べたらリサイクルされていなかった

この記事はand factory Advent Calendar 2019の24日目の記事です

# きっかけ

とあるページの初回表示を高速化するためにをEpoxyのRecyclerView(以下、Epoxyと書きます)を使うようリファクタしました。

対象となるページの構成はこちらです。rootがLinearlayoutでその下にいくつかのViewをぶら下がっています。

“`
LinearLayout // rootのViewGroup
∟ RecyclerView
∟ RelativeLayout
∟ RecyclerView
∟ RecyclerView
∟ LinearLayout
∟ …
“`

– 要素毎にaddViewしています。ただ、要素数がそれなりに多く、ページ初回表示するときに画面外の要素の処理も動いていました。

– Epoxyでは画面外要素の処理はページ表示した時に動かないので、ページ表示の高速化が期待できそうです :relaxed:

## LinearLayoutをEpoxyに切り替える

– 先ほどのrootに配置し

元記事を表示

Vue.js で Android 向けに明朝体を使いたい

Andoroid に明朝体がないのは割と知られてる話で、そういう場合は Google Web フォントとか使うのが一般的ですが、
Vue.js でやったときにちょっとハマったのでメモ。

## TL;DR

– npm パッケージのフォントだとダメっぽい(パッケージ内での実装方法にもよるかも?)
– CSS の `@import` で読ませればOK
– または vue-head パッケージ使ってるならそれを使ってもOK

## Vue.js で Google Fonts を使う

実は、Google Fonts で公開されているフォントはほとんどが npm パッケージからの導入もできて、
typaface/xxx (あるいは typeface-xxx)みたいな感じで検索するとでてきます。

main.js でインポートすればすぐつかえるので、私はいつもこの方法でやっていました。

たとえば、さわらび明朝ならこんなふうに。

インストール

“`bash
npm install typeface-sawarabi-mincho –save
# or
yarn add typefac

元記事を表示

今年はクリぼっちが本当に少ない / Flutter

今年はクリぼっちが本当に少ない / Flutter
今年もやってまいりました!!クリスマス!

# この記事でわかること

– Flutterでアプリを作りましたので、その技術内容と悩み
– 恋をすることの素晴らしさ
– クリスマスの考察

この3つを中心に書いていければなと思います。

# 私の周りでクリぼっちが減った!?

最近、私の周りでは幸せ報告が後を絶えません。

いわゆる結婚ラッシュってやつでしょうか。

– 結婚しましたー(例のシンデレラの人)
– 結婚したぷるぷる!(大学の先輩)
– 結婚しました〜(インスタグラム多数)
– 付き合った報告(思い切って恋をしてみました!)

しかもそれだけでなく、恋をした効果なのか

– 結婚(シンデレラ) → 勇気を出してデザインのフリーランスになれた!
– 結婚(大学の先輩) → CEOでめちゃめちゃ稼ぐ
– 付き合った報告 → CTOになれた!

など恋をしつつも自分にコミットできている方が今年は多いと感じられました。

いや逆に、**恋をしているからもっと頑張れる**わけです。

# やっぱり恋ってすごい

あらためて恋ってすご

元記事を表示

Androidアプリを公開する

初めてAndroidアプリを公開したので手順をメモします。

## 準備するもの
– [Google Playデベロッパーアカウント](https://support.google.com/googleplay/android-developer/answer/6112435?hl=ja)
– APKファイル
– ストア掲載用スクリーンショットファイル
– ストア掲載用アプリアイコンファイル
– ストア掲載用ヘッダー画像

## 手順
[Google Play Console](https://play.google.com/apps/publish/)にログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178016/483d9310-1af5-ae93-f75e-a0a0e4cdc666.png)

すでに内部テストなどでアプリ作成が完了している場合には該当のアプリを選択します。新規作成の場合には[アプリの作成]をクリックし、言語とタイトルをつけて作成してください。
私は

元記事を表示

[Android / Kotlin / ARCore]ARCoreでTextViewを出す

AR触ってみたい。

# widgets(UIの部品 例:TextView、ImageView)がARで表示できるらしい
https://developers.google.com/ar/develop/java/sceneform/create-renderables#create_from_android_widgets

![Screenshot_1577032540.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409918/6f5e59b3-b466-aefe-ec75-11657ee1845f.png)

ここ。sceneformってなんぞやって話だけどこれできたらくっそ面白そうだと思ったので、
今回はTextViewをAR上に表示させるところまでやろうと思います。

## エミュレーターでARCoreアプリを動かすために
いやPixelとかGalaxyとか使いますからって方は飛ばしていいぞ。
~~てかARCore対応端末無いのにARアプリ作ろうとしてる人、どこからやる気が出てるんだ。~~

元記事を表示

【Android】Github Actions と Firebase App Distribution で特定のブランチ毎にベータ配布する

## GitHub Actions

[公式ページ](https://help.github.com/ja/actions/automating-your-workflow-with-github-actions/about-github-actions)

## Firebase App Distribution

[公式ページ](https://firebase.google.com/products/app-distribution/s)

### :computer:環境構築
****

#### 事前準備
`FIREBASE_APP_ID ` と `FIREBASE_TOKEN ` をGithub ActionsのSecret Tokenで使用するので準備しておく。

– **FIREBASE_APP_ID**

Android端末に外部センサーをつけてみた

[ひとり開発 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/solo-developer)、24日目の記事です。

少し前にAndroidに外部センサーをどうにかしてつけられないか?と思い、色々試行錯誤したらできちゃいました。
せっかくQiitaのアカウントもあるので今回はそれについて書きます。

#ざっくりと作ったものを紹介

Hack Day 2019に参加したレポ

![Image from iOS.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227999/337eb0fc-abe1-1061-d8c8-f40097deb0a6.jpeg)
# はじめに
2019/12/14-15に開催された、ヤフー株式会社様主催のハッカソン「[Hack Day 2019](https://hackday.jp/)」に3人([@iaoiui](https://qiita.com/iaoiui )、もう一人)で参加しました。エンジニアとして非常に刺激になったので、是非この時の記憶を残しておきたいと思い、記事を書かせていただきます。この記事を見て、少しでもハッカソンの~~辛さ~~楽しさが伝われば幸いです。

# 成果物
作成したものは「ARであそぼ」というAR×工作×パズルのアプリです。
![スライド1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227999/2d177e6c-c48d-e37c

元記事を表示

Huggingface の DistilBERT を使って、Android で NLP を!

こんにちは。@rheza_h です。
この記事はACCESS Advent Calendar 2019 22日目の記事です。

NLP は初めてですが、今回の記事は Huggingface が提供している DistilBERT を紹介し、それを使って、Android 上で動かしてみた記事です。
この記事で BERT については書かれていません。
BERT については[論文](https://arxiv.org/pdf/1810.04805.pdf) または @shotasakamoto のプレゼン資料が参考になれると思います。
[社内リンク](http://google.com/presentation/d/1w0GfWAbJkXSKK9fJ9giumZ5aq_GWZIN7j6X9TcQLQi0/edit#slide=id.p)

# Huggingface :hugging: とは?

Natural Language Processing (NLP – 自然言語処理) を中心に研究開発をやっています。
Huggingface は 2016 に Brooklyn, New York

元記事を表示

android javaでユーザからカメラ、写真フォルダへの許可を取る方法

#android javaでユーザからカメラ、写真フォルダへの許可を取る方法

import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.PermissionChecker;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

元記事を表示

利き酒アプリ開発(OSS公開)

# はじめに
どうも,日本酒好きなエンジニアです.
日本酒とKotlinによるAndroidアプリ開発の勉強のために,利き酒アプリを作りましたので,ソースコードを共有いたします.
課題は残るものの一通り動くようになっていますので,アプリ開発の参考にしていただいたり,改造して使っていただければ幸いです.

## アプリ画面

![top.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555313/8e8c589e-a611-f779-74ac-68f07eca8a1f.jpeg)
図1. トップ画面

![info.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555313/8cdc34d8-1be0-2346-03f7-01373e2970b3.jpeg)
図2. 酒情報(分類)

![review.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

SkyWayでiOS/Androidアプリを作るときの勘所

メリークリスマス :santa: (まだ早い)

# SkyWayでアプリを作ろう

iOS/AndroidのSDKが提供されているので作れはしますが、抑えるところ抑えておかないとユースケースによってはいくつか困るケースが出てきます。最近質問されたのでまとめておきます。

## 各種音声の入出力先のハンドリング

– Line
– Bluetooth
– デバイス

のハンドリングを自分でする必要があります。また抜き先に関しても同様。
iOSであれば`AVAudioSession`が握っている、Androidであれば`AudioDeviceInfo`でとれるので、必要な入力元と出力先の検知と切り替えは自前で実装しましょう。

この際にAndroidでは [isWiredHeadsetOn](https://developer.android.com/reference/android/media/AudioManager.html)のようなメソッドは非推奨。自前でハンドリングするためAudioSessionの管理には注意しましょう。

## バックグラウンドでの処理

Androidは

元記事を表示

OTHERカテゴリの最新記事