- 1. Androidアプリ開発での音声認識の権限で詰まった話
- 2. 【kotlin】超簡単なMVPを実装してみた、⑤recyclerviewとの連携
- 3. Kotlin Flow 勉強まとめ
- 4. Flutter doctorコマンドで「Android license status unknown.」が出る場合の解決法
- 5. 【Android】初心者向け シンプルなドラムロール式TimePickerサンプル
- 6. RecyclerViewのいつもの設定をXMLでスマートに設定する方法
- 7. Couchbase Lite機能解説:Androidアプリ開発におけるライブクエリ利用
- 8. 日付を比較してどれだけ前かを表示したい
- 9. Firebase Storageで処理がタイムアウトしないよー
- 10. 【Unity】UnityとAndroid SDK & NDK Toolsをインストールする時に「ダウンロードが失敗しました: Validation Failed」とエラーが出る
- 11. FirebaseとHerokuでエセAndroidフルスタック開発をした話
- 12. 【Flutter】in_app_purchaseのrestorePurchasesメソッドをAndroidで使った場合の注意点
- 13. 【Jetpack Compose】SwipeRefresh のプログレス表示を制御する際の注意点
- 14. 【Flutter】アラート(ダイアログ)のカスタムウィジェット作ったので共有しておきます
- 15. Jetpack Compose では同一方向にスクロール可能な Composable をネストできない
- 16. Flutterやーる(Windows10、Android)
- 17. RecyclerView【Android】【Kotlin】
- 18. ListAdapter Android Dev
- 19. UntiyでJDKがないとき
- 20. [Android]第二回Contextを掘り下げるの会
Androidアプリ開発での音声認識の権限で詰まった話
## 詰まったエラー
“`
System.err: java.lang.SecurityException: Not allowed to change Do Not Disturb state
“`
## 解決法
いろいろ調べた結果,海外サイトしかなかったが頑張って読んで解決した.
なぜかわからないが,サイレントモード系の権限が関係しているらしい.“`AndroidMainifest.xml
“`
で,下のやつをエラー発生箇所(僕の場合は,音声認識開始ボタンを押したところでエラーが発生したので,そこらへんの動作付近)に入力.“`
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (Buil
【kotlin】超簡単なMVPを実装してみた、⑤recyclerviewとの連携
# はじめに
今回はMVP(アーキテクチャ)に沿って、recyclerviewとの連携を実装していきたいと思います。# 実装内容
・追加ボタンを押した時にrecyclerviewにアイテム(✖︎マークのセル)を追加し表示する。
・✖︎マークのセルを押した際に押したセルを削除し、反映させる。![Screenshot_1644046349.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784089/a77055b6-5fb4-098d-7dcf-d3d395712231.png)
# 実装
**[レイアウト]**
①addButton
②recyclerView
![Screenshot_1644046349.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784089/244a451c-dd00-b6ce-4466-2d17ff52ef72.png)**[コード]**
**・準備**
①BasePresente
Kotlin Flow 勉強まとめ
#目次
1. Kotlin Flow とは
2. サンプルコード
3. まとめ##1. Kotlin Flow とは
**suspend fun**は、返す値が1つのみで、**Flow**は、複数の値を順に出力することができることが、大きな違いである。リアルタイムで、更新処理を行いたい場合に有効である。(UI の状態が変化したときに、変更を受け取る等)
また、**Flow**は、**suspend fun**を使うことで、メインスレッドを妨げることなく、ネットワークリクエストを行える。**Flow**は、大きく分けて3つの役割を持っています。
・**プロデューサ**‥非同期に出力する値の作成を行う
・**インターミディアリ**‥出力されたデータに変更を加えることができる
・**コンシューマ**‥得られた出力値を利用する“Repository“,“ViewModel“に当てはめると、出力値の作成を“Repository“で行い、使いやすい状態に変換する(mapで、リストの中身を置き換えるなど)、次に、得られた出力値を適切なスコープで呼び出し、UInへと反映さ
Flutter doctorコマンドで「Android license status unknown.」が出る場合の解決法
#はじめに
“`console
$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.0.3, on macOS 11.1 20C69 darwin-x64, locale ja-JP)
[!] Android toolchain – develop for Android devices (Android SDK version 30.0.2)
✗ Android license status unknown.
Run `flutter doctor –android-licenses` to accept the SDK licenses.
See https://flutter.dev/docs/get-started/install/macos#android-setup for more details
【Android】初心者向け シンプルなドラムロール式TimePickerサンプル
以前にドラムロール式のDatePickerのサンプルを紹介しました。
https://qiita.com/masayah/items/c979e42b6333f15bd930今回時刻入力が必要になったので時刻用のTimePickeを作成しました。サンプルとしてご紹介します。
私と同じようなAndroid開発初心者の方の参考になれば幸いです。#ドラムロール式TimePickerのイメージ
![無題2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546646/ac71483c-4482-ed64-5a95-ec89892ccba7.png)#時刻入力でドラムロール式の必要があるのか?
最近のAndroidの標準の時刻入力方式は私も気に入ってます。こういう↓やつですね。
![無題3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546646/80bf3402-0a53-e861-8494-43b2b018a13a
RecyclerViewのいつもの設定をXMLでスマートに設定する方法
#はじめに
歴史のあるプロジェクトでは大体LayoutManagerの設定などをkotlinで指定しているのをよく見かけます。
この辺りはxmlでも設定ができるので、紹介したいと思います。#LinearLayoutManagerを設定する場合
LinearLayoutManagerを設定する場合は以下をxmlに設定します。
“`
“`設定は以上です。
LinearLayoutMa
Couchbase Lite機能解説:Androidアプリ開発におけるライブクエリ利用
# はじめに
以前にこちらの記事で、ライブクエリ、つまりデータベースの変更を監視するクエリについて、概要を記しました。
https://qiita.com/yoshiyuki_kono/items/8da15296e9a979fbff3d
今回は、以下の公式チュートリアルの内容をベースに、Androidアプリ開発におけるライブクエリの利用について、具体的なコードを交えて解説します。
https://docs.couchbase.com/tutorials/university-lister/android.html
Couchbase Liteについては、[Couchbase Mobileアプリケーション開発へのロードマップ](https://qiita.com/yoshiyuki_kono/items/6a5bbad1b02196a25417)に記事をまとめている他、(これらの記事を元に構成した)以下の電子書籍を無償で頒布しています。
https://techbookfest.org/product/5074954942939136?productVariantID=50
日付を比較してどれだけ前かを表示したい
#初めに
今回、やりたいこととしては特定の日付と現在時刻を比較して、何秒前の物なのか等を出し分けるためのロジックです
組み分けとしては、0~59秒前、1~59分前、1~23時間前、1日前、それ以降は日付表示となっています###コード
適当な名前で作った`DataClass`内に下記のコードを書くことにより、その`DataClass`を利用する際は`toString()`とするだけで望んだ結果が帰ってきます“`kotlin:
override fun toString(): String {
val createdAt = at.toInstant().toEpochMilli()
val nowAt = ZonedDateTime.now().toInstant().toEpochMilli()
val diff = nowAt – createdAt
val sec = diff / 1000L
if (sec in 0..59) {
return “${sec}秒前”
}
val min = sec
Firebase Storageで処理がタイムアウトしないよー
##はじめに
Firebase Storage、アプリから便利に使ってますが、オフライン時に処理が全くタイムアウトしないことが発覚:joy:まあなんとかなったので、ご報告
##どうやる?
iOSは“`ObjC
FIRStorage *storage = [FIRStorage storage];
const int timeout=5; //5秒
storage.maxOperationRetryTime=timeout;
“`
これはdeleteするとき。Operation以外にUploadとDownloadもある。リトライだけど5秒で終わる。androidは
“`Java
FirebaseStorage storage = FirebaseStorage.getInstance();
final long timeoutMS = 5000; //5秒
storage.setMaxDownloadRetryTimeMillis(timeoutMS);
“`
なぜかdeleteはD
【Unity】UnityとAndroid SDK & NDK Toolsをインストールする時に「ダウンロードが失敗しました: Validation Failed」とエラーが出る
Uninty Hub から「Android SDK & NDK Tools」をモジュール追加しようとすると、
「ダウンロードが失敗しました: Validation Failed」とエラーが出て追加できず、
結構ハマってしまったのでその議事録です。# 結論
著者の環境では、ファイアウォールの設定で解決しました。コントロールパネル > システムとセキュリティ > Windowsファイアウォールによるアプリケーションの許可 > Unity Hub の項目をチェックして、「ドメイン / プライベート / パブリック」は環境に応じてチェック
再度、モジュールの追加するとインストールできました。
# 環境
– Windows10
– Unity Hub 3.0.1
– Unity 2020.3.27f1# エラー内容
UnityHubから、Unity 2020.3.27f1をインストールする時に、
「**Android SDK & NDK Tools**」にチェックをして、インストールしようとしました。![68747470733a2f2f71696974612d696d616
FirebaseとHerokuでエセAndroidフルスタック開発をした話
# まえがき
このたび、北海道札幌琴似工業高等学校 全日制 情報技術科を卒業することになりました。
今は学年末テストが終わって成績確定を待っている状況で、今後なにもなければ3/1日をもって卒業、進学することとなりました。弊校では三年時にすべての生徒が「課題研究」という名で、なにかしらものを作ります。
私の所属する班はAndroidアプリを作ることになりました。つまるところこの記事は、FirebaseとHerokuをバックエンドに持ったAndroidアプリを開発した話です。
主に成果物の概要と、振り返り、苦労をただただ書いていきます。技術的な内容は少ないかもしれませんが、Androidアプリ初学者の戯言と思っていただけると幸いです。# Contents
以下にこの記事内の記述内容について簡単にまとめます。
目次はハイパーリンクになっています。スマートフォンでご覧のかたや、Webブラウザのウィンドウサイズ等で右の目次が表示されていない方はご利用ください。– [作ったもの](#作ったもの)
– 実際の完成品について記述しています。
– [使った技術](#使った技術)
【Flutter】in_app_purchaseのrestorePurchasesメソッドをAndroidで使った場合の注意点
# はじめに
本記事は、Flutterの公式の課金ライブラリである [in_app_purchase](https://pub.dev/packages/in_app_purchase) の `restorePurchases` メソッドを、Androidで使った際のハマリポイントをご紹介します。# `restorePurchases` メソッドとは :mag:
いわゆる「復元処理」の際に使えるメソッドで、未消費の課金データを取得できます。
https://github.com/flutter/plugins/blob/a5b97ea9b37283167968755387e6ee4cc5f268d1/packages/in_app_purchase/in_app_purchase/lib/in_app_purchase.dart#L208
Android側の実装は下記のところで行っています。
https://github.com/flutter/plugins/blob/a5b97ea9b37283167968755387e6ee4cc5f268d1/packages/in
【Jetpack Compose】SwipeRefresh のプログレス表示を制御する際の注意点
Jetpack Compose にて`SwipeRefreshLayout`を実現したい場合、Accompanist の`SwipeRefresh`を使用するのが一般的です。
[Guide – Accompanist](https://google.github.io/accompanist/swiperefresh/)
以下は上記サイトに掲載されている例です。
“`kotlin
val viewModel: MyViewModel = viewModel()
val isRefreshing by viewModel.isRefreshing.collectAsState()SwipeRefresh(
state = rememberSwipeRefreshState(isRefreshing),
onRefresh = { viewModel.refresh() },
) {
LazyColumn {
items(30) { index ->
// TODO: list items
}
【Flutter】アラート(ダイアログ)のカスタムウィジェット作ったので共有しておきます
#アラート(ダイアログ)のカスタムクラス作ったので共有しておきます
Flutterモバイルのダイアログになります。
iOSとAndroidでネイティブっぽいダイアログが出したかったので
色々探した上、今後自分自身よく使うだろうからカスタムウィジェット作りました。
良かったら使ってください。フォントとかフォントサイズとかなるべく寄せてますが(主にiOS)
気に入らなければ適宜変更してください。参考にさせていただいた記事
https://dev.classmethod.jp/articles/flutter_platform_ui1/##Alertクラス
とりあえずクラス全文“`Dart:alert.dart
import ‘package:flutter/cupertino.dart’;
import ‘package:flutter/material.dart’;
import ‘dart:io’;
import ‘package:google_fonts/google_fonts.dart’;class AlertButton {
final String
Jetpack Compose では同一方向にスクロール可能な Composable をネストできない
Android において、同一方向にスクロール可能なコンテンツをネストしたいというのはよくある話です。
具体的には、縦スクロール可能な`ScrollView`の中に`ListView`を置くという形ですね。
例えば以下のように、コンテンツ一覧を表示する Composable`ListContents`を作成し、それを複数表示する Composable`MultipleLists`を作成したいとします。
“`kotlin
@Composable
fun MultipleLists(contents1: List, contents2: List ) {
Column(
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
) {
Text(text = “コンテンツ1”)
ListContents(contents = contents1)
Flutterやーる(Windows10、Android)
# はじめに
Flutterやっていくー# 開発環境
– Windows 10
– flutter# 実装
1.flutter(flutter_windows_2.8.1-stable.zip)のダウンロードhttps://storage.googleapis.com/flutter_infra_release/releases/stable/windows/flutter_windows_2.8.1-stable.zip
2.PATHを通す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/ae35663f-0f92-15d3-cb86-bf10b709d732.png)3.コマンドプロンプトを開く
~~~
C:\Users\good_>flutter doctor╔════════════════════════════════════════════════════════════════════════════╗
║
RecyclerView【Android】【Kotlin】
RecyclerViewの使い方を備忘録として残します
まずRecyclerViewはスケジュールアプリなどで使うようなデータセットを簡単に表示できるクラスでライブラリでもあります。
タスクの表などをリサイクルするので、複数あるタスクがスクロールをし画面の外になってもビューを消去せず画面にスクロールされた新しいタスクを表示し再利用します。
以下を実装します
・activity_main
activity_mainの中にRecyclerViewを実装・recycler_line.xml
RecyclerViewの1行部のレイアウトを作成・ViewHolder
recycler_line.xmlの1行分を保持する・RecyclerView.Adapter
1行分のデータをViewHolderに紐づける使い方
まずactivity_mainにRecyclerView実装します“`activity_main.xml
ListAdapter Android Dev
#目次
1. ListAdapterとは
2. サンプルコード
3. まとめ## 実装内容
##1. ListAdapterとは
“ListAdapter“‥**Recyclerview**を使用する際に,“ViewHolder“がどのように生成されるかを定義できるクラスで,コンストラクタの引数として**DIFF_UTIL**のオブジェクトを与えることできる.“ListAdapter“の“submitList(List)“を呼び出し,リストを渡しUIの要素として利用することができる.また,この時に渡したリストを, **DIFF_UTIL**が差分を求めることで,**notifydatasetchan
UntiyでJDKがないとき
ここにチェックいれていない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/63eb95ae-d9e6-0ac9-c47e-e3462bfd5b5e.png)参考
https://shibuya24.info/entry/jdk_not_found
[Android]第二回Contextを掘り下げるの会
#はじめに
前回は、ApplicationContextとActivityContextの違いについて掘り下げたので、今回はそもそもContextは何をしているのか?について掘り下げたいと思います。https://qiita.com/reo-androider/items/5cd82d02bd8de1ff14cc
#ドキュメントより
>Interface to global information about an application environment.
ドキュメント先輩のお言葉。
グローバル情報へのインターフェース的な意味があります。
ActivityもApplicationもContextを継承しているので、何となくわかったような気がする。#何をしているのか?
ApplicationContextとActivityContexgの二種類に分けてみていきます。###ApplicationContext
– Resourceへのアクセス
– Serviceを開始する
– Serviceをバインドする
– ブロードキャストを送信する
– ブロードキャストレシ