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

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

【Android】斜めの線をCanvasで引く方法

今回は斜めの線をCanvasで引く方法を記載しようと思います。

このやり方は簡単で、縦横の比率が変わっても角から角へ線を引くことができます。

“`LineView.kt
class LineView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
) : View(context, attrs, defStyleAttr) {
var paint: Paint = Paint()
override fun onDraw(canvas: Canvas) {
// 線の太さ
paint.strokeWidth = 4f
// 線の色
paint.color = ContextCompat.getColor(context, R.color.black)
// 線を表示する位置
canvas.drawLin

元記事を表示

android appでOkHttpを使ってapiをたたくためにやったこと

# 前置き
既存の自作webアプリ向けのbackendを
新規開発するandroidアプリからも利用したかった。
やり方を調べるのに時間がかかっためここにまとめる。

# 前提条件
開発環境は以下である。
| OS | macOS Monterey12.6 |
|:-:|:-:|
| IDE | IntelliJ IDEA 2022.2.2 |
| 言語 | kotlin |
| ビルドツール | gradle |

# 追記箇所
実際に動作が確認できるまでに追記した箇所を示す。

## build.gradle.kt
依存関係の追記。
pathは公式HPから参照した。
https://square.github.io/okhttp/#releases
“`gradle
implementation(“com.squareup.okhttp3:okhttp:4.10.0”)
“`

## AndroidManifest.xml
インターネットへのアクセスを許可する設定を追記する必要がある。
“`xml
androidメモ

## packageName一覧を列挙する
Intent i = getIntent();
pm.getLaunchIntentForPackage(“package.name.xxxxx”);
@SuppressLint(“QueryPermissionsNeeded”) List resolve = pm.queryIntentActivities(i, PackageManager.MATCH_ALL);
for (ResolveInfo s : resolve) {
Log.d(“IconResourceID”, String.valueOf(s.getIconResource()));
}

## アプリが入っていない場合にストアへ飛ばす
try {
startActivity(intent);
} catch (Exception ignored) {
// todo: 事前のinstall検証でもいいかもしれない
try

元記事を表示

Android12でデバグできなくなった


最近(2022/10/08)、手元のスマホをAndroid12に機種変したのですが、AndroidStudioからの実機デバグにて、インストールに失敗するという事例が出ました。

よくある「INSTALL_PARSE_FAILED_MANIFEST_MALFORMED」というエラー。

AndroidStudio の SDKManagerで、Androidの該当バージョンがインストールされていないとかそういう話ではなく、

マニフェストファイルの「Activity」タグに属性に「android:exported=”true”」を入れれば、インストール/デバグできるようになりました。


以上

元記事を表示

リストのドラッグ&ドロップ終了時に通信をしたい

# 初めに
今回は、`epoxy`を使った`RecyclerView`でドラッグ&ドロップを実装する時に少しわかりづらかった部分を紹介していこうと思います
### 本文
やりたいこととしては、`RecyclerView`でドラッグ&ドロップが終わったタイミングで内部のデータの整理と通信処理を行いたいです。
この時に自分が詰まったのは意図せず通信が何度も走ってしまうという点でした。
原因としては`onModelMoved`は1個要素がずれるたびに呼び出されるので通信処理が何回も呼び出されてしまっていたのです。
そこで、調べてみると要素の入れ替えが終わり、指が離されたときに呼び出される`cliearView`というのがありました。
なので、そのタイミングで内部データと通信処理を行うようにしました。
多少省略はしてますが、コードは下記の通りになります。
“`kotlin
EpoxyTouchHelper.initDragging(controller)
.withRecyclerView(binding.recycler)
.forGrid(

元記事を表示

Text Editの内側に影をつける方法〜Layer-List〜

Androidアプリの実装中にTextEditの領域の **内側** に影をつけたかった!
うまい実装方法に辿り着いたので備忘録としてここに残します。

#### elevationを試してみるが、うまくいかず・・・

入力欄の外側に影をつけるなら、XMLの中に **android:elevation=”〇〇dp”** を記述することで描画できる。

#### 次にgradient(グラデーション要素)を試したがこちらもうまくいかなかった

style要素としてgradientを使用して実装しようと思ったが、うまくいかず。(style…高さや幅、背景の色、文字についてなど外観についてまとめて記述できる要素。Viewファイルとは別に用意)
backgroundcolorで指定した白背景の上に、gradientでグラデーションをかける、という複数の要素を重ねて表示することができず断念。

## layer-list で解決した!

###### layer-list とは
画像などを、レイヤー構成で重ねることができるリソース。
**複数の画像をひとつのリソースとして取り扱うことができる。

元記事を表示

Jetpack Composeで角を丸くする

## はじめに

Jetpack Composeで丸い角のViewを作成する際にハマりました。何度もハマっている気がするので個人的なメモとして書きます。

### 正解
順番が大切です。clipを先に書くこと。
backgroundを先に書いてしまうと角が丸くなりません。

“`kotlin:view.kt
Box(modifier = Modifier
.clip(RoundedCornerShape(20))
.background(color = Color.Red)
) {
Text(
modifier=Modifier.padding(10.dp),
color = Color.White,
text = “テスト”
)

元記事を表示

【Android Wear】WatchFaceの構成アクティビティの作成

# はじめに
WatchFaceの構成アクティビティの作成方法について記述。
下の画像のペンのボタン押下時に起動する画面。
![ConfigActivity.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694762/f15a6204-980b-f3ab-02c9-7c215adf0d2f.png)

WatchFaceの作成手順については、下記を参照。

https://qiita.com/nakashimaakio/items/639f161058107eaeec74

これを実装してから構成アクティビティを作成することをおすすめする。

# 実装手順

## 下準備

### ライブラリの導入

構成アクティビティに必要なライブラリの導入
“`build.gradle
dependencies {
implementation ‘androidx.wear.watchface:watchface:1.1.1’
implementation ‘androidx.wear.watchface:w

元記事を表示

【Android】プログラム上でadb shellコマンドを実行する方法

# プログラム上でadb shellコマンドを実行する方法

## パッケージ名を指定して、別プロセスのアプリを終了させる場合

:::note info
exec()の引数を変更することで様々なコマンドを実行できます
:::

:::note warn
「adb」は省略してexec()に渡します
:::

“`main.kt
class AdbService() {

fun killProcess(packageName: String) {

//adbから実行する場合は、「adb shell am force-stop com.google.android.apps.maps」となる
val process = Runtime.getRuntime().exec(“am force-stop $packageName”)
process.waitFor()

}

init {

//GoogleMapを終了させる場合
val googleMapPackageName =

元記事を表示

ナビゲーショングラフ内でviewModel()を使用した場合、取得できるViewModelは独自のViewModelStoreOwnerに紐づいている。ActivityやFragmentに紐づいたものは取得できない。

# まとめ
– ナビゲーショングラフ内で`viewModel()`を使用した場合、取得できる`ViewModel`は`Activity`や`Fragment`のそれとは別の、独自の`ViewModelStoreOwner`に紐づいています。
– そのナビゲーションの乗っている`Activity`や`Fragment`に紐づいたものは取得できません。
– 特に`AndroidView`と組み合わせて使用した場合、`Activity`や`Fragment`のライフライクルに紐づいたものを取得できることを無意識のうちに期待しがちなので注意。
– ナビゲーショングラフはデスティネーション毎(パス毎)に独立した`ViewModelStoreOwner`を持ちます。

## つまりこういうこと
以下のような`ViewModel`クラスと`Activity`があった時に、

“`SampleViewModel.kt
class SampleViewModel : ViewModel() {

// 新しいインスタンスができるたびにユニークなIDを振ります。
private val

元記事を表示

AndroidでFirebase + Sign in with Apple 実装

## やること
AndroidでSign in with Appleができるようにする

## 前提
Firebaseプロジェクト作成済のアプリであること

## 概要
1. IdentifierのSign in with Apple をオンにする
2. ServiceId作成
3. プライベートリレー用の設定
4. Sign in with Apple用秘密鍵作成
5. Firebase側の設定
6. コード書こう

## 1. IdentifierのSign in with Apple をオンにする
Apple Developer Consoleにログイン
-> Certificates, Identifiers & Profiles を開く
-> Sign in with Apple を実装したいアプリのIdentifierを選択
-> CapabilitiesタブのSign in with Appleにチェックを入れる
-> Editを押下し、Enable as a primary App IDを選択してSave
-> 右上のSaveを押下

## 2. ServiceIDの作

元記事を表示

個人的Droidkaigi2022特に気になるトーク

[Droidkaigi2022](https://droidkaigi.jp/2022/)開催日が近くなってきました。

タイムテーブルが公開されたので、気になるトークをピックアップしてみました。

# Jetpack Compose で Material Design 3
1日目の 11:15-11:55
ComposeはAndroidの今のトレンドだと思うので、 Compose で Material Design 3というのはキャッチアップしておきたい内容だと思います!

# AndroidManifest.xmlはその後どうなっているのか?
1日目の 14:20-14:45
AndroidManifestは記載することが必要なので、なんとなく書いていることが多いと思います。
その後どうなっているかは、あまり考えていなかったのでこれを機に理解を深めていきたいです!

# Camera Xライブラリの魅力と最新機能を紐解く
1日目の16:35-17:00
さまざまなアプリでカメラ機能は使用していると思うので、カメラ機能のライブラリーの最新情報は知っておいて、損はないと思います!

元記事を表示

AndroidStudioで使用する最大ヒープサイズの変更方法

# はじめに
久しぶりにヒープサイズを調整したほうがいい旨の通知がAndroidStudio上に表示されていたので対応したのですが、手順を備忘録的に残しておこうと思います。

# ヒープサイズ変更方法
まず、ヒープサイズを変更したほうがいい場合に以下のようなメッセージが表示されます。

このメッセージが表示された場合は以下の手順で変更が可能です。

①メニューバーから [File] > [Preference]を選択します。
②[Appearance & Behavior] > [System Settings] > [Memory Settings]を選択します。

Android13以降で必要になった「広告 ID を使用するための権限を宣言する」方法

# はじめに
ある日、Google Play Consoleで以下のような**広告 IDに関する申告**を求められました

>Android 13(API 33)で広告 ID の変更が行われました
Android 13 以降をターゲットとし、広告 ID を使用しているアプリについては、アプリ マニフェストで com.google.android.gms.permission.AD_ID 権限を宣言する必要があります。この権限が含まれていないと広告 ID がゼロにリセットされ、ID にアクセスしようとすると ID ではなくゼロの文字列が返されます。

![Screen Shot 2022-10-01 at 19.28.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167220/4cbfb716-29b7-4f19-193d-50fd44fa5d70.png)

で、これが一体何をすればいいのかわからなかったので、対応方法をご紹介します。

# 前提
・対象となるアプリはアプリ内に広告を表示していて

元記事を表示

日記アプリリリースしました!

## はじめに

この度、初めてのスマホアプリである「テンプレ日記」という日記アプリをリリースしたので紹介します!

「**テンプレ日記**」で検索すると一番上に出てくるので、興味を持った方は是非インストールして見てください!

## ios版

https://apps.apple.com/jp/app/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E6%97%A5%E8%A8%98/id1638009071

## Android版

https://play.google.com/store/apps/details?id=com.hayatosato.diary

## 「テンプレ日記」の特徴

早速ですが、今回リリースした「**テンプレ日記**」の特徴を紹介します。
「**テンプレ日記**」の特徴は以下の通りです。

1. テンプレート機能付き
1. csv&text形式でのダウンロード可能
1. csvファイルによってデータ引き継ぎを行うため、ios ⇄ Android間の移行もできる!
1. 完全無料(バナー広告のみ)
1. 最低限の機能しか

元記事を表示

VSCodeのFlutterでフィンガープリントを取得する方法

## 読んでも読まなくてもいい前提
`com.google.android.gms.common.api.ApiException: 10`

[調べてみると](https://riscait.medium.com/apiexception-10-error-in-sign-in-with-google-using-firebase-auth-in-flutter-1be6a44a2086)、Debug用のフィンガープリントが必要とのこと。
でもフィンガープリントの取得方法が分からない

### 試してみてダメだった方法
– [Android Studioを使ってフィンガープリントを取得する方法](https://riscait.medium.com/apiexception-10-error-in-sign-in-with-google-using-firebase-auth-in-flutter-1be6a44a2086)
– 敗因はバージョン関係の問題と思われる
– [.\gradlew signingReport](https://stackoverflow.com/q

元記事を表示

flutter error : Execution failed for task ‘:camera:compileDebugJavaWithJavac’ というエラー等々

## 飛ばしても良い前提
Flutterで2021年秋くらいに「Googleログイン」「カメラ」を使ったアプリを作りました。
研究目的で作っており、実験できればそれでいっか程度で作ったので、1年ほど放置していると、
1. 私が使っていたGoogleログイン機能が脆弱性の問題から使えなくなった
2. 新しいログイン方法に乗り換えようとする
2. 新しいログイン方法を使うためにはcompileSdkVersionを上げないといけない
3. compileSdkVersionを30から31に上げると連続でエラーが出た

### エラーが出る状況
– Flutter cameraを使っている
– 環境が古い

と、エラーが出る状況が限られており、エラーの報告自体がネットに中々無かったので、今回はこの連続エラーとその解決策として実行したことをまとめた記事です。

## 1個目のエラー(Flutter Cameraバージョンが古かった)
### エラー文
`flutter error : Execution failed for task ‘:camera:compileDebugJavaWith

元記事を表示

PWA(Progressive Web Apps)とは -Qiitaをスマホで快適に見る-

## QiitaをiPhoneで快適に見たい
1. でも公式アプリってないよね?
1. とりあえずホーム画面に追加するか…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882988/7832dae2-6e7d-f6df-bda1-1b16d05adb48.png)
1. で、生成されたこれを押す。
![S__70516744.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882988/5e1e897f-ecd6-4c39-1c3a-7f789015bf0b.jpeg)
1. するとSafariで開かれず、アドレスバーも何もないネイティブアプリのような画面で表示される。
![S__70516740.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882988/e34c7afe-9f89-c31f-965b-2214c7

元記事を表示

AndroidエンジニアのためのiOSライブラリ選定シート

Qiita初投稿です!:joy:

## 目的
本ページはAndroidアプリ開発経験者がiOSアプリを開発し始める上で必ず確認したくなる~~はずの~~**Androidでいうとこのライブラリなんだけど、それのiOS版は何か**をまとめたものです。主に自分で調べた備忘録として残します。
誰かの労力の削減になれば幸いです:open_hands:

## 比較表(2022/9/30 時点)
| 役割 | Android(kotlin) | iOS(Swift) |
|:-:|:-:|:-:|
| ログ | [Timber](https://github.com/JakeWharton/timber) | [SwiftyBeaver](https://github.com/SwiftyBeaver/SwiftyBeaver) |
| HTTP クライアント | [Retrofit2](https://square.github.io/retrofit/) | [Moya](https://github.com/Moya/Moya)※1 |
| 画像読み込み | [coil](https://

元記事を表示

Material Design Components調べ : FAB編

# 背景
Material Design Componentsいっぱいあるけどガイドライン的にはどんな時に使うのがいいの? 逆にどんな時には使っちゃダメなの? がわからなくなるのでまとめてみました。
まずはよく使うFABから進めて、今後他のComponentについても記事にしていこうと思っています。

# floating action buttonとは
floating action buttonで通称FAB。
主に画面の右下に設置され、画面の主要なアクションを表しています。

有名なアプリではTwitterのツイート作成ボタンがこれだったりします。

# どんなときに使うの? どんなときに使っちゃダメなの?
|良い例|悪い例|解説|
|—|—|—|
|

  • OTHERカテゴリの最新記事