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

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

自宅以外の場所にいる子供の位置情報を全自動で通知できたら、少しは安心できるかもしれない

# はじめに
小学校の中~高学年ともなると、塾や習い事、友達の家に遊びに行ったりなど、一人で外出することが多くなるかと思います。
親としては子供が一人で外出している最中に、どこにいるのか、変なことに巻き込まれていないかなどを常に心配なものです。
子供が今どこにいるかが分かれば、少しは心配も減る・安心できるかと思い、子供に持たせたスマホ位置情報を全自動で通知する仕組みを作りました。

スマホは Andorod、自動化処理は [**Macrodroid**](https://play.google.com/store/apps/details?id=com.arlosoft.macrodroid&hl=ja) を使用します。
Macrodroid とは、自分で設定した処理を実行できる Android アプリです。すべて GUI で設定ができるため、プログラマーでなくても直感的にスクリプトが作成できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/54e24145-3364-

元記事を表示

TimePickerDialogで未来時刻が選択出来ないようにする

TimePickerDialogで未来時刻が選択出来ないようにしようと思った。

しかし…

実装方法を探しに探したが、全く見つからぬ٩( ᐛ )و

そして私は **[MaterialDateTimePicker](https://github.com/wdullaer/MaterialDateTimePicker)** というライブラリに出会った。

### 実装してみる

– build.gradleのdependenciesに以下を追加

“`kotlin
implementation ‘com.wdullaer:materialdatetimepicker:4.2.3’
“`

– MaterialDateTimePickerを表示してみる(ボタンをクリックしたらダイアログが表示されるようにしています)

“`kotlin
class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCrea

元記事を表示

難読化されたメソッド名を特定する

Androidアプリを難読化して動かすと、例外が発生することがあります。
スタックトレースを見ても難読化により、どのメソッドで例外が発生したのかわかりません。
そんなとき、例外発生したメソッドを特定する方法です。

# 難読化
Androidでは、セキュリティやサイズ縮小を目的に以下の設定を行うことがあります。

“`groovy:build.gradle
minifyEnabled true
shrinkResources true
“`

この設定で動かしてみると、例外が発生することがあります。

# 難読化で例外発生して困ること

以下の実装があるとします。

“`java:Calc.java
package com.example.myapplication;

public class Calc {
public int divide(int param1, int param2) {
return param1 / param2;
}
}
“`

“`java:MainActivity.java
package com.exampl

元記事を表示

(Win版AndroidStudioを使っている)Android開発者に贈る 俺流最高のショートカットキーカスタマイズ

# 概要

Windows版AndroidStudioを使っている全アプリ開発者に贈る、俺流最高のショートカットキーカスタマイズを紹介します。

# はじめに

Windowsのショートカットキーは貧弱過ぎる。
MacとかLinuxなら、十字キーに手を伸ばさなくても済むショートカットキーが標準で用意されているのに、なんでWindowsには無いんだ。ほんと、十字キーに手を伸ばすのが面倒。PageUpもPageDownもHomeもendもctrl+左右も何もかも面倒。はーストレス。

ん、AndroidStudioでは、ショートカットキーのカスタマイズができるのか。
でもそうは言っても特定の機能とか、ウィンドウ表示とかそういうのだけで
俺がストレスに感じているこういうのは、解決できないんでしょ。知ってる知ってる。

…え、できるの…!?まじで…!?

# AndroidStudioのショートカットキーは何でも有りなんです

まずはAndroidStudioのショートカットキーの一覧を確認しましょう。

File > Setting > KeyMap でショートカット一覧を確認で

元記事を表示

#4 Kotlin Koans Introduction/Lambdas 解説

# 1.はじめに

Kotlin公式リファレンスのKotlin Koans/Lambdasの解説記事です。

Kotlin Koansを通してKotlinを学習される人の参考になれば幸いです。

ただし、リファレンスを自力で読む力を養いたい方は、
**すぐにこの記事に目を通さないで下さい!**

一度各自で挑戦してから、お目通し頂ければと思います:sunny:

#2-1. 無名関数

Kotlinでは、変数に**関数**を代入できる特徴があります(このとき関数を**関数オブジェクト**と呼びます。)。

代入するには、

“`
fun example(){
val x = ::plus
val y = ::minus
}

fun plus(x:Int, y:Int) = x + y
fun minus(x:Int, y:Int) = x – y
“`

このように関数を定義して、それに**::**という記号をつけます。

また以下のように、変数への代入と関数の定義を同時に行うことができます。

“`

val x = fun(x:Int, y:Int) = x + y

元記事を表示

【Android / Java】表示Fragmentによりイベントを切り替える

# はじめに
Android Studio(java)でアプリを開発していて、「表示しているフラグメントに応じて端末の戻るボタンを押した時の処理を切り替える」という実装をしたい場面があった。
そのときに学んだ内容を投稿します。

# 学んだ内容
コードの一部を記載

## ActivityからFragmentを表示

このアクティビティxmlファイルにフラグメントを表示させる

“`activity_main.xml

Google Play Consoleで APK拡張ファイル(.obbファイル)をアップロードする方法

Google Play Consoleで
APK拡張ファイル(.obbファイル)をアップロードしようとしたところ
ハマったので、書き残しておく

### 注意

– APKファイルを**一番初めにアップロードする時しか、OBBファイルは追加できない**
– もしOBBファイルを追加忘れても、あとから追加はできない
– 同じバージョンのAPKファイルは再アップできない
– アップロードしたAPKファイルを削除もできない
– **よって、VersionCodeの値を変更後、再アップロードするしか方法がない** (←つらい)
– 新しいUI(2020/11/2〜デフォルトになるらしい)では既存のUIと指定場所が違う
– 今回は新しいUIの画面です

### 手順

1. Google Play Consoleにログイン
2. アプリの画面に移動
3. リリース > ご希望のテスト > 新しいリリース作成 (通常のリリース作成手順)
4. APKファイルをアップロードする
5. アップロードが環境すると、APKファイルが表示されるので、その一覧の

元記事を表示

「端末の戻るボタン・画面クリック」でダイアログを終了させない方法

“`kotlin
AlertDialog.Builder(activity, R.style.Dialog)
.setTitle(“タイトル”)
.setMessage(“メッセージ”)
.setCancelable(false) // setCancelableでfalseをセット
.show()
“`

元記事を表示

firebaseのCrashlyticsの移行

「2020 年 11 月 15 日以降も引き続き Firebase コンソールでクラッシュ レポートを取得するには、一般提供版の Firebase Crashlytics SDK にアップグレードしてください。 」

と言う割に、gradleの設定に手こずったのでメモ。

公式の導入手順はiOS版の設定しか見れない…。なぜか、Androidの方を見ようとしてもiOSの手順が表示されてしまう。ブラウザの問題かなー。
2020/10時点では、バージョンもシビア?(多分レポジトリ 設定が足りてないせい)で、crashlytics:17.2.2が見つからなく、バージョンをあげるとビルドできなかった….。

### プロジェクトのbuild.gradle

“`gradle
dependencies {
classpath ‘com.google.gms:google-services:4.3.3’
classpath ‘com.google.firebase:firebase-crashlytics-gradle:2.3.0’
}
“`

### アプリケーション

元記事を表示

TermuxでFirebaseを使いたい

# 背景

※執筆時点のfirebase-toolsは8.12.0です。

[Termux](https://termux.com/)で[Firebase](https://firebase.google.com/)のエミュレータを起動したかった。

Termuxでもfirebase-toolsが入れられるので、firebase emulatorsも当然使えると思ったがそうはいかなかった。
firestoreとdatabaseのエミュレータはJavaで実装されているが、TermuxにはJavaが用意されていないため起動できない。

そこで、Javaのインストールから`firebase emulators:start –only firestore`を起動できるまでの手順を紹介する。

# 手順

## 0. 準備

既に一通り済んでいる場合は飛ばす。

### Termux

PlayストアからTermuxをインストールする。

### Termuxパッケージ

最低限以下のパッケージが必要になるので、Termux上でインストールする。

– proot
– wget
– vimなど

元記事を表示

[Android]PUSH通知

# 概要
ローカル通知について結構前に勉強したことがあった(リモート通知はどうすればいいのか知らなかった)のだが、
だいぶ忘れた状態で、リモート通知のコード見ててどういうことなの・・・・となって、
なるほどねとなるまでにかなり時間がかかったのでメモ

# PUSH通知とは
– PUSH通知はその発火トリガーによってローカル通知とリモート通知に分類されている。
– ローカル通知:発火トリガーがローカルのなにかの処理
– リモート通知:発火トリガーがFCMからのメッセージ受信
– PUSH通知の本質的な処理・・・すなわち**「通知領域への表示」〜「通知タップ時の画面遷移処理」のやり方は全く同じ** ←ここがわかってなかった
– なお、**単純にPUSH通知という場合はリモート通知のことを指すことが多い。** ←さらにここでやられた
– FCMメッセージ送信=PUSH通知と捉えている記事が世にめちゃくちゃ多いが、コレ多分嘘で、ここが理解を妨げていたんだと思う。
Qiita記事とかで**FirebaseからPUSH通知を送信!みたいな図をよく見かけてたせいで、完全にだま

元記事を表示

[Android]scrcpy でミラーリングすると画面が見切れる問題の対処方法

# はじめに

[scrcpy](https://github.com/Genymobile/scrcpy) は Android 端末をミラーリング、画面操作をUSBまたはTCP/IP経由で行うアプリケーションです。Windows・Linux・Macで利用できるアプリケーションなので全てのAndroid開発環境で利用できます。scrcpy はかなり便利なツールでバグも少ないのですが次の問題があったので解決方法を共有します。

# 問題

解像度が 1920×1200 のを scrcpy でミラーリングすると、なぜか 1920×1080 の解像度でミラーリングされ画面が見切れて表示されてしまう。本来であれば scrcpy ではタップ操作もサポートしているが、この状態になるとタップ操作もできなくなる。

“`
$ scrcpy
2020-10-09 15:40:18.220 scrcpy[7021:244757] INFO: scrcpy 1.10
/usr/local/Cellar/scrcpy/1.10/

元記事を表示

新しい Google Play Console では「サービスとAPI」というメニューは別の名前になっていた件

# 概要

今までの GooglePlayConsole は 2020年11月2日 をもってサービスを終了し、新しい GooglePlayConsole になります。

最近は新しい方の GooglePlayConsole に使っていました。

新しいと言ってもまあだいたい雰囲気で問題なく使えていたのですが、従来の GooglePlayConsole でいうところの以下のメニューが行方不明に…

**開発ツール – サービスとAPI**

どこにいったのかわからず

元記事を表示

Kotlin Multiplatform Mobile がアルファ段階に移行したので、チュートリアルを試す

# 背景

最近、Kotlin Multiplatform Mobile(KMM)がアルファ段階に移行したようです。

[Kotlin Multiplatform Mobile がアルファ段階に移行 – Kotlin Blog | JetBrains](https://blog.jetbrains.com/ja/kotlin/2020/09/kotlin-multiplatform-mobile-goes-alpha-ja/)

KMM とは、JetBrains が提供するクロスプラットフォーム対応のモバイル開発用 SDK です。
Kotlin のマルチプラットフォーム対応能力を駆使し、モバイルアプリケーションの構築体験を可能な限り楽しく効率的にするように設計されたさまざまなツールや機能を含んでいます。

見ていて面白そうだったので、試しにチュートリアルをやってみました。
※2020 年 10 月時点の情報なので、今後のアップデートにより変わる可能性があります。

# 開発環境

開発環境は以下の通りです。

– Android Studio 4.1 RC 3 以降
– Xcode 1

元記事を表示

#3 Kotlin Koans Introduction/Default arguments 解説

# 1.はじめに

Kotlin公式リファレンスのKotlin Koans/Default argumentsの解説記事です。

Kotlin Koansを通してKotlinを学習される人の参考になれば幸いです。

ただし、リファレンスを自力で読む力を養いたい方は、
**すぐにこの記事に目を通さないで下さい!**

一度各自で挑戦してから、お目通し頂ければと思います:sunny:

# 2-1.Default引数とnamed引数

[#2 Kotlin Koans Introduction/Named arguments 解説](https://qiita.com/drafts/7414e4e3a536026dc746/edit) の記事で説明しておりますので、ご覧ください。

# 2-2.toUpperCase()

右側の本文中に出てくる、toUpperCase()関数を[Kotlin公式リファレンス](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/)で見てみましょう。

> fun String.toUp

元記事を表示

#2 Kotlin Koans Introduction/Named arguments 解説

# 1.はじめに

Kotlin公式リファレンスのKotlin Koans/Named argumentsの解説記事です。

Kotlin Koansを通してKotlinを学習される人の参考になれば幸いです。

ただし、リファレンスを自力で読む力を養いたい方は、
**すぐにこの記事に目を通さないで下さい!**

一度各自で挑戦してから、お目通し頂ければと思います:grinning:

# 2-1.Default引数とnamed引数

Default引数:デフォルトで値が指定されている引数

named引数:名前がついた引数

Default引数は関数を呼び出す際、引数に値を指定しなくても良い、
named引数は、引数が複数あるとき、関数の呼び出し側が引数の順序を気にせず値を渡せる、
といったメリットがあります。

[Default引数とnamed引数の詳細](https://kotlinlang.org/docs/reference/functions.html#default-arguments)(公式レファレンスの引用)

# 2-2.関数定義の略記

“`
fun join

元記事を表示

Quick Appの開発方法

# 前書き
日本ではQuick Appがあまり知られていません。しかし、Quick Appはすでに170ヶ国以上展開されています。本稿はQuick Appの特徴と開発手順を紹介するものです。

# Quick Appの概要
ユーザーがAndroid上で動かすサービスが主に2つあります。

* ネイティブアプリ(Androidアプリ)
* ウェブアプリ(ブラウザでウェブサイトを開く)

さらにQuick Appを加えれば、合計3つあります。

Quick Appの開発方法を述べる前に、ネイティブアプリとウェブアプリとQuick Appの特徴を比べてみたいです。

### ネイティブアプリの特徴

* インストールが必要
* デバイス機能が使用可能
* リリース時の審査あり
* iOS同時対応不可
* 開発言語(Java、Kotlin)
* APKの容量が大きい(数十MB以上のアプリが多く、100MBを超えるアプリも少なくない)

### ウェブアプリの特徴

* インストールが不要
* デバイス機能が使用不可
* リリース時の審査なし
* iOS同時対応可
* 開発言語(HTML、CSS

元記事を表示

じゃんけんアプリをFlutterに移植してみた

# はじめに
[iPhoneアプリ開発集中講座](https://amzn.to/30MZV95)にあるじゃんけんアプリをFlutterでもしも作ったらというお題で移植してみました。
なるべく同じアプリになるようにしました。

# 解説
コードは[github](https://github.com/FromF/flutter_janken)に公開してあります。
一部紹介させていただきます。

## じゃんけん画像
[iPhoneアプリ開発集中講座](https://amzn.to/30MZV95)内ではImageViewのimageプロパティーが初期はnilでじゃんけんをすると画像がセットされる作りでしたが、それをうまくできなかったのでWidgetを作って対応しました。

“`Dart
Widget image(String image) {
if (image.isEmpty) {
// 画像のファイル名がない場合には、Container()を返して何も表示しない
return Container();
} else {
// 指定された画像ファイ

元記事を表示

OpenAPI Generator でAndroid コードを自動生成する

# [The OpenAPI Specification](https://github.com/OAI/OpenAPI-Specification) (OAS)
OAS はHTTP API の仕様を記述するためのフォーマットです。
主な内容は以下のように、

– OAS のバージョン番号
– 記述するAPI のバージョン番号、タイトルなどの情報
– サーバへの接続情報
– 各エンドポイントの情報

からなります。(より詳しい書き方は https://swagger.io/specification/ を参照)

“`openapi.yaml
openapi: 3.0.3
info:
version: 0.0.0
title: OpenAPI Generator test with Qiita API
servers:
– url: https://qiita.com/api/v2/
paths:
/users:
get:
parameters:
– …
responses:
200:

元記事を表示

Google Playの課金ポリシーの更新について

# Google Playの課金ポリシーの更新

## 1. どういうこと?

Epic GamesのFortniteがAppleやGoogleによって公開停止になった事件は記憶に新しいと思いますが、先日Googleからアプリ開発者にとって衝撃的な発表がなされました。

GooglePlayの課金ポリシーが厳格化され、GooglePlayで配信するアプリについてはGooglePlayの課金システムを利用することが必須であることが明確にされたようです。
課金ポリシーに違反するアプリは2021年9月30日までに対応することが必要になります。

* Listening to Developer Feedback to Improve Google Play
[https://android-developers.googleblog.com/](https://android-developers.googleblog.com/)

* デベロッパー プログラム ポリシー(プレビュー): お支払い
[https://support.google.com/googleplay/android

元記事を表示

OTHERカテゴリの最新記事