- 1. getPackageManagerでインストールアプリ一覧が表示されない(SDK30・Android11)
- 2. ConstraintLayoutの高級属性を使いましょう
- 3. AndroidスマホをNFCタグにかざして家電を操作する方法
- 4. 【Android】公式に記載されている Glide のセットアップ方法は間違っている
- 5. rooted+MagiskなAndroidのアップデート
- 6. TensorFlowとCameraXでリアルタイム物体検知Androidアプリ
- 7. 【Android/Kotlin】最小構成でLiveDataを使う
- 8. 【Flutter】 無駄なリビルドを防ぐたった1つの方法
- 9. 2021年、業務アプリ開発歴17年が初めてFlutter Firebase Dartを触りたくなった話
- 10. Flutter (Android) で、 任意のpluginをApplication.ktに読み込む
- 11. AndroidアプリにHMSのAnalytics KitとCrashlyticsを3ステップで導入する手順
- 12. BindingAdapterのすゝめ
- 13. 動的にリソースIDを取得する2つの方法
- 14. 【Flutter】build() でやってはいけない 3 つのこと
- 15. Play Billing Library 3.0でstatic responseな購入のテストをする
- 16. Android Studio +GitをProxy設定&Proxy設定解除
- 17. 今更だけど初DataBinding!
- 18. [Unity] Prime31(ios)でのandroidのビルドエラー
- 19. 【Android】スイッチボタンのつまみの画像をON/OFFで変更
- 20. EncryptedSharedPreferencesのところで落ちる件
getPackageManagerでインストールアプリ一覧が表示されない(SDK30・Android11)
これまでgetPackageManager()#getInstalledPackages()を用いれば簡単に端末内のインストールアプリ情報を取得することができました。
しかし、Android 11(SDK30)からは単に下記のようなコードを記載するだけではシステムアプリ情報しか取得できなくなりました。**例)デバイス内のインストールアプリをLog出力する**
“`MainActivity.java
PackageManager pm = getApplicationContext().getPackageManager();
ListappInfoList = pm.getInstalledPackages(0);
for(int i =0;i
ConstraintLayoutの高級属性を使いましょう
現在プロジェクトを新たに生成する時、ConstraintLayoutが自動で作られました。
今回は開発の実用例によって説明します。
###GuideLine
1. 補助線の方向を設置する ログイン画面でよく使われたレイアウトです。
android:orientation=”vertical”
layout_constraintGuide_begin 左側と上の距離
layout_constraintGuide_end 右側と下の距離
layout_constraintGuide_percent パーセント%で設定![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906922/5c9d5e34-aa9c-45c4-fc71-52dcf60c7ba1.png)
“`
AndroidスマホをNFCタグにかざして家電を操作する方法 iPhone(iOS13以降)ではショートカットを利用してNFCタグにスマホをかざして家電を操作する方法がありますが、Androidスマホでも同じことができないか色々調べて試してみようと思いました。
そこで今回はNature Remoを利用してNFCタグにAndroidスマホをかざして家電を操作する方法についてまとめました#準備するもの
・PC
・NFC対応Androidスマホ
・Nature Remo(旧版でもminiでもOK)
・NFCタグ(対応しているものをお使いください、以下は例です)
・Na
【Android】公式に記載されている Glide のセットアップ方法は間違っている
# あらすじ
[Glide](https://github.com/bumptech/glide)の README の「Download」を見ると、Gradle のセットアップ方法が以下のように記載されています。
“`app/build.gradle
dependencies {
implementation ‘com.github.bumptech.glide:glide:4.11.0’
annotationProcessor ‘com.github.bumptech.glide:compiler:4.11.0’
}
“``./gradlew build`コマンドでビルドをしていた時に、Glide で以下のような警告が出ていることに気付きました。
“`
app: ‘annotationProcessor’ dependencies won’t be recognized as kapt annotation processors. Please change the configuration name to ‘kapt’ for these artifact
rooted+MagiskなAndroidのアップデート
rooted+MagiskなAndroid端末にアップデートをあてるには、いくつか作業があります。
今回は下記前提条件のもとでAndroid端末にアプデをあてたいと思います。# ■前提条件
* bootloader unlock済かつmagiskを導入済
* Clockworkmod recovery等のカスタムRecoveryは**導入していない**
* Androidセキュリティアップデートを2020年12月5日から2021年1月5日へアップデート
* 端末はPixel 3 XL
* Androidは11(APIは30)
* Magiskは21.2# ■作業
## 1 必要なファイルの用意
すべて[Factory Images for Nexus and Pixel Devices](https://developers.google.com/android/images)で揃います。### (1)Full OTA Image(zip)
[Factory Images for Nexus and Pixel Devices](https://developers.goo
TensorFlowとCameraXでリアルタイム物体検知Androidアプリ
# 今回やること
`CameraX`と`Tensorflow lite`を使ってリアルタイムに物体検知するアプリをcameraXの画像解析ユースケースを使ってサクッと作っていきます。
(注: CameraXの実装は`1.0.0-rc01`のものです。)
GitHubリポジトリを今記事最下部に載せてますので適宜参照してください。
ちょっと長めなのでとりあえず試したい方はリポジトリを見てください。こんな感じのもの作っていきます↓
バウンディングボックスとスコアを表示するものです
# モデルの用意
物体検知に使用する訓練済みモデルを探してとってきます。
今回はTensorFlow Hub の[ssd_mobileNet_v1](https://tfhub.dev/tensorflow/lite-model/ssd_mobi
【Android/Kotlin】最小構成でLiveDataを使う
# 環境
– Mac
– AndroidStudio4.1
– Kotlin# LiveDataとは
データの変更をリアルタイムで検知して、それをトリガーとしてなんらかの処理を行う
`LiveData`に検知したいデータを格納し、
`Observer`に変更された時の処理を記述する# 結論
[ソースコード全文 – Github](https://github.com/yuki-kamikita/LiveDataSample)# コード解説
## 今回のコードの動き
### 事前準備
1. LiveDataを初期化
2. Observerを定義### 動かす
1. 背景をタップする
2. `LiveData`の中身を変更する
3. `Observer`が変更を検知し、`text_view`に`sampleLiveData`の値を入れる## コード
“`kotlin:MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceSta
【Flutter】 無駄なリビルドを防ぐたった1つの方法
Flutter では StatelessWidget や StatefulWidget(以下、Widget) の `build()` が頻繁に呼ばれる(リビルドされる)ことを、 [【Flutter】build() でやってはいけない 3 つのこと](https://qiita.com/chooyan_eng/items/976adeea8eed1b5ebad4) では説明しました。
`build()` が頻繁に呼ばれること自体は Flutter フレームワークとして想定通りの動作ですので、ここに「変な」処理を書かない限り リビルドが原因でパフォーマンスが低下するようなことは通常ありませんが、アプリの規模が大きくなり Widget の入れ子(以下「Widget ツリー」と呼びます)が深くなってくると少しずつ「リビルド範囲が大きすぎる」ためにパフォーマンスが落ちてくる場合があるのも事実です。
この記事では、 __UI の変化が必要ない Widget の無駄なリビルドを防いでパフォーマンスを改善する__ にはどうすれば良いのかを理解するために、 Flutter フレームワークがリビルドを
2021年、業務アプリ開発歴17年が初めてFlutter Firebase Dartを触りたくなった話
筆者のスペック:[Delphi](https://qiita.com/e99h2121/items/b19fe6130f318d3a187c) の人です。[業務アプリたるやみたいなことを普段は考えています。](https://qiita.com/e99h2121/items/40e7eea415faa53614c4)
– ERP業務アプリケーション開発17年
– 言語:Java, JavaScript (Delphi, COBOL, C++, SQL?, HTML?, CSS?, 趣味では色々
– フレームワーク?:Spring, jQuery,
– 他:Windows, UNIX全般, LINUX, データベースは何でもで3層構造を主に触って食ってきました。タイトルだけは今時風にしてみました。
以下 [Web制作を諦めた初心者が半年でアプリをリリースした話(Flutter)](https://qiita.com/naokiwakata/items/1c6d6f4095a02f727b7b) を読んで全く単語が頭に入ってこなかったのと、頭から入りたい質として「あーん?こいつら信
Flutter (Android) で、 任意のpluginをApplication.ktに読み込む
### やりたいこと
“`Application.kt
import io.flutter.app.FlutterApplication
import io.flutter.plugin.common.PluginRegistry
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback
import io.flutter.plugins.GeneratedPluginRegistrant
import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService
…
“`
みたいな、Application.kt のimportの部分を、任意のプラグインに対して定義したい### 解決策
“`Application.kt
import io.flutter.plugins.firebase.firestore.FlutterFirebaseFirestorePlugin
“`該当するパッケージのgithub
AndroidアプリにHMSのAnalytics KitとCrashlyticsを3ステップで導入する手順
# HMSのAnalytics KitとCrashlyticsについて
Androidアプリを分析したり、クラッシュの原因を解析したりするのに、グーグルのFirebaseがよく使われています。
ところが、実はファーウェイもFirebaseと同等なサービスを提供しています。そのサービスはAnalytics KitとAppGallery Connect Crashlyticsです。![image.jpg](https://communityfile-drcn.op.hicloud.com/FileServer/getFile/cmtyPub/011/111/111/0000000000011111111.20210104160205.25627302791581927492080425745287:50520104090940:2800:C868ACC93C9053743596EAEE309DCC0ADE42763CA0FD597F565180768EB39F13.png)
[HMS Analytics Kit](https://developer.huawei.com/consum
BindingAdapterのすゝめ
# 検証環境
この記事の内容は、以下の環境で検証しています。
* Java:open jdk 1.8.0_152
* Kotlin 1.3.61
* Android Studio 3.5.3
* CompileSdkVersion:29# はじめに
Jatpackに含まれているData Binding(以降、データバインディングと表記)を利用するとグルーコードは減少します。
更に、双方向バインディングを行うことにより、リアクティブなプログラミングが可能になります。しかし、データバインディングを深く理解するとより便利な記述ができるようになります。
この記事では、データバインディングの応用的な話であるBindingAdapterについて記述します。# データバインディングの基本動作
そもそも、データバインディングがどの様に動作しているか理解していなかったので、調べてみました。
[公式サイト](https://developer.android.com/topic/libraries/data-binding/binding-adapters?hl=ja)を今一度読み直してみる
動的にリソースIDを取得する2つの方法
静的に定義されたリソース ID をプログラム上から取得する方法です。
# getIdentifier を使う
Resources クラスで定義されている `getIdentifier` を使います。
[Resources \| Android Developers](https://developer.android.com/reference/android/content/res/Resources#getIdentifier(java.lang.String,%20java.lang.String,%20java.lang.String))
たとえば、`strings.xml` 内で、`prefix_01` `prefix_02` … `prefix_10` のように文字列が連番で定義されているとします。これをプログラム上から動的に得るには、
“`kotlin
for (i in 1..10) {
val id = resources.getIdentifier(“prefix_${i.toString().padStart(2, ‘0’)}”, “
【Flutter】build() でやってはいけない 3 つのこと
[Flutter で仕事したい人のための Widget 入門](https://qiita.com/chooyan_eng/items/6f15868cedcc85827eeb) で説明した通り、Flutter では基本的に `StatelessWidget` や `StatefulWidget` を継承したクラスで `build()` をオーバーライドし、そこに UI を構築する処理を書いていきます。 (厳密には、 StatefulWidget の場合は `State` クラスの `build()`)
例↓
“`dart:login_page.dart
class LoginPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(32),
child: Column(
mainAxisSize: MainAxisSize.max,
Play Billing Library 3.0でstatic responseな購入のテストをする
# 背景
Androidのアプリ内課金は2021年11月1日以降、BillingLibrary3.0以上を搭載していないとアプリのアップデートがリジェクトされるようなる。
https://android-developers.googleblog.com/2020/06/meet-google-play-billing-library.htmlその課金ライブラリの移行にあたり、AIDLまでの時代に出来ていた、Static Responseと呼ばれるもので実際には課金が行われないテストが出来るか確認したかった。
## Static Responseとは
アプリ内課金では、sku(課金アイテムID)を指定して、登録済の課金アイテムを購入しますが、以下のようなskuを指定することで固定のレスポンスを得ることが出来るというものです。
– `android.test.purchased`
– `android.test.canceled`
– `android.test.refunded`
– `android.test.item_unavailable`参考)https://st
Android Studio +GitをProxy設定&Proxy設定解除
## 出来事
昨今の大学生は全員サイバーテロや違法サイトに興味あると思っているのか知らないですが、
大学の学内でのHTTP通信は、すべて監視用のProxyサーバーを経由しなければなりません。僕は誰かを幸せにするAndroidアプリを開発したいだけなのに。。。。
3億番煎じかもしれませんが、今回は**Android開発をProxyを経由して行う方法**と**Proxy設定後の正しい解除の方法**を書いていきます。
## Android開発の場合
・Git
・Gradle
この2つのProxyの設定が主に必要であります。
Gitを使っていない人は、Gitはやらなくていいと思います。## Proxyの設定をするとき
##### 1. Android Studio のSettingでProxyをセッティングする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520701/63fdcbe6-8449-e6b3-5bf3-93cf6161ef22.png)こんな感じ
#####
今更だけど初DataBinding!
前からMVVMを意識した開発をしないとなあと思いつつ、、今まで来てしまったので勉強をかねて備忘録。
## やりたいこと
– ViewModelを使ってデータの操作がしたい!– レイアウトからもDataBindingしたい!
– Fragmentからも操作したい!
**完成イメージ**
![イメージ.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678917/85eeb853-8a2a-0562-6e10-39a08a5a65e5.gif)二つのタブを用意して、それぞれの画面でメッセージや背景色を変更させてます。
右下のFloatingActionButtonを押すとカウント処理が実行され、カウントがボタンに反映されるようにしました。(Snackbarでもカウント数を表示してますが、、邪魔でしたね:sweat:笑)
ViewModelを使ってるので、画面を回転しても数字は初期化されません!なんて便利なんでしょう。## さっそく
**1. Androidプロジェクトを新規作成**
ここ
[Unity] Prime31(ios)でのandroidのビルドエラー
# 状況
UnityにPrime13(iOS : Etcetera Plugin)を追加した。
iosでのビルドは問題なくできたが、androidのビルド時にエラーが起きた# エラー内容
> What went wrong:
>
> Execution failed for task ‘:launcher:processReleaseResources’.
>
> Android resource linking failed
>
> /Users/ユーザー名/Desktop/Unity/プロジェクト名/Temp/gradleOut/launcher/build/intermediates/merged_manifests/release/AndroidManifest.xml:52: AAPT: error: unexpected elementfound in . # 解決法
プロジェクトファイル内の `AndroidManifest.xml` のコードを変えた“`(変更前)Androi
【Android】スイッチボタンのつまみの画像をON/OFFで変更
まず、つまみ用の画像の設定
“`thumb_switch.xml
“`次に、背景設定
“`background_switch.xml
EncryptedSharedPreferencesのところで落ちる件
ただの備忘録なのであまり本質的でないです。
# 困ったこと
昨日まで動いていた開発中のAndroidアプリが、エミュレータ上で落ちる。#どこで落ちているか
ここ。つまりEncryptedSharedPreferencesを開くところ。“`kotlin
@Synchronized
fun getPreferences(): SharedPreferences {
val masterKey = MasterKey.Builder(getApplication(), MasterKey.DEFAULT_MASTER_KEY_ALIAS)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
return EncryptedSharedPreferences.create(getApplication(),
“my_app”,
masterKey,