Android関連のことを調べてみた

Android関連のことを調べてみた

わいとVimとの出会い

:::note warn
この記事は[Vim駅伝](https://vim-jp.org/ekiden/)の2024年7月31日向けの記事です。
前回は、[thinca](https://thinca.hatenablog.com/entry/2024/07/megurovim-24) さんでした。
:::

# はじめに

ども、とんとんぼです!iOSを中心にモバイル開発やってます。
最近、vim-jp というコミュニティに入りました。
そこで自己紹介を含めて自分がどのようにvimと出会い、vimの沼にハマったかを紹介します。

# Vim との出会い
大学4年生の時、私はVimと出会いました。当時、理系の学生として論文やレポートを作成するために、主に $\TeX$ という文章作成ツールを使っていました。

$\TeX$ は、Donald E. Knuthによって開発され、複雑な数式を美しく整形することができる文章作成ツールです。しかし、$\TeX$ の環境構築が非常に難しいことから、自分のローカル環境ではなく、外部ツールに依存することにしました。そこで出会ったのがOverleafと

元記事を表示

【Android】Data BindingでincludeしたxmlファイルのTextViewを指定

# はじめに

こんにちは、エンジニアのkeitaMaxです。

Data BindingでincludeしたxmlファイルのTextViewのtextを変更したい時に困ったことがあったので日登録として記載しておきます。

# 困ったこと

以下のようにxmlファイルのTextViewのtextをActivityから変更しようと思った時にうまくできず、困りました。

“`xml:example.xml

“`
“`xml:text.xml

“`
“`kotlin:MainActivity
binding.exampleText.text = “変更” // exampleTextがないというエラー
“`

# 解決策

includeにidを振って、それを指定してから`exampleText`を指定するとうまくいきました。

“`xml:example.xml
Flutter初心者のためのガイド:基本から始めよう

Flutterは、Googleが開発したクロスプラットフォームのモバイルアプリ開発フレームワークです。1つのコードベースでiOSとAndroid両方のアプリを作成できる点が大きな特徴です。このガイドでは、Flutter初心者の方向けに、基本的な概念から応用まで、サンプルコードを交えて解説します。

## 1. Flutterの基本構造

Flutterアプリの基本構造は、ウィジェットと呼ばれる部品を組み合わせて構築します。最もシンプルなFlutterアプリは以下のようになります:

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

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
ti

元記事を表示

WSL2環境でAndroid10以前の実機デバッグ

## 概要
ワイヤレスデバッグ設定のない古いAndroid端末を使って、WSLのFlutter環境で実機デバッグするためにやったことです
(Windows環境へのADBツールインストールなし)

### 経緯
– WSLのFlutter環境でAndroid端末の実機デバッグをしたい
– 古い端末 (Android 10) を使いたい
– Windows環境にADBツールは入れていないし、入れたくない
– WSL環境にADBツールを入れているのでこれだけ使ってなんとかしたい、やってみる

## 前提
– WSL カーネル ver. 5.15.153.1-2
– usbipd-win ver. 4.2.0
– WSL Flutter環境は構築済み
– Android端末のUSBデバッグは有効化済み

## 手順
基本的には以下を参考に進めていくだけです

### 1. WSLでのUSB接続認識
– [USB デバイスを接続する](https://learn.microsoft.com/ja-jp/windows/wsl/connect-usb)
– [usbipd-win](https

元記事を表示

MediaStore.Images.Media.insertImageは非推奨

# はじめに
端末内の写真などのデータを取得したりする際に
“`
MediaStore.Images.Media.insertImage()
“`
を扱っていたのですが、調べてみたところどうやら非推奨だったようで・・・
なので上の方法以外でできる方法を調べてみたので、備忘録として記事に残しておきます。

非推奨の理由は分かりませんが、
Android(API 29)からは位置データが保存されなくなっているようです。

# 内容
“`
val contentValues = ContentValues().apply {
put(Images.Media.DATA, metadata.path)
put(Images.Media.DISPLAY_NAME, metadata.name)
}
“`

詳しくは以下の内容を参考にしていただければと思います。

# 参考

https://stackoverflow.com/questions/57726896/mediastore-images-media-insertimage-depre

元記事を表示

Flutterのマテリアル構造とレイアウト ~Statefulウィジェット~

https://flutter.ctrnost.com/tutorial/tutorial05/

### [Statefulウィジェット](https://flutter.ctrnost.com/tutorial/tutorial05/)

#### スクリプトが実行される流れ
1. `RandomWords` ウィジェットが作成されます
1. `RandomWords` の `createState()` メソッドが呼び出されます
1. `createState()` メソッド内で、`new RandomWordsState()` によって `RandomWordsState` のインスタンスが生成され、返されます
1. 生成された `RandomWordsState` オブジェクトが `RandomWords` ウィジェットに関連付けられます
1. `RandomWordsState` の `build()` メソッドが呼び出され、`WordPair.random()` でランダムな単語ペアが生成され、テキストウィジェットとして表示されます

#### より簡単に書いた流れ
`R

元記事を表示

ProcessCameraProviderとCameraControllerの違い

# はじめに
今回は以前にCameraXでのバーコード読み取り機能を実装していて気になっていたProcessCameraProviderとCameraControllerの違いを紹介していこうと思います
### 本文
ProcessCameraProviderはライフサイクルアーティファクトであり、
CameraControllerはビューアーティファクトになっています。
つまりCameraControllerはViewの機能の一部であり、単純なカメラ機能であればCameraControllerを使ってズームや画面の回転に合わせたPreviewの調整などをしてくれるので簡単に実装することができます。
ProcessCameraProviderはPreviewやUseCaseなどをLifeCycleOwnerに紐づけて初期化する必要があるが、ImageAnalyseなどを渡すことでやれることの様々な種類の機能を実装することができます
### 最後に
今回は似て非なるものが気になったので記事にしてみました
どなたかのお役に立てれば幸いです

元記事を表示

【セキュリティ】スマートフォンをドリルで破壊する

# 🔥 捨てられずに溜まっていく動かないスマホ

![IMG_0870.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/c525012c-eb3a-3246-c960-58e1cc657eb0.jpeg)

捨てますわ。

ノートパソコンもあるけども。

# 🔥 新規購入アイテム

![sc 2024-07-28 at 13.17.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/899e1967-0f45-f39c-e777-22a7d9afb4c4.png)

到着次第、めっためたにしてやります。

# 🔥 途中経過

![GH018810.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/6d803bc8-8c1a-4866-a669-85a218722d89.gif)

![IMG_0874

元記事を表示

DroidKaigi2024で気になる登壇まとめ:後半

# はじめに
先日、DroidKaigi2024の初日に開催される登壇で気になるものをピックアップしました。

https://qiita.com/YuukiYoshida/items/06e5e22166af7b5c1bd3

本日は上記の続きで、二日目の登壇で気になる内容をピックアップしたいと思います!

# アプリをリリースできる状態に保ったまま段階的にリファクタリングするための戦略と戦術

https://2024.droidkaigi.jp/timetable/690441/

こちら言わずと知れたYuki Anzaiさんの登壇ですね。
リファクタリングの際は歴史の長さに比例して、そのプロダクトの動作に影響を与えずにより良いものへ改修していくことの難しさが上がっていきますよね。
そんな状況下において、最適なリファクタリングフローをご自身の経験の中からお話いただけるということで、非常に楽しみな内容となっています。

# Google Sign-inの移行から始めるCredential Manager活用

https://2024.droidkaigi.jp/timetable

元記事を表示

【Android】標準ギャラリーを使用してギャラリーから画像を取得する

## はじめに
アプリから端末内の画像を取得して何か処理(加工や表示)をしたいということがあると思います。
身近な例で言うと、チャットアプリで相手に端末の画像を共有する、アイコン画像を端末内の画像に設定する等のようなケースです。

アプリから端末内の画像を取得する方法は、MediaStoreを使った方法や、ContentResolverを使った方法等ありますが、今回は標準ギャラリーを用いた方法をまとめていきたいと思います。

## 標準ギャラリーとは
標準ギャラリーとは、アプリにプリインストールされているギャラリーアプリです。
このギャラリーアプリを自作のアプリから呼び出すことで、簡単に画像を自前のアプリに持ってくることができます。

## 実装
今回は端末内の画像を取得し、それを表示するようなアプリを作りってみたいと思います。

### レイアウトの作成
レイアウトはViewで実装します。もちろん、Composeでも問題はありません。
今回のレイアウトは至ってシンプルで、画像を表示するViewと、標準ギャラリーを起動させるリスナーを設定するボタンを置いています。
“` activi

元記事を表示

Flutterのマテリアル構造とレイアウト ~外部パッケージを読み込んで使う~

https://flutter.ctrnost.com/tutorial/tutorial04/

👆をやってみた

### /pubspec.yamlの編集
ルートフォルダに`pubspec.yaml`がある
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1215907/323c5b07-ec16-ce0a-5202-d6e3b7c65750.png)

ここに書き込む
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1215907/fb2f44e0-4107-6aa0-99a0-7c7f5fb77fd8.png)

`flutter packages get`コマンドを叩いて、パッケージを取得すると、以下のようになった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1215907/56a

元記事を表示

FlutterでDatetime型の時間がずれる

## 現象
“`dart
final datetime = Datetime.now();
print(datetime); // ここが9時間前になってしまう
print(datetime.timeZoneName); // GMT <- JSTにしたい ``` ## 環境 - Android Studio (Jellyfish) - Android StudioのEmulator(Pixcel7) ``` Flutter 3.33 Dart 3.5.0 ``` ## 原因 - DateTimeクラスは端末のタイムゾーンに依存している ## 対応策 エミュレーター上のSetting(設定)からSystem(システム)で日付と時刻のタイムゾーンを設定する ## 参考 https://www.petadocs.com/other/question/9

元記事を表示

Flutterのマテリアル構造とレイアウト ~FlutterAppの基本~

### [FlutterAppの基本](https://flutter.ctrnost.com/tutorial/tutorial03/)

コメントアウトで自分の理解を書いてみました。
“`dart
// material designを使用するためのパッケージのimport
import ‘package:flutter/material.dart’;

// 返り値を返さないmain関数にrunApp関数を代入する
// runApp関数は引数にWidgetを取り、それを画面に表示する機能を持つ
// void main()のvoidとは、返り値がないことを示す。
void main() => runApp(MyApp());

// class MyAppはStatelessWidgetクラスを継承する
// StatelessWidgetクラスは、状態を持たないWidgetを作成するためのクラス
// 一度描画されたら変更されることがないWidgetを作成するためのクラス
class MyApp extends StatelessWidget {

// @overr

元記事を表示

Javaの日付の扱い~LocalDateTime系とInstantを使い分ける~(Android)

Javaには日付を扱う型にはさまざまあります。どれを使ったらいいのでしょう。

今回は使い分けを自分なりにまとめました。

なおkotlinx.datetimeについては今回扱いません。
こちらはKMPやシリアライズで使われるKotlin製の日付型でありますが、Javaの型をKotlinで使えるようにしたものですので、考え方は基本同じだと思っています。

またAndroidアプリの開発で使うことを前提としています。

## java.util.Dateやjava.util.Calendarは基本使わない
Dateは一部のメソッドが非推奨となっています。
> The corresponding methods in Date are deprecated.
>
[Date \(Java SE 11 & JDK 11 \)](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Date.html)

DateやCalendarはレガシーとされており、APIも使いづらいです。
古いクラスとして、新規開発

元記事を表示

今更だけどAndroid Device Policyについて調べる

twitter

## Android Device Policyってなんだ?
https://support.google.com/work/android/answer/12076837?hl=en#zippy=

https://support.google.com/work/android/answer/6192678

> Android Device Policy は、IT 管理者が Android Management API を使用する企業向けモバイル管理(EMM)プロバイダを介して Android デバイスを直接管理できるようにする組み込みの Device Policy Controller です。

>Device Policy Controller アプリでは、次のことを行います。
> * EMM ソフトウェアと通信して、プロファイルとデバイスの制限と設定を適用します
> * 管理対象の設定を実装し、デバイスが EMM のポリシーに準拠していることを確認します

Android Device Policy

元記事を表示

MPAndroidChart の description位置調整

Androidアプリで利用されているグラフライブラリの [MPAndroidChart](https://github.com/PhilJay/MPAndroidChart) で、グラフのdescriptionの位置を調整したときのメモです。

[Speed Test/ネット回線速度測定](https://play.google.com/store/apps/details?id=com.hnimrod.speedtest)というAndroidアプリでヒストグラムをBarChartで描画したのですが、デフォルトで設定したdescriptionが以下のようにグラフに重なるように表示されていました。

![before.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59203/95b78d2f-6df1-a10d-159c-02d5f88a311f.png)

赤枠のdescriptionをグラフに重ならないように表示するために、BarDataの`yOffset`と`xOffset`を設定して位置調整できま

元記事を表示

【Androidアプリ】Fragment間の遷移(切り替え)

# はじめに

こんにちは、エンジニアのkeitaMaxです。

今回は前回作成したFragmentをもう一つ作成して、Fragment間の遷移(切り替え)をやろうと思います。

前回の記事

https://qiita.com/keitaMax/items/720f92d9b51e642b079c

# 実装方法

MainActivityにフラグメントを切り替える関数を作成し、それを各フラグメントから呼んで、画面遷移(切り替え)をおこなようと思います。

# Fragment作成

Fragmentをもう一つ作成しました。名前を`ExampleTwoFragment`としました。

“`kotlin:ExampleTwoFragment

class ExampleTwoFragment : Fragment() {

private var _binding: FragmentExampleTwoBinding? = null
private val binding get() = _binding!!

override fun onCreateVi

元記事を表示

Flutterのマテリアル構造とレイアウト ~グリッド形式でカードを追加する~

### [5. グリッド形式でカードを追加する](https://codelabs.developers.google.com/codelabs/mdc-102-flutter?hl=ja#4)
#### GridView を追加する
+ アイテム数が固定されていて、列数も決まっているので、`GridView.count()`を使用する
+ プロパティは以下の4つ
+ `crossAxisCount:`(必須)
+ 列数を指定
+ `padding:` (省略可能)
+ グリッド全体の内側の余白を指定
+ `EdgeInsets`クラスを使用して、上下左右の余白を個別に設定できる
+ 例: `padding: EdgeInsets.all(8.0)` (上下左右に8.0の余白)
+ `childAspectRatio:`(省略可能)
+ アイテムの縦横比を指定
+ `childAspectRatio: 1.0`とすると、正方形のアイテムが作成される
+ `children:`(必須)
+ グリッドに表示するウィジェットのリストを

元記事を表示

Flutterのマテリアル構造とレイアウト

https://docs.flutter.dev/codelabs#designing-a-flutter-ui

👆を参考に進めていきたいと思います。

### [MDC-102 Flutter: マテリアルの構造とレイアウト](https://codelabs.developers.google.com/codelabs/mdc-102-flutter?hl=ja#3)

#### AppBarの最小構成
“`dart
import ‘package:flutter/material.dart’;

void main() {
runApp(
const MaterialApp(
debugShowCheckedModeBanner: false,
home: TutorialHome(),
),
);
}

class TutorialHome extends StatelessWidget {
const TutorialHome({super.key});

@override
Widget build(Build

元記事を表示

AndroidアプリでFragmentを作成して表示する

# はじめに

こんにちは、Androidアプリ開発の勉強を開始したばかりのkeitaMaxです。

https://developer.android.com/guide/fragments/create?hl=ja#kts

公式に従ってやります。

# 設定追加

build.gradleのdependenciesに以下を追加します。

“`
implementation(libs.androidx.fragment.ktx)
“`

# フラグメントを追加

フラグメントを追加します。

`File>New>Fragment>FullScreenFragment`の順に操作し、名前を`ExampleFragment`にして追加しました。

![スクリーンショット 2024-07-23 10.43.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/7e9a6f8f-9c76-8569-8059-1610a2f6663c.png)

`ExampleFragment`と`fra

元記事を表示

OTHERカテゴリの最新記事