Android関連のことを調べてみた2020年09月13日

Android関連のことを調べてみた2020年09月13日

Kotlinの画面遷移

Android Kotlin画面遷移方法について調べてみた。

###Manifestへの追加

“`xml:AndroidManifest.xml

“`

###xml画面作成
デザインモードで作成した物をコード化すると以下になる。

“`xml:activity_main.xml

Raspberry Pi 4BにAndroid TV 10.0をインストール (LineageOS)

はじめに

近年、Android TVを搭載したTVが[多数発売されています](https://kakaku.com/kaden/lcd-tv/itemlist.aspx?pdf_Spec032=1)。
少し興味があっても、様々な理由で購入に踏み切れない方もいらっしゃるのではないでしょうか。
そんな方におすすめしたいのが、”Android TV on Raspberry Pi”の方法です!

そこそこお安くご家庭の環境に合わせたAndroid TVが手に入ります。
既存のテレビを簡単にAndroid TV化することもできますよね!

というわけで、今回は最新版Raspberry Pi4にAndroid TVをインストールするために、筆者が行った方法をご紹介します!

注意点

– 質問欄を通して可能な限りのサポートはしますが、故障の他、一切の事柄に対して筆者は責任を負いません。
– 商用利用できません。ROMイメージの一部に**表示-非営利-継承4.0国際ライセンス**が含まれています。
– 地上波放送・BS/CS放送は見られません。
– できること/できないことは作

元記事を表示

Android ボタンの共通化

フラグメントで共通ボタン記述。

フラグメント内のstartボタンでリスナーを記述。

“`kotlin:CommonButtonFragment.kt
override fun onStart(){
super.onStart()
btToday.setOnClickListener{onCommonButtonClick(it)}
btCreate.setOnClickListener{onCommonButtonClick(it)}
}
“`
共通ボタンファンクション

“`kotlin:CommonButtonFragment.kt
private fun onCommonButtonClick(view: View?){
if(view != null) {
if(activity != null) {
//login画面の場合
if (activity!!.localClassName == “Toda

元記事を表示

Cookpad LicenseToolsPluginの横スクロール対策

クックパッドのAndroid向けのライセンス管理プラグイン [cookpad / LicenseToolsPlugin](https://github.com/cookpad/LicenseToolsPlugin)
ライセンス表示ページ作る際にいつもお世話になってます!

今回はプラグインから出力されたHTMLで横スクロールされて困ってる人へ向けての対策。
※ 2020/03/19リリースの`v1.2.2`時点の対策になります

この問題はライセンスのURLが改行されずに行で表示されることが原因となっています。
[Wrap html links in licenses.html #2](https://github.com/cookpad/LicenseToolsPlugin/issues/2)

なのでURLを改行するように修正を行います。
Issuesを辿って旧プラグインのIssuesに行くと暫定対応の方法が書かれているのでそのとおりに対応すればOKです。
[Wrap html links in licenses.html css #74](https://github.com

元記事を表示

Inside Flutter Hooks

## 概要
Flutter Hooksを使う機会があり、すごい便利だなと思っていたのですが、
内部的にどんな風に実装されているのか掘り下げてみようかと思い、今回色々調べてみました。
(何か間違っていたりしたらコメントいただけると嬉しいです :bow: )

## Flutter Hooks とは?

[React hooks](https://ja.reactjs.org/docs/hooks-intro.html)をFlutterで実装したものになります。

作者は[Provider](https://github.com/rrousselGit/provider)等でおなじみのRemiさんです。

##

元記事を表示

Firebase Dynamic Links 入門

# Dynamic Links とは
[Dynamic Links](https://firebase.google.com/docs/dynamic-links?hl=ja) は、アプリのインストールの有無にかかわらず、複数のプラットフォームで機能するリンクです。iOS または Android で Dynamic Links を開くと、ネイティブアプリのリンク先のコンテンツに直接移動します。

# ユースケース
– **ウェブユーザーをアプリユーザーにする**
Dynamic Links を開いたユーザーの iOS デバイスまたは Android デバイスにアプリがインストールされていない場合にインストールを促し、インストール完了後にアプリを起動してリンクを開く。

– **SNS、メール、SMS でのキャンペーン**
どのプラットフォームでも機能するリンクを使ってプロモーションの特典を提供する。iOS、Android、ウェブブラウザのいずれであっても、アプリをインストール済みかどうかにかかわらず、既存のユーザーも見込みユーザーも特典を利用できる。

# Android アプリでD

元記事を表示

Compose by exampleの動画を見たメモ

# 概要
Jetpack Composeの実用的な使い方を知ることができる動画で、すごく色んな部分で面白かったです。

https://github.com/android/compose-samples にそれぞれのサンプルがあります。

## Theming

**Make the easy things easy and the hard things possible** というのを大きく語っていました。Colorからダークテーマ対応までは **Make the easy things easy** にあたるようです。

color、typography、shapeを定義して作る

“`kotlin
MaterialTheme(
colors = …
typography = …
shapes = …
) {
}
“`

### Color

Material color stytemのクラスで作る。

“`kotlin
val colors = Color

元記事を表示

PCに接続できない環境でもLogcatのログを取得したい時に使えるアプリ「Logcat Recorder」の紹介

# 背景

Androidアプリのテストで、Logcatに出力されたログを収集したい時、方法として

– Android StudioのLogcatを利用する
– 端末とPCをUSB接続するなどしておき、`adb logcat -v time > log.txt`コマンドを叩いておく

があると思います。
ですが、耐久試験で1日以上放置しないといけなかったり、PCの環境に不安がある場合に、上記の方法だとどうしても難しい場合もあります。
そんな時に使えるアプリ「[Logcat Recorder](https://apkpure.com/jp/logcat-recorder/com.namakerorin.neko)」を紹介したいと思います。

# アプリの概要

https://apkpure.com/jp/logcat-recorder/com.namakerorin.neko
からの引用です。

> PCに接続できないような環境下やlogを常時取得しておきたい局面などで重宝します。

>■概要
・logcat出力をSDカードなどのストレージに出力します (任意のパスに切り替え可能です

元記事を表示

【Android】VideoViewやExoPlayerを使って動画がうまく再生されない時は、動画形式を確認してみよう

# 背景

Androidで`VideoView`や`ExoPlayer`を使って動画再生機能を作ったはいいものの、なぜか動画がうまく再生されない。。
あのバージョンや端末だと問題なく再生できるのに、なぜかこのバージョンや端末だと再生がうまくいかない。
何故か黒みが出たり、表示が崩れたり、再生に失敗して何も表示されない。
そんなとき、ログを見て実装が怪しくないか疑うのもいいですが、もう一つ別のアプローチを紹介したいと思います。

# その動画、Androidプラットフォームでサポートされてる?

Androidでは全ての動画形式がサポートされているわけではありません。
例えばmovファイルなど、再生できない動画も存在します。
公式サイトでは以下のようなガイドラインが用意されています。

[サポートされているメディア形式  |  Android デベロッパー  |  Android Developers](https://developer.android.com/guide/topics/media/media-formats?hl=ja)

ガイドラインを確認して、そもそもその動画形

元記事を表示

Androidエミュレータが起動しない場合の解決法メモ

# どんな内容か?
Xamarinを利用していて、Androidの最近のVersionでテストする必要がありました。デバイスマネージャで新しいデバイスを追加したのですが、起動できずに困った話です。一応の解決方法が分かったのでメモしておくことにしました。同じ悩みを抱えた方の助けとなれば幸いです。全ての起動できない現象に一致する訳ではありません。

# 環境
OS:Windows10
開発環境:Visual Studio 2019 Community Version 16.7.3

# 現象
デバイスマネージャで、Andoird9.0(API28)のOSまでは起動するのですが、それ以上のAndroid10.0(API29)やAndroid11.0(API30)が起動できません。詳しく書くと、エミュレータのスマホ枠は表示されるのですが、1秒くらいですぐに消えてダウンしてしまう状況です。
image.pngavdmanagerを実行し「Exception in thread “main” java.lang.NoClassDefFoundError」が発生した場合の対処法

FlutterでAndroidの開発環境を構築する際、**`avdmanager`**をcliから実行すると下記のようなエラーが発生した際の備忘録です。

“`shell
$ ~/Library/Android/sdk/tools/bin/avdmanager list
Exception in thread “main” java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
at com.android.repository.api.SchemaModule$SchemaModuleVersion.(SchemaModule.java:156)
at com.android.repository.api.SchemaModule.(SchemaModule.java:75)
at com.android.sdklib.repository.AndroidSdkHandler.(AndroidSdkHandler.j

元記事を表示

【Android】XMLに1行追加でImageButtonにエフェクトを付加する

ImageButtonにおいて`android:background=”@null”`としてしまうと,タップ時のエフェクトが表示れません。
「imagebutton エフェクト」で検索すると割と手間がかかる方法がヒットするのですが,
別にエフェクトのデザインに拘らない場合,レイアウトファイルに1行追加するだけで簡単にimagebuttonにエフェクトを追加することができます。
ImageButtonの養素に以下を追加するだけです

“`xml
android:background=”?android:attr/selectableItemBackgroundBorderless”
“`
もし,背景を既に設定して変えたくない場合,foregroundも指定できます。

以下,サンプルです

“`xml

元記事を表示

AWS AmplifyでS3のBucket名を取得する [メモ]

## はじめに
基本は自分のための備忘録だが、誰かの参考になれば幸い。
なお、クイックハックです。正式なやり方ではないと思うのでご注意を。

## 動機
AWSのAmplifyを使ってモバイルアプリを作ることになったが、使いやすい半面、小回りがきかなそうで困ってる。

### すごいざっくりのAmplify概要
Amplifyは、CLIから簡単にバックエンドを構築できて、そのバックエンドへのアクセス方法をライブラリが隠蔽するので、開発者はその詳細を知らなくてもアクセス出来るというところがメリット。

また、Dev -> Prodの2Stageで開発するときに、アプリで使うバックエンドを下記のコマンドでDev用、Prod用に切り替えることが出来る。当然、開発者はバックエンドの詳細を知らなくてもよい。

“`
$ amplify env checkout
“`

### 困ってること
詳細が隠蔽されているので、バックエンドのリソース名が取れない(ようにみえる)。
例えば、バケット名を表示したいと思っても、のバケット名を取得する方法がない(ようにみえる)。

~~具体的に

元記事を表示

SPAJAMでAITalkを使ったのでメモ

仕事が忙しかったり、顔にできたできものがすごく腫れて寝込んだりしたので、もっと早く書こうと思ってたけど、SPAJAMが終わって2週間ほどたってしまった^^;

さて、SPAJAMでは協賛企業さんがツールなどを予選や本選の2日間のみ利用できるように開放してくれます。
今回、AITalkを使ったのですが、Androidで利用するサンプルもなかったので、メモとして残しておきます。
来年も使うかもしれないしね。
雑なメモですが、誰かの参考なったら、これ幸いかと。

Kotlinで書いていますが、まだKotlin勉強中なので、変な書き方をしているかもしれません。
ご了承くださいm(_ _)m

#AITalkとは?

オフィシャルの[AITalkとは](https://www.ai-j.jp/about/)を読んでいただくのが一番なんですが、音声合成エンジンですね。
ボカロのしゃべらす版といったところでしょうか?
感情表現もできることが特徴です。
Web APIを呼び出して音声をダウンロードするような感じです。

#Androidで使う
AITalkを使うには、HTTP通信を行う必要があります。

元記事を表示

android 10以降 外部ストレージの画像削除時の対応

# 概要
他のアプリが保存したメディアファイルを、アプリから削除しようとした際にAndroid 9では削除できましたが、Android 10では削除できませんでした。
Android 10(TargetSDK 29)以降では、アプリが保存した画像等のメディアファイル以外は直接削除できないようになっているようなのでその対応についてまとめてみました。
https://developer.android.com/training/data-storage/files/external-scoped?hl=ja

## Android 10でアプリからストレージ内の画像を削除する
Android 10でMediaStoreの画像や動画をcontentResolver.delete()で削除しようとするとRecoverableSecurityExceptionが発生する

“`kotlin:sample.kt
fun delete() {
contentResolver.delete(fileUri, null, null)
}
“`
実行するとRecoverableSecurit

元記事を表示

Android 11のPackage visibilityへの対応

Android11からはPackageManagerを使ってqueryIntentActivitiesなどで他のアプリがインストールされているか調べるのに制限がかかります。
targetSdkVersionを30にすると、デフォルトでは一部のシステムアプリしか結果が返ってきません、どのようなアプリを調べるのかの宣言が必要になります。

要するに以下の内容です。
https://developer.android.com/preview/privacy/package-visibility?hl=ja

宣言方法は2種類あります。
以下のように、調べたいパッケージ名を指定するか、

“`xml:AndroidManifest.xml

元記事を表示

RxJava2CallAdapterFactoryをaddしたRetrofit Clientで返り値Call型が指定されたAPI定義を実行するとどうなるか?

こんな感じでRetorfit Clientを作成しているコードがあるとする。

“`kotlin
val retrofitClient = Retrofit.Builder()
.baseUrl(url)
.client(okHttpClient)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
“`

`addCallAdapterFactory`で`RxJava2CallAdapter`を追加しているため、このクラインとでは次のようなObservable型を返すようなAPI定義を実行した際にレスポンスをObservableとして扱える。

“`kotlin
interface SmapleAPI {
@GET(“foo/bar”)
fun getSampleResponse(): Observable
}
“`

この時、次のCall型を返すようにAPI定義し`RxJava2CallAdapter`を追加したクライア

元記事を表示

Android, Kotlin: テストコードを書く

– Minimum SDK: API 23
– Android Studio 4.0.1
– Kotlin 1.4.0

以前、Androidのテストを、UnitTestにて実施しようとしました。
※[AndroidでのUnitTestざっくり入門](https://qiita.com/nozaki-sankosc/items/538fe9b2a13aa7403df6)

ですが、Realmが絡んだテストが実施できず、またRealmの実行を含んだオブジェクトのモック化もうまくいきませんでした。(元の処理が実行されてしまいました。)

なので、方針を変更しInstrumentedTest(androidTest)の方でテストケースを実施するようにします。

やりたいことは次のこととなります。

– 表示の確認
– 入力値の確認
– データベースに格納されているかの確認
– 画面遷移:次のActivityにIntentが渡されているかの確認

## 準備

Realmの準備はこちらを参照:[Android,KotlinでRealm](https://qiita.com/nozaki-san

元記事を表示

2. 【Android/Kotlin】ボタン追加

#はじめに
DreamHanksのMOONです。

前回はAndroid開発ツールのAndroid Studioをインストールしました。
https://qiita.com/DreamHanks/items/ad6e8002044dcca26bf7

今回はアプリの画面にボタンを追加し、そのボタンにイベント機能を追加してみます。

#Viewの概要
![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/708649/d8341add-1dc4-cf90-eb81-85b20929634f.png)
View オブジェクトは、通常は「ウィジェット」と呼ばれ、Button や TextView などの多数のサブクラスの 1 つです。ViewGroup オブジェクトは、通常は「レイアウト」と呼ばれ、LinearLayout や ConstraintLayout などの異なるレイアウト構造を提供する多数のタイプの 1 つです。

詳細な概要は、
https://developer.android.com/gui

元記事を表示

Android(ネイティブ)で開発とflutterで開発の比較

## はじめに
モバイルエンジニア歴2年の若手です。
この2年でAndroid開発とflutterでの開発の両方に携わることが出来たので、それを通して感じたことを書いていきます。
今回は比較にあたって、ポモドーロタイマーのアプリを作成いたしました。

## 仕様
– 初回起動時に25分(作業)のタイマーがセットされている
– 画面には開始ボタンと停止ボタンがある
– 以下のサイクルでタイマーが使用できる

1. スタートボタンを押すことでタイマーが開始される
1. タイマーの残りの時間が0秒になると5分(休憩)のタイマーがセットされる
1. スタートボタンを押すと休憩時間が開始される
1. タイマーの残りの時間が0秒になると25分(作業)のタイマーがセットされる
1. 項番1に戻る

– タイマー作動中に停止ボタンを押すと25分の作業時間にリセットされる

## アプリ画面
– Androidで開発した画面

  • OTHERカテゴリの最新記事