- 1. AdMob リワード広告設定時に詰まった点
- 2. Android: ActivityResultContract を使って画像選択アプリで画像を複数選択する (EXTRA_ALLOW_MULTIPLE)
- 3. Flutterで個人アプリリリースをして、約1年間で得た知見をまとめる
- 4. Android Room における隣接リストから閉包テーブルへのMigration
- 5. botton,textviewなどのスタイルの変え方
- 6. Drive KitでHUAWEI Driveからファイルをダウンロードする方法
- 7. Drive KitでデータをファイルとしてHUAWEI Driveにアップロードする方法
- 8. Drive Kitで端末のファイルをHUAWEI Driveにファイルをアップロードする方法
- 9. Drive KitでHUAWEI Driveのファイルとフォルダを削除する方法
- 10. Drive KitでHUAWEI Driveでファイルとフォルダを検索する方法
- 11. Drive KitでHUAWEI Driveでフォルダを作る方法
- 12. Safe Argsのセットアップ&使い方(Kotlin)
- 13. Drive KitでHUAWEI Driveの容量を調べる方法
- 14. Drive KitでHUAWEI Driveに接続する方法
- 15. HUAWEI Driveについてと利用制限
- 16. [NavHostFragment] Activityから表示中Fragmentのインスタンスを取得する
- 17. COCOAにコントリビューターとして貢献しよう!~実践編~
- 18. AARファイルを依存関係に追加する方法(Kotlin)
- 19. Android: 最小のタップ領域サイズは 48dp (UIデザイン, Material Design)
- 20. アプリリリースしました 「Flexible Dice~シンプルで解析もできるダイスアプリ~」
AdMob リワード広告設定時に詰まった点
自作androidアプリ [Flexible Dice](https://play.google.com/store/apps/details?id=com.chelak.dice) にはリワード広告を実装しているのですが、その実装の際に詰まった点を備忘録的にメモしてみます。
AndroidKotlinAndroidStudioadMobアプリ開発Android: ActivityResultContract を使って画像選択アプリで画像を複数選択する (EXTRA_ALLOW_MULTIPLE)
ActivityResultContract を使って外部の画像選択アプリを起動し、ユーザーに複数の画像を選択させます。
単一の画像選択で構わない場合は以下の記事も参照してください。
https://qiita.com/irgaly/items/b9bbef4de73669113ddf
Android 標準の画像選択アプリではなく、Google Photos を起動して複数画像選択をしたい場合は以下の記事を参照してください。
https://qiita.com/irgaly/items/a1967f0fa4b505ab83e8
## 必要な権限
外部の画像選択アプリによって画像を選択し、その画像を読み取るためには **READ_EXTERNAL_STORAGE 権限は不要** です。
画像選択アプリが端末に保存されている画像を読み取る権限を取得しており、ユーザーが選択した画像は Intent 発行元のアプリが読み取れるパスとして返却されるためです。
## 前提
AndroidX や AndroidX Fragment が導入されている前提です。
## 実装
複数画
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
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) の場合。
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? = nullfun 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? = nullfun 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? = nullfun 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? = nullval 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? = nullfun 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)をリリースしました。