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

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

Android ナビゲーションバー透過

“`xml:app/res/values/themers/themes.xml
@android:color/transparent
true
true
“`
“`kotlin:MyActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
window.setFlags(
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.

元記事を表示

AndroidStudioでメモリ容量が足りないときの対処法

#AndroidStudioでメモリ容量が足りないときの対処法

###筆者がAndroidStudioでアプリを作成しているときに、AndroidStudio側から「メモリの容量が少なくなっている」との指摘がありました。
そのときに作っていたアプリですが、変数の数が非常に多いアプリだったので、作業中に打ち込んだコードの読み込み時間が長くなってしまって、効率よく作業を行うことができなくなってしまいました。
原因を調べてみると、改善策がいくつか見つかりましたが、その中で実際に行ったら読み込み時間が改善されて、最も簡単だった方法を載せます。

AndroidStudio起動時の「Welcome to Android Studio」ダイアログ右下の「Configure」をクリックして、「Preferences」を選択する。
![2021-03-21_03.11.14_Image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794916/25a78ec0-7e17-7c09-61ce-997c407bd636

元記事を表示

カスタムViewを作る時、onMeasureをどのように実装すべきか

カスタムViewを実装するとき、onMeasureを実装していますか?
別に何もしなくても使えるから何もしてない、って人も多いでしょう。私もそうです。
しかし、Viewの種類にもよりますが、wrap_contentが適切に動作しない場合がありますので、どのように実装すべきかを整理してみます。

# onMeasureとはどういうメソッドか?

`onMeasure`というメソッドは親となるViewGroupが子Viewの大きさを決めるためにコールします。(より正確には子Viewのmeasureをコールし、その中で`onMeasure`がコールされます)
子Viewは`onMeasure`がコールされると、引数で渡されたMeasureSpecの値を元に、自身のViewの大きさを決めます。
戻り値を返すのではなく、onMeasureの中で`setMeasuredWidth`/`setMeasuredHeight`で自身の大きさを設定しておき、親Viewは`getMeasuredWidth`/`getMeasuredHeight`で子Viewが決めた大きさを参照します。

なお、`setMe

元記事を表示

ActivityResultContracts.RequestMultiplePermissions チートシート

最近はパーミッション関連の処理が随分と簡潔に書けるようになったのは嬉しいのだけれども、なにが困るってJavaで書かなければならない時に少し混乱することがあるのでチートシートとして :scroll:

– [ActivityResultContracts.RequestMultiplePermissions  |  Android Developers](https://developer.android.com/reference/androidx/activity/result/contract/ActivityResultContracts.RequestMultiplePermissions)
– [Getting a result from an activity  \|  Android Developers](https://developer.android.com/training/basics/intents/result)

## Java

“`java
private final ActivityResultLauncher reque

元記事を表示

GestureDetectorを用いたドラッグ&ドロップの実装【Flutter】

Flutterでウィジェットのドラッグ&ドロップを実装するには通常、Draggableウィジェットでラップすると実現できる。
だが、例えば「グリッド線に沿ってドラッグ」などのギミックを作りたいときは不向きなのではないか?と思った。
(もしかするとDraggableでもできるかもしれないけど!わからん!)

そうして2日間__GestureDetector__を利用したドラッグ&ドロップの方法を模索していたが、苦戦。
最終的にStack Overflowに質問をしてみたところ、秒速で解決したので、日本語でまとめておく。

ちなみにStack Overflowの記事はこちら。

https://stackoverflow.com/questions/66719501/why-is-the-origin-of-the-widget-constantly-at-top-left-when-i-use-transform-tran

#コード

“`dart
import ‘package:flutter/material.dart’;

class DragButton extends St

元記事を表示

MIT App Inventor で試しに作った「ボタンを押したら音声合成でしゃべる Androidアプリ」を Kotlin で作ってみた

## はじめに
以前、このような記事を書いたのですが、これの Kotlin版です。

●MIT App Inventor で試しに作った「ボタンを押したら音声合成でしゃべる Androidアプリ」を Java で作ってみた – Qiita
 https://qiita.com/youtoy/items/a0c26a3b8a671a2bb707#%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E5%85%A8%E4%BD%93

上記の「MIT App Inventor で試しに作ったアプリ」の話は以下で書いています。

●ビジュアルプログラミングで Androidアプリ開発ができる「MIT App Inventor」を試す(ボタンを押したら音声でしゃべるアプリを作る) – Qiita
 https://qiita.com/youtoy/items/93f7c786ff9d664d3032

## 参考情報
今回の内容は、以下を見つつ実装しました。

●Kotlinで合成音声を出力するアプリを作成[Android] | トモブ

元記事を表示

VLC for Androidのメイン画面の解析

# はじめに

VLC for Androidのメイン画面を解析する。

# 各種リンク

[アプリ](https://play.google.com/store/apps/details?id=org.videolan.vlc&hl=ja&gl=US)
[GitHub](https://github.com/videolan/vlc-android)
[公式サイト](https://www.videolan.org/index.ja.html)

# MainActivityのスクリーンショット

![IMG_0801.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39706/ec047221-ecae-7636-4ab1-13d19924d2ad.jpeg)

# メイン画面の表現するクラス

– MainActivity:アクティビィティ
– Navigator:下のタブの処理部分
– AudioBrowserFragment:音楽関係のブラウズ画面
– MainBrowserFragment

元記事を表示

VLC for AndroidのSingletonHolderについて

# はじめに
VLC for Androidのリポジトリ周りのソースを見ているとSingletonHolderというクラスを見つけたので調べてみた。

# 各種リンク

[アプリ](https://play.google.com/store/apps/details?id=org.videolan.vlc&hl=ja&gl=US)
[GitHub](https://github.com/videolan/vlc-android)
[公式サイト](https://www.videolan.org/index.ja.html)

# ソースコード

↓。コンストラクで生成するクロージャを渡して、初回アクセス時はそれを使ってインスタンスを生成して渡すようにしているのがポイント。後はスレッドセーフを保証。

“`
open class SingletonHolder(creator: (A) -> T) {
private var creator: ((A) -> T)? = creator
@Volatile var instance: T? = nul

元記事を表示

macストレージ整理

#1. はじめに
私はandroidアプリとiOSアプリの開発に携わってます。
複数の開発アプリがあるため、android studioとXcodeのプロジェクトをたくさん開いたり、たくさんのapkやipaファイルを生成しているようなローカル環境です。

その結果、ストレージの容量が無くなり易くすぐに警告がでます・・・。
色々な方法で不要ファイルを削除してきたのですが、
結果、私の環境で実施している効果的なストレージ整理方法を記載します。

#2. 環境
MacBook Pro (256GB)
macOS Catalina
Xcode12.2
android studio3.4

#3. XcodeのArchiveを消す

Xcodeのメニュー
Window < Organizer を開く。 不要なArchiveを選択し、二本指でタップしDelete Archiveを選択 Archive作るたびに溜まっていくので、リリース後3バージョン前くらいまで残してあとは消しています。 ※OrganizerからdSYMファイルを取得している場合は、Archive消す前に確認。 #4. D

元記事を表示

検証のためにカスタムROMをスマホに入れるサマリ

開発をやっていると、Androidバージョンによる動作の違いなども見たくなる。
エミュレータでは見えないようなトラブルが合ったりするので、非常に大変。

星の数ほど機種があるAndroid、全機種を持つのは不可能。
ただ全バージョンとまでは行かなくても、
ある程度自由にバージョンは変えられると開発時の検証になったりするので、
非常に助かる。

ということで、カスタムROMを使ってみようと思った。
(Root化はやってません。)

#OEMロックを解除する
これに関しては機種によって違うから、ググったほうがいいです。
自分が持っている端末だと、機種のホームページ(中国のサイト)に行き、
ユーザ登録をし、解除用のコードか解除用ファイルをもらったような…(数年前にやったのでうろ覚え。

#ドライバを用意する
Windows10での方法。Macは持ってないからわからんです。

1.Android ADB Interface:起動時のADBコマンドを受け付けてくれる。
2.Android Bootloader Interface:Fastbootモードで接続した際にコマンドを受け付けさせるため

元記事を表示

NdkBuildするC/C++コードにdefineマクロの値をProductFlavorで自動的に渡す

# 前提
cocos2dライブラリを使った結構古めのプロジェクトに、Product Flavor対応をしました。
が、一部C++のコードの中にもFlavorに依存して変えたい部分があり、対応方法を探しました。

条件としては以下があります。

– cocos2d (version3.17.2)
– かなり古いプロジェクトで上げることが出来ない
– NDKのビルドには`ndkBuild`を使う
– `cmake`ではなく、`ndkBuild`です

また、筆者はC/C++経験は長かったものの、既に離れて10年経過しており、そもそもmakeファイルはちゃんと書いたことがない(IDEに頼ってビルドしてきた)人間です。
その辺しっかり分かっている方には「今更何を」感があるかも知れませんが、ご容赦下さい。

# 現状

## C++コード
“`Foo.cpp
#define SAMPE_ID=xxxxx

#if SAMMPLE_ID==xxxx
// ID=xxxxの時のコード
#elif SMAPLE_ID=yyyy
// ID=yyyyの時のコード
#elif SAMPLE_I

元記事を表示

デバッグ署名のAPKファイルに署名したら警告が出た

デバッグ署名のAPKファイルに本番用の署名をしようとしたところ、結構な数の警告が出た

“`
apksigner sign –ks release.jks app.apk

Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
Number of signers: 1

WARNING: META-INF/android.support.design_material.version not protected by signature. Unauthorized modifications to this JAR entry will not be detected. Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.appcompat_appcompat.version not protected by signat

元記事を表示

UnityPlayerActivity

●Unityプラグインは複数の方法がある(この糞仕様を整理してから株式上場しろよUnityめ)

(1)[UnityPlayerActivityファイルを拡張する](https://docs.unity3d.com/ja/current/Manual/AndroidUnityPlayerActivity.html)
UnityPlayerActivity.javaを使ってUnityプラグインを作る。
準備:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/32c232f6-6226-7f89-03a8-ec89472558d2.png)

UnityPlayerActivity.java/classes.jarはUnityExportしたProjectにもある。

# [Unity向けAndroidネイティブプラグインの作り方](https://gaprot.jp/2020/03/30/unity-android-native-plugin/)

build.gradl

元記事を表示

React NativeでIntegrated Component Test

# Integrated Component Testとは

外部サービス(Web API等)とIntegrationされたUI Componentに着目し、テストすることです。
(どこかに定義があるわけではなく、僕が勝手に呼んでいる名前です。)

[React Native公式でTestに関する説明](https://reactnative.dev/docs/testing-overview)があります。その中ではEnd-to-End Testsに分類されると思いますが、
ユーザシナリオに基づいてテストはしません。IntegrateされたComponentに着目し、テストを分割、実行していきます。

# なぜ、Integrated Component Testしたいか

理由は以下の通りです。

## 1. デグレチェック/リファクタリングするためのテストがほしい

React NativeでAndroidアプリを開発しています。
そこそこ機能が増えてきて、
コミットする度にデグレしてないか気になるし、
自信をもってどんどんリファクタリングしていきたい。
テストがほしいと思いました

元記事を表示

Bluetooth SPP(無線シリアル通信)でExcel連携しリアルタイムに姿勢情報をグラフ描画する

## はじめに
リコーの @KA-2 です。

弊社では[RICOH THETA](https://theta360.com/ja/)という全周囲360度撮れるカメラを出しています。
RICOH THETA VRICOH THETA Z1は、OSにAndroidを採用しています。Androidアプリを作る感覚でTHETAをカスタマイズすることもでき、そのカスタマイズ機能を「プラグイン」と呼んでいます(詳細は本記事の末尾を参照)。

[Bluetooth AudioデバイスからTHETAを操る](https://qiita.com/mShiiina/items/4b9f74625deeb43763e9)」や「[THETAプラグインで複数のSwitchBot温湿度計と連携する](https://qiita.com/KA-2/items/66222ca713c7ab82bd32)」の記事でも紹介している通り、2020年6月17日のファームウェアアップデートにてBluetooth Classic機器連携が解禁されています

元記事を表示

android:gravityとandroid:layout_gravityの違い

# `android:layout_gravity`

`android:layout_gravity`は「**レイアウト内での位置**」を指定するときに使います。

レイアウト内の各ウィジェット(レイアウト)に対して、個別に設定していきます。

– 親レイアウト(水色背景) -> `LinearLayout`
– Button01 -> `android:layout_gravity=”end”`(`LinearLayout`の右に配置)
– Button02 -> `android:gravity=”end”`(テキストが右に移動(後述))
– Text001 -> `android:layout_gravity=”end”`(`android:layout_width=”match_parent”`で横幅いっぱいになっているので、変化なし)
– Text002 -> `android:layout_gravity=”end”`(`LinearLayout`の右に配置)
– 子レイアウト(白背景) -> `android:layout_gravity=”center”`(`Li

元記事を表示

Flutterを2ヶ月独学して初めて作ったAndroidアプリとつまづいた点

[モバイルアプリ開発は、Flutter一択なのか?\-2021版\- \- Qiita](https://qiita.com/tetsukick/items/ed9306276942c34b3575)という記事をきっかけに作ったAndroidアプリとつまづいた点について書いていきます。
# どんなアプリ?
|トップページ|詳細画面|
|—|—|
|![main_japanese_width500.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49529/bfcb6d8b-3040-536b-606d-53282e5f0a5a.png)|![detail_japanese_width500.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49529/bd92af70-076f-5d2f-269e-96f5c0ed2314.png)|

そろそろ散髪に行かないと……今まで何日ぐらいの間隔で行ってたっけ?
オナ禁してる

元記事を表示

herokuを定期的に自動deployして、ペットの様子を監視できるLINE botを作った

# はじめに
義姉夫婦が旅行に行く間、ウサギ(そらちゃん)を預かることになった。
旅行中もお義姉さんがそらちゃんを近くに感じられるように、
メッセージを送ったら、そらちゃんの現在の様子を確認できるbotを作った。

# こんな人向け
– LINEmessagingAPIを使って開発したい人
– LINEmessagingAPIとHerokuを連携してみたい人
– line-bot-sdk-pythonを使用して開発をしてみたい人

# 様相技術
– Python
– line-bot-sdk-python
– heroku
– macOS
– Android
– Selenium

# 方法
だいたいこんな感じ
![udsuds.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/6989bbbd-399d-a189-3457-e6293decee9c.png)

1. droidcamで兎を常時撮影
2. 5分毎に映像のスクショを撮影
3. Herokuにdeploy
4. 義姉がメッセージ

元記事を表示

[Android] Jetpack ViewBinding

Android Studio 4.1.2(windows版) で動作検証してます

ViewBindingを採用することで各コントロールをfindViewById()で呼び出さなくてもよくなりました
Android Developerの説明にある通りnullや型の安全性があるので積極採用する流れになると思います
※ActivityやFragmentでコントロールのIDに重複が無いように定義する必要があります

ViewBindingはAndroid Developerの説明で十分理解ができるかとは思いますが軽く説明してみます

Android DeveloperのViewBindingの説明は以下です

https://developer.android.com/topic/libraries/view-binding?hl=ja#java

## ViewBindingを使用するための設定
build.gradleに以下を追加します
ViewBindingを有効にするとBindingクラスが自動生成されます

“`build.gradle
android {
viewBin

元記事を表示

[Android] ボタンイベントのベスト実装パターンを模索

Android Studio 4.1.2(windows版) で動作検証してます
Javaでの実装中心の話となってます

Androidでボタンイベントを実装する方法はいくつかあります
みなさまはどの実装パターンを採用しているでしょうか?
すでにいろいろな方が同じような内容をまとめてくれていますが
実装に迷っている方もいるかもしれませんのであえてこちらでまとめています

Android DeveloperのButtonの説明は以下です

https://developer.android.com/guide/topics/ui/controls/button?hl=ja

## findViewById()でボタンを取得し直接setOnClickListener()で実装(匿名クラスで実装)
Activity/Fragmentで実装方法がほぼ同じなため
onCreate()あたりで以下のような実装をするパターンが多いのではないでしょうか?
私も脳死状態でよくこのパターンをコピペで実装してしまってます

“`Java:Java
findViewById(R.id.button).set

元記事を表示

OTHERカテゴリの最新記事