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

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

LocationManagerでAbstractMethodErrorが発生する件

現在、Androidで位置情報を取得する方法としては、[FusedLocationProviderClient](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderClient)を使用するのが一般的かと思いますが、一部のGMSの使えない環境も考慮してLocationManagerを使用する場合もあるかと思います。このLocationManagerでAbstractMethodErrorが発生するという現象に遭遇したので書いておきます。

# 何が起こるのか

パーミッションの取得とか諸々置いておいて、位置情報を取得しようとするとLocationManagerのインスタンスを取得して、requestLocationUpdatesにパラメータ付きでLocationListenerを登録します。
位置情報が取得できればonLocationChangedがコールされるので、ここでlocationを使ってごにょごにょします。

“`kotlin

元記事を表示

QiChat MANIAX(2) ヘッダのキーワードを網羅する??

#はじめに
今回はQiChat MANIAXの続編です!ヘッダのキーワードについて、詳しく見ていきましょう?‍??‍?

#conceptで同類を定義する???

conceptは、リストの単語とフレーズを定義するものです。下記のように使います↓

“`
concept:(name) [word1 word2 “word3 word4”]
“`

* word1とword2は個々に独立した単語
* word3とword4は複数の単語によるフレーズ。間に合うスペースのある単語を一つのフレーズとして扱う場合は、ダブルコーテーション(“)でくくってください
* nameはリストにつけるコンセプト名。コンセプトを使用するときに使います

⚠️注意
フレーズとは文章ではなく単語の集まりであり、句読点は自動的に排除されます。
コンセプトはどの単語でもglobalであり、異なるTopicでも使用可能です?

以下は使用例と実行例です。

“`
topic: ~introduction ()

concept:(greetings) ^rand[おはよう スラマッパギ “許して ヒヤシンス”]

元記事を表示

QiChat MANIAX(1) Topicファイルのルールについてイントロ編

#はじめに
前回のあとがきでも書きましたが、今回からはPepper SDK入門とは別に、QiChat MANIAXとしてTopicファイルのルールを詳述していきます?

さて、[Pepper SDK入門(24)](https://qiita.com/kskrin/items/1ad470634d8b36cb1f5d)で触れたように、Topicファイルには先頭にファイルの名前を記述するなどのルールがありました。例としては次のようなものです。

“`
topic: ~introduction ()

u:(ソルトちゃんこんにちは) ぼくPepperですけど
“`
今回はQiChat MANIAXのイントロダクションとして、このTopicファイルのルールの概要を見ていきます⛵️

#ルール事始め〜郷に入った場合の郷を知る〜
ここで言うルールとは、ユーザー入力とPepperの返答を関連づけるものです。
区切り文字、ルールの機能や特徴が様々なケースに対応してくれます。恢恢!
ルールにはユーザールール、ユーザーのサブルール、Proposalの三種類があります。

#ユーザーとPepperとルー

元記事を表示

【初心者向け】ディープリンク技術の概要と注意点

チーム内で「ディープリンク」「ダイナミックリンク」「ユニバーサルリンク」等の用語の認識が合っているのか怪しかったので、整理してみました。

基本iOS目線で書いてますが、実装寄りではなく概念寄りの内容なので、Android開発者でも読めると思います。

私の認識違いなどがありましたら、コメント欄にてご教示いただけますと幸いです。

※この記事ではURL/URIの区別を厳密に意識せず、より馴染み深い”URL”に統一して記述しています。

# ディープリンク (Deep Link) とは

任意のアプリの任意の画面に遷移させるURL、またはそれを扱う仕組みの総称であり、概念を表す用語です。

スマホアプリで代表のユースケースは以下のとおりです。

– スマホのブラウザでWebコンテンツ内のリンクをtapした際に、AアプリのX画面に遷移させる。
– Aアプリのボタンをtapした際に、BアプリのY画面に遷移させる。

# ディープリンクを実現する仕組み

## カスタムURLスキーム

– URLスキームとは、URLの“://”より前の部分で、リソースにアクセスするための手段を示します。

元記事を表示

【Android】画像を選択して、ImageViewに表示 in Kotlin

# ➊ はじめに
「`画像を選択して、ImageViewに表示する方法`」として「**startActivityForResult** と **onActivityResult**」で実装していたのですが、Androidは日進月歩しているらしく、この方法で実装するのは`非推奨`になってしまいました。

> 基盤となる startActivityForResult() API と onActivityResult() API はあらゆる API レベルの Activity クラスで使用できますが、AndroidX Activity と Fragment で導入された Activity Result API を使用することを強くおすすめします。

とのことなので、推奨方法をここ?「[`アクティビティの結果を取得する`](https://developer.android.com/training/basics/intents/result)」で調べつつ、実装してみたいと思います。

# ➋どんな感じになる?
「`SELECT IMAGE`」ボタンを押下すると、カメラで撮った画像を選択するア

元記事を表示

Android12の変更点ピックアップ

久しぶりの投稿です。時間ができたのでせっかくなので。

そろそろAndroid12リリースの時期で、遅れましたが、今年も気になる変更点をピックアップします。
全部を取り上げるというより、既存のアプリへの対応という前提で、特に重要度の高そうなものに絞ります。

Samesiteに関する変更がある(targetSdkVersion>=31時)ので、個人的に最優先でチェックすることをおすすめいたします。
各項目の詳細については、情報引用元が一番正確かつ最新なのでそちらをご参照ください。

# 主な情報引用元

Android12関連ホーム
 https://developer.android.com/about/versions/12?hl=ja
 → スケジュールもここから。
 → 日本語ページを正とするのが良いと思いますが、英語ページの方が更新が早いので、情報を早めに手に入れたい場合は英語に切り替えるのが良さそうです。

Android12上でアプリを動かす際に適応される項目
 https://developer.android.com/about/versions/12/behavio

元記事を表示

Androidアプリ開発者としてのキックオフ 「Androidアプリ開発の教科書」を読んで

これまでにもちょっとだけAndroidアプリの開発に携わったことがあるのですが、散逸的な知識しか身に着いていないという反省点がありました。
幸い仕事の方も少し落ち着いているので、良い機会として基礎から体系的な学習に取り組んでみることにしました。

手始めに「[Androidアプリ開発の教科書(第2版)](https://www.shoeisha.co.jp/book/detail/9784798152028)」という書籍を手に取ったのですが、これがかなり良かったので内容について簡単にレビューしてみたいと思います。
これからAndroidネイティブアプリの開発をやってみたいという方の参考になれば幸いです。

# 書籍の概要
2019年7月に第1版が刊行されたのち、2021年4月に第2版が出版されました。
バージョンの差が大きいことでおなじみのAndroidStudioですが、割と新しい本ということで自分が読んだ2021年8月の時点では特にコンパイルエラー等なくサクサク進めることができました。
1章から17章まで、各章のテーマに沿ったアプリをハンズオン形式で開発していく構成となっています。

元記事を表示

USB接続した実機を用いてAndroid Studioからのデバッグ

## 環境

Android Studio: Arctic Fox 2021.3.1

## 実機(スマホ等)での事前設定

– 設定 > システム > 端末情報 を選択
– ビルド番号を7回タップする。これで、開発者向けオプションが有効となる
– 設定 > システム > 開発者向けオプション を選択
– USBデバッグ を有効にする

– 注
– 設定メニュー構成は、機種によるかも

## デバッグ

– PCと実機(スマホ等)をUSBケーブルで接続
– Android Studioでプロジェクトを開く
– Run > Debug

元記事を表示

AndroidManifest.xml上書きできずAPK生成に失敗する場合の解消方法

## 環境

* Android Studio: Arctic Fox 2021.3.1
* gradle 7.0.2

## 現象

プロジェクトのビルドや実行において、以下のようなエラーがでて失敗する。

“`
Zip file ‘…\app\build\outputs\apk\debug\app-debug.apk’ already contains entry ‘AndroidManifest.xml’, cannot overwrite
“`

## 原因

– 依存ライブラリの中にAndroidManifest.xmlが含まれている場合、そのAndroidManifest.xmlが先にAPKにコピーされる
– その後、本プロジェクトのAndroidManifest.xmlをコピーしようとするが、既に存在するためエラーとなる
– [参考] Android Gradle プラグイン 7系で使用されているzipflingerというライブラリで上書きチェックが厳密にされるようになったため、問題が顕在化した模様
– https://android.googlesource

元記事を表示

WSLとAndroidエミューレーターを共存させる。

## 導入
一般的なAndroidエミュレーターはHyper-Vを無効しないと使えないのに対して
WSLはHyper-Vを要求するのでどうしても共存は厳しいように見えたが。

物凄くよさげなものを見つけたので紹介する。
**なお宗教上の理由でBluestacksは使えないという方はここでブラウザバックしてもok。**
## 結論
**BlueStacks Hyper-V版**というのがあるらしい、というかあった。
最低限の動作環境やダウンロードリンクは下から。
[BlueStacks Hyper-V版を利用する方法 – bluestack.com](https://support.bluestacks.com/hc/ja/articles/360041390952-BlueStacks-Hyper-V%E7%89%88%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95)

これでAndroidエミュレーターとWSLの共存が可能になった。

以下は GentooWSL2 と Bluestacks(Hyper-V)

元記事を表示

タップ時のripple(波紋)エフェクトがうまく表示されない

## 経緯

透過度を設定したViewをタップした際にエフェクトを表示したかったのですが、なぜだかうまくいきません。薄いような、またそもそも出ていなかったり。

なので試してみました。

## 結論
背景に対してmaskを指定すれば解決、でした。

“`

“`

## サンプル

下みたいな画面を作成して検証してみました。

![Screenshot_1630748499.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1773816/3e91091c-02eb-fca6-9e95-c7094cfdbe93.png)

こんな感じの。(MainActivityは割愛)

“` activity_main.xml

【Android】Google Play Consoleで広告表示設定の変更をする

左メニューの「ポリシー」→「アプリのコンテンツ」

「広告」から現在の広告表示情報を変更
![スクリーンショット 2021-09-04 15.51.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694762/f50ba1c7-dbb3-b65f-3a4a-d4e5180af289.png)

元記事を表示

【Realm】relationship と insert

![realm-java 10.8.0](https://img.shields.io/badge/realm–java-10.8.0-6E60F9)

`RealmObject` 派生オブジェクトが他の `RealmObject` 派生オブジェクトの参照を持つ場合、
参照元のオブジェクトを insert (もしくは update)すると参照先のオブジェクトも insert(update)される。

例えば次のようなクラスが定義されている場合を考える。

“`plantuml
class From extends RealmObject {
@PrimaryKey id
name
}
class To extends RealmObject {
@PrimaryKey id
name
}

From o- To
“`

“`Kotlin
import io.realm.Realm
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
import io.realm.kotlin.wh

元記事を表示

スマートウォッチでタブレット上のビデオプレーヤーを制御できる、ビデオ再生の分散デモ

# ビデオ再生制御シナリオ
最近では、ユーザーはスマートデバイスでビデオを見ることが多いですが、次のような多くの課題に直面しています。

– ビデオプレーヤーを制御するには、大画面デバイスを手に持つ必要
– ビデオの再生中はデバイス上で他のタスクを動作できない

これらの課題を解決するには、以下の解決策を提案します。

– 軽量のデバイス(スマートウォッチなど)をリモコンとして使用し、大画面デバイスでビデオプレーヤーを操作する 。
– マルチコラボレーション API を使用してHarmonyOSアプリを開発し、クロスデバイスをデプロイ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50470/5929d0a9-220c-1c42-d054-eed198071187.png)
#Harmony OSはビデオ再生制御シナリオをどのように解決するか
Harmony OS がサポートするマルチデバイスコラボレーションは次の通リです。
![image.png](https://qiita-ima

元記事を表示

ToolbarのonCreateOptionsMenu()がFragmentから呼ばれないときの対処法

一部のFragmentでのみ、とあるメニューを表示したかったのですが、メニューのvisiblityをうまくコントロールできず困りました。

というのも、ActivityからはonCreateOptionsMenu()やonPrepareOptionsMenu()が呼べるのに、Fragmentからは呼べませんでした。

すごくシンプルなのですが、

“`kotlin:HogeFragment.kt
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
setHasOptionsMenu(true)
(略)
}
“`

これだけでした。
setHasPotionsMenu(true)を呼べば、onPrepareOptionsMenu()やonCreateOptionsMenu()も呼ばれます。

“`xml

元記事を表示

【Android】Android 12対応をする前にplay-services-analyticsのバージョンを確認しよう

## 結論
v17.0.1以上に上げればOK

“`gradle:build.gradle
com.google.android.gms:play-services-analytics:17.0.1
“`
https://developers.google.com/android/guides/releases#august_19_2021
>The latest update to the Analytics library includes the following change:
>・Fixed issue where library could not be built with Android 12 as its target.

## 何が修正されたのか(何が悪さをしていたのか)
初期化時に呼ばれるクラス内にAndroid12から必須となった可変性フラグが宣言されていないPendingIntentがあった

“`java:Application
GoogleAnalytics.getInstance(requireContext())
“`

“`log:lo

元記事を表示

aabをUSB経由で実機にインストールする方法

adbでapkをインストールするように、開発中のアプリのaabをインストールする方法を紹介します。

基本的には[公式ドキュメント](https://developer.android.com/studio/command-line/bundletool)のとおりです。

# 手順
* 以下からbundletoolをダウンロードし、/tmp/以下に保存します。
https://github.com/google/bundletool/releases
* 以下のコマンドでaabを複数のapkに分解します

“`
java -jar /tmp/bundletool-all-1.8.0.jar build-apks –bundle=release.aab –output=/tmp/signed.apks \
–ks={キーストアへのフルパス} \
–ks-key-alias={keyAliasで指定する値} \
–ks-pass=’pass:{storePasswordで指定する値}’ \
–key-pass=’pass:{keyPasswordで指定する値}’

元記事を表示

【Flutter】全画面を削除し遷移する

## 何度か画面遷移をした後にトップレベルの画面に戻す

“`dart
Navigator.of(context).pushNamedAndRemoveUntil(‘/page’, (_) => false,);
“`

### メソッド

条件を満たすまで画面を破棄し遷移するため, 条件部分でfalseを返している.

“`dart
pushNamedAndRemoveUntil(
”, //page
(_) => false, //条件
)
“`

参考 https://api.flutter.dev/flutter/widgets/Navigator/pushNamedAndRemoveUntil.html

元記事を表示

Android アクセシビリティ

#はじめに
近年、日本でも多様性が求められる世の中になっており,アプリ開発においてもアクセシビリティを意識する必要があると思います。本記事ではAndroidアプリに関するアクセシビリティについてご紹介します。

# 目次
* アクセシビリティとは
* Android
– フォントサイズ
– 表示サイズ
– TalkBack

#アクセシビリティとは
障害を持つユーザーが情報を利用できるようにすることだけではありません。
ユーザーの能力や状況に関係なく、すべての人が情報を利用できるようにすることです。
アクセシビリティを念頭に置いてアプリを設計するということは、
シンプルさと知覚可能性を優先し、すべての設計上の決定を調べて、
さまざまな能力を持つユーザーやさまざまな方法で、
デバイスを操作するユーザーを除外しないようにすることを意味します。

# フォントサイズ
Android上のフォントサイズを調整して、画面上のアイテムのサイズを変更できます。

確認方法
設定→ユーザー補助→フォントサイズ→小・デフォルト・大・最大 から選択

|デフォルト | 最大|
| :-: | :-

元記事を表示

Flutter: Android studioでFirebaseをセットアップする最低限の手順(Android&IOS)

###この記事について
この記事はFlutterでAndroidとIOSのアプリを作る際、Firebaseを使用するときのセットアップ方法についての記事です。
実装するたびに動画の教材を見ており時間が掛かってしまうため(特にIOS)、一連の作業を箇条書きにしております。
セットアップのための最低限やることを書いた記事のため、Firebaseの機能の実装等は記載していません。また、Firebaseプロジェクトの作成は省略しております。

###開発環境

“`
% flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel master, 2.6.0-1.0.pre.150, on macOS 11.5.2 20G95 darwin-x64, locale ja-JP)
[✓] Android toolchain – develop for Android devices (Android SDK version 31.0.0)
[✓] Xcode –

元記事を表示

OTHERカテゴリの最新記事