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

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

Flutterで個人アプリリリースをして、約1年間で得た知見をまとめる

# 目次
2020年10月に個人開発でFlutterを使ったスマホアプリをリリースしました。
そろそろリリースしてから1年経つので得た知見を簡単に纏めておきます。
誰かの役に立てば嬉しいです。

## リリースしたアプリ
![スクリーンショット 2021-08-23 22.41.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410187/8004d861-c243-612b-839a-5837e82aa05d.png)

アプリ名:**グルメマップ**
機能:**近くの飲食店をMap表示するアプリ**
利用技術:**Flutter**
リリース日:**2020年10月**
作ったきっかけ:**3秒くらいで近くのランチやディナー検索できるアプリが欲しかった**
利用API:
[Google Maps API](https://developers.google.com/maps/?hl=ja)
[Google Places API](https://developers.google.com/m

元記事を表示

Android Room における隣接リストから閉包テーブルへのMigration

隣接リストにて作成してしまった木構造のデータを、深さ付きの閉包テーブルにマイグレーションしたのでそのときの備忘録です。

そもそもの木構造の表現方法には触れず、あくまでMigrationの手順についてのみ記載しています。

# モチベーション

AndroidでTwitterAPI(Twitter4J)を利用したアプリを作っており、要件としてツイートとそれに連なるリプライをローカルに保持する必要がありました。
当初はあまり深く考えず、`Tweet`オブジェクトに[`Status#inReplyToStatusId`](https://developer.twitter.com/en/docs/twitter-api/v1/data-dictionary/object-model/tweet)プロパティが含まれていることから、ローカルに`previousId`としてこのIdを保持していました(後々めんどうになる予感はしていたが、当初は閉包テーブルを知らなかった)。

隣接リストでは、任意のツイートを含む、任意の深さの根~葉までの経路を取得することが困難であることが分かり、閉包テーブル

元記事を表示

botton,textviewなどのスタイルの変え方

## 方法
`drawable.xml`ファイルに使いたいスタイルを新規作成し、xmlの`android:background`に設定するだけ

## 例
自作androidアプリ [Flexible Dice](https://play.google.com/store/apps/details?id=com.chelak.dice) の場合。
</p

元記事を表示

Drive KitでHUAWEI Driveからファイルをダウンロードする方法

# HUAWEI Driveからのダウンロード手順
1. [HUAWEI Driveに接続する](https://qiita.com/Rei_2020/items/bb17a8fedb4849eaaa95)
2. [ファイルオブジェクトを取得する](https://qiita.com/Rei_2020/items/15f6bbc9f5d48c471a03)
3. HUAWEI Driveのダウンロードリクエストを実行する

注意点
1. ファイルサイズが20MB以下の場合、isDirectDownloadEnabledをtrueに設定できます。

サンプル

“`kotlin
private var drive: Drive? = null

fun load(filename: String, dest: File, isApplicationData: Boolean) {
getFile(filename, false, isApplicationData)?.let { file ->
download(file, dest

元記事を表示

Drive KitでデータをファイルとしてHUAWEI Driveにアップロードする方法

# HUAWEI Driveへのファイルアップロード手順
1. [HUAWEI Driveに接続する](https://qiita.com/Rei_2020/items/bb17a8fedb4849eaaa95)
2. 親フォルダのオブジェクトを[取得](https://qiita.com/Rei_2020/items/15f6bbc9f5d48c471a03)/[生成](https://qiita.com/Rei_2020/items/c2dde3245c8659d16047)する
3. com.huawei.cloud.services.drive.model.Fileオブジェクトを作る
4. ファイル名、mimeType、親フォルダを設定する
5. InputStreamを指定し、HUAWEI Driveのファイルアップロードリクエストを実行する

注意点
1. アップロード先にすでに同じファイル名のファイルが存在する場合、アップロード先のファイル名が勝手に{ファイル名}(次の番号).{拡張子}に置き換わります。

サンプル

“`kotlin
pr

元記事を表示

Drive Kitで端末のファイルをHUAWEI Driveにファイルをアップロードする方法

# HUAWEI Driveへのファイルアップロード手順
1. [HUAWEI Driveに接続する](https://qiita.com/Rei_2020/items/bb17a8fedb4849eaaa95)
2. 親フォルダのオブジェクトを[取得](https://qiita.com/Rei_2020/items/15f6bbc9f5d48c471a03)/[生成](https://qiita.com/Rei_2020/items/c2dde3245c8659d16047)する
3. com.huawei.cloud.services.drive.model.Fileオブジェクトを作る
4. ファイル名、mimeType、親フォルダを設定する
5. アップロード対象ファイルを指定し、HUAWEI Driveのファイルアップロードリクエストを実行する

注意点
1. ファイルサイズが20MB以下の場合、isDirectUploadEnabledをtrueにして、ダイレクトダウンロードが選べます。
2. ダイレクトダウンロードのサポート上限サイズは20MBですが、5MB

元記事を表示

Drive KitでHUAWEI Driveのファイルとフォルダを削除する方法

# HUAWEI Driveのファイルとフォルダの削除手順
1. [HUAWEI Driveに接続する](https://qiita.com/Rei_2020/items/bb17a8fedb4849eaaa95)
2. [ファイルまたはフォルダを検索し、対象のcom.huawei.cloud.services.drive.model.Fileを取得する](https://qiita.com/Rei_2020/items/15f6bbc9f5d48c471a03)
3. HUAWEI DriveにオブジェクトのIDを渡し、削除命令を実行する

サンプル

“`kotlin
private var drive: Drive? = null

fun deleteFile(target: com.huawei.cloud.services.drive.model.File) {
drive?.let { drive ->
val deleteFile = drive.files().delete(target.id)
deleteFi

元記事を表示

Drive KitでHUAWEI Driveでファイルとフォルダを検索する方法

# HUAWEI Driveのファイルとフォルダの検索手順
1. [HUAWEI Driveに接続する](https://qiita.com/Rei_2020/items/bb17a8fedb4849eaaa95)
2. 検索クエリを作成する
3. HUAWEI Driveに検索クエリを渡し、検索を実行する

注意点
1. 検索対象はファイルの場合、検索クエリに”mimeType != ‘application/vnd.huawei-apps.folder'”を追加する
2. 検索対象はフォルダの場合、検索クエリに”mimeType = ‘application/vnd.huawei-apps.folder'”を追加する
3. 検索対象はアプリケーションデータの場合、DriveRequestのcontainersに”applicationData”をセットする

サンプル

“`kotlin
private var drive: Drive? = null

fun getFile(fileName: String, isFolder: Boolean,

元記事を表示

Drive KitでHUAWEI Driveでフォルダを作る方法

# HUAWEI Driveのフォルダの種類
1. ユーザーに見える普通のフォルダ
2. ユーザーに見えないアプリケーションフォルダ(隠しフォルダ)

上記の2種類あります。

# HUAWEI Driveのフォルダの作成手順
1. [HUAWEI Driveに接続する](https://qiita.com/Rei_2020/items/bb17a8fedb4849eaaa95)
2. com.huawei.cloud.services.drive.model.Fileオブジェクトを生成する(フォルダはファイルの一種)
3. com.huawei.cloud.services.drive.model.FileオブジェクトをHUAWEI Driveに渡して、実行する

注意点
1. mimeTypeに”application/vnd.huawei-apps.folder”をセットする
2. アプリケーションフォルダの場合、親フォルダのパラメータに{“applicationData”}をセットする

サンプル

“`kotlin
private var dri

元記事を表示

Safe Argsのセットアップ&使い方(Kotlin)

## はじめに

Safe Argsのセットアップ方法と使い方を紹介します。

## 「Safe Args」とは?

Navigationで型安全に値を扱うGradleプラグインです。
型安全が保証されるため、ナビゲーションやデータの受け渡しでは __Safe Argsを使うことが推奨されています__ 。

## 環境

– OS:macOS Big Sur 11.5.2
– Android Studio:Arctic Fox | 2020.3.1
– Kotlin:1.5.21
– Gradle:7.0.2
– Gradle plugin:7.0.0
– Navigation:2.3.5

## セットアップ

### Navigationのセットアップ

Safe ArgsはNavigationのコンポーネントのため、Navigationのセットアップが必要です。
以下の記事を参考にセットアップしてください。
https://qiita.com/uhooi/items/ce3264fa2609c141c454

### Safe Argsのインストール

ルート直下の「build.

元記事を表示

Drive KitでHUAWEI Driveの容量を調べる方法

# HUAWEI Driveの容量を調べる手順

1. [HUAWEI Driveに接続する](https://qiita.com/Rei_2020/items/bb17a8fedb4849eaaa95)
2. HUAWEI Driveの情報を取得する
3. 取得した情報から、容量の項目を選ぶ

HUAWEI Driveの情報を取得するサンプル

“`kotlin
private var drive: Drive? = null

val about = drive?.about()?.get()?.setFields(“*”)?.execute()
“`

容量を取得するサンプル

“`kotlin
// ドライブ容量
val total = about.storageQuota.userCapacity
// 使用済み容量
val used = about.storageQuota.usedSpace
// ドライブ空き容量
val free = total – used
“`

# GitHub
HMS Drive Kit Demo : ht

元記事を表示

Drive KitでHUAWEI Driveに接続する方法

# HUAWEI Driveに接続する手順
1. HUAWEI IDでHUAWEIアカウントにログインする
2. DriveCredentialオブジェクトを生成する
3. Driveオブジェクトを生成する

# HUAWEIアカウントへのログイン
Account KitでHUAWEIアカウントにログインする場合、2つの方法があります。

1. Authorization Codeによるログイン
2. ID Tokenによるログイン

Authorization Codeを使う場合、Union Idは取得できますが、Access Tokenは取得できません。
ID Tokenを使えば、Union IdとAccess Tokenを取得できます。,

また、ログイン時にHUAWEI Driveのスコープを指定する必要があります。

“`kotlin
private var accountAuthService: AccountAuthService? = null

fun signInInit(context: Context) {
// HUAWEI Driveのアクセス権限

元記事を表示

HUAWEI Driveについてと利用制限

# HUAWEI Driveについて
HUAWEI DriveはファーウェイがHUAWEI IDユーザーに提供しているクラウドデータ保存サービスであり、次のような使い方があります。

1. 端末のファイルをHUAWEI Driveにアップロードする
2. HUAWEI Driveのファイルを端末にダウンロードする
3. アプリデータの同期・保存

# 利用制限
ほぼすべての地域で使えますが、日本ではまだ未提供です。

https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/support-regions-0000001050151041

# GitHub
HMS Drive Kit Demo : https://github.com/Rei2020GitHub/MyPublicProject/tree/master/DriveKitDemo

# 参考
* HMS:[https://developer.huawei.com/consumer/jp/](https://developer.huawe

元記事を表示

[NavHostFragment] Activityから表示中Fragmentのインスタンスを取得する

## 構造

Activity内のNavHostFragment内で画面遷移をしているアプリを想定します。

![Layout構造.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1830512/dbdfedbf-e8dd-fd01-95f6-d5690c5fa934.png)

### 使用例
Fragment2を表示中にActivity側からFragment2のインスタンスを取得したい時

## コード

“`activity_main.kt
val navHostFragment = supportFragmentManager.findFragmentById(R.id.navHostFragment)
val fragment = navHostFragment?.childFragmentManager?.primaryNavigationFragment
“`

“`activity_main.xml

元記事を表示

COCOAにコントリビューターとして貢献しよう!~実践編~

**この記事の内容は、政府IT室CIO補佐官からの了承を得て投稿しております。**

前回の内容は、GitHubでの貢献方法でしたが、今回は仮想デバイス上にてCOCOAをデプロイする方法について書きます。(Android中心となります)

コードを書くに当たっては、Xamarinの知識があることが望ましいです。

## 環境
Windows 10 Enterprise 21H1
(Home・PROでも下記の方法で実行できます)
Visual Studio Community 2019 v16.11.1
Build Tools for Visual Studio 2019 v16.11.1
Android SDK 29
USB デバッグで利用した端末→Galaxy S10
(不足があれば追記します)

## Visual Studio 関連のインストール
まずは、Xamarin等を利用できるようにするためにBuild Toolsをインストールします。
[ここ](https://visualstudio.microsoft.com/ja/downloads/)から下の方にある[Visua

元記事を表示

AARファイルを依存関係に追加する方法(Kotlin)

## はじめに

AAR形式のライブラリをAndroidアプリのプロジェクトに追加する方法を紹介します。

## 「AAR」とは?

「__A__ndroid __AR__chive」の略で、Androidライブラリのことです。

構造上はAndroidアプリモジュールと同じく、ソースコードやリソースファイル、Androidマニフェストなどを含めることができます。
ただコンパイルすると、端末で実行できるAPKファイルではなく、Androidアプリモジュールの依存関係として使えるAARファイルになります。

たとえるならば、WindowsのEXEに対するDLLのようなものです。

JAR形式と比較して、リソースファイルやAndroidマニフェストを含められる点が異なります。

## 環境

– OS:macOS Big Sur 11.5.2
– Android Studio:Arctic Fox | 2020.3.1
– Kotlin:1.5.21
– Gradle:7.0.2
– Gradle plugin:7.0.0

## AARファイルの追加

### AARファイルの格納

A

元記事を表示

Android: 最小のタップ領域サイズは 48dp (UIデザイン, Material Design)

マテリアルデザイン、および Android アプリのデザインには、最適なタップ領域のサイズ (Touch targets) が定義されています。

アプリの実装をするときにはこの最小タップ領域を守って対応しましょう。デザインの段階からこのタップ領域を意識する必要があります。

## 結論

推奨される最小のタップ領域のサイズは 48dp です。

アイコンやボタンの見た目のサイズが 48dp より小さくデザインされることは構いませんが、タップ領域は 48dp となるように実装時に拡張します。

48dp のタップ領域を確保できない場合は最低でも 32dp のサイズを確保します。これよりも小さなタップ領域の UI は実装してはいけません。

## 説明

スマートフォンやタブレットなどのタッチ操作の UI では、タップ領域が小さいボタンはタップが難しくユーザーのストレスとなります。

マテリアルデザインの Accessibility の項目で最小のタップ領域サイズとして 48dp が推奨されています。

見た目のサイズが 48dp より小さくデザインされることは構いませんが、デザインの段

元記事を表示

アプリリリースしました 「Flexible Dice~シンプルで解析もできるダイスアプリ~」

play storeにて、アプリ
[Flexible Dice](https://play.google.com/store/apps/details?id=com.chelak.dice)をリリースしました。

Google Play で手に入れよう

[Android × 株] ヒートマップを作る (ツリーマップ)

S&P500などでよく見られるヒートマップ

業務で使用するにあたり、実装方法を調べたが日本語の記事どころか英語の記事もほとんどなかったので、実装方法をなるべく分かりやすく書いていきます。
ライブラリは使いません。
kotlinを用いて実装します。

## まずは完成形

Screenshot_20210821-142541.png

## 超ざっくりと実装の流れを説明

* 株価データの作成
* 株価データも基に座標を計算
* 座標データを元にCanvasで描画

## 実装

### まずは株価データ用のデータクラスを作成します

“`kotlin:StockData
// 株価データ
data class StockData(
// 運用額
var amount:Double,

元記事を表示

Chromebook IdeaPad duet セットアップ 備忘録

Chromebookが使ってみたくてLenoveのIdeaPad duetを購入。
古くなったAndroid Table (Nexus9)の代わり。メインのユースケースは電子書籍の閲覧。サブはAndroidアプリ開発時のデバッグ用実機。
ChromebookではLinuxも動くようなので、出先での開発マシンとしての用途も試してみたい。VSCodeから開発機に接続してコーディング、デバッグ。

インストールやセットアップした内容の備忘録。随時追記。

# 電子書籍アプリ
2021.08.21
Androidタブレットのときと同じようにGoogle Play ストアからインストール。
Chromebookへのインストールに対応していないものある。

|アプリ名|Chromebookへのインストール|見開きページ表示|
|—|—|—|
|Kindle|○|○|
|紀伊国屋Kinoppy|○|○|
|Reader by Sony|×|-|
|DMMブックス|○|○|
|ヤンジャン!|○|○|
|ジャンプ+|○|○|

# Linux
chromebookにLinuxをインストールす

元記事を表示

OTHERカテゴリの最新記事