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

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

Androidでメディア再生の問題を調べる

xperia5v(Android 13)でYoutubeやYoutube music,Spotifyなど音楽・動画などアプリを問わずメディアの再生が突然一時停止する問題が起きたので状況を調べてみる

メモリ不足によるタスクキルという線も考えていたんですけど発生条件がランダムでフォアグラウンドやバックグラウンド関係なく、ロック中であろうがなかろうが状況を問わず発生するため少し違う感じ。

原因もわからずちまちま聞いてる音楽や動画を止められるのはストレスがたまるのでじっくり調べたところAndroidでは[音声フォーカス](https://source.android.com/docs/devices/automotive/audio/audio-focus)という仕組みで音声の操作を行っている様子。

今回はadbでコマンドでこの音声フォーカスの状況を調べてみて、原因となる情報を探る話です。

# 調査方法
USBデバッグなどで問題の端末にadbを実行できるようにして、以下のコマンドでオーディオ周りのダンプデータを取得します。
“`bash
adb shell dumpsys audio

元記事を表示

Next.js Native使ってみた

# Next.js Nativeってなんぞや❓
[Capacitor](https://capacitorjs.jp/docs) と呼ばれるwebアプリをクロスプラットフォーム化するライブラリを使って、
Next.jsをネイティブアプリ化できるようにしたものみたい👀

https://nextjs-native.com/

Githubにてスターターキットも用意されてたので、これを試す
https://github.com/RobSchilderr/nextjs-native-starter

とりあえず、Githubからクローン

“`bash
$ git clone git@github.com:RobSchilderr/nextjs-native-starter.git
Cloning into ‘nextjs-native-starter’…
remote: Enumerating objects: 3127, done.
remote: Counting objects: 100% (747/747), done.
remote: Compressing objects

元記事を表示

Androidエミュレーターの通信をBurp Suiteで取得する

エミュレーターの通信を Burp Suite で取りたかったので、手順を簡単にまとめます。
手順として下記2つの方法があります。
* [ポート転送を利用する方法](#ポート転送を利用する方法)
* [仮想ネットワークのIPを指定する方法](#仮想ネットワークのipを指定する方法)

## 検証環境

* macOS Monterey 12.7.1
* Android 12.0 Google APIs (API 31) ※root が使用できるもの
* Burp Suite Professional v2023.10.3.6

## ポート転送を利用する方法

複数起動している場合は、適宜 `adb -s [デバイスID]` を指定してください。

### 手順

1. Android エミュレーターを起動する
1. Burpを `Loopback Only (127.0.0.1)`、`8080` ポートで開始する
1. Androidエミュレーターのプロキシ設定をする ( iptables または Wi-Fi の Proxy 設定)
1. エミュレーターからホスト側へポート転送を

元記事を表示

[Jetpack Compose] scrollStateに連動したScrollBarの実装

この記事はand factory.inc Advent Calendar 2023 4日目の記事です。
昨日は @ichikawa7ss さんの「既存プロジェクトへのデザインシステム導入の取り組み」でした。

## はじめに

Jetpack Composeで、Android ViewのようなScrollBarを表示する標準のComposeは用意されておらず、自分で実装する必要があります。この記事では、scrollStateに連動して表示されるScrollBarの実装を紹介します。

:::note warn
LazyListStateに対応したScrollBarも別途自分で作る必要がありますが、この記事では紹介しません。LazyListのほうが作るのは難しい印象です😅
:::

## 動き

![adbeem-20231203194316.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166629/f662a9c2-ca15-3191-5e7e-bd259078f2d6.gif)

## Scroll

元記事を表示

[Android] Contextって何者なん?~Application Context編~

## Contextって何者?
Androidではよく引数にcontextを渡すことがあります。(画面遷移のintent作成時など。)
私もAndroidアプリを開発を始めた際に、疑問に思ったことがあります。
ですので、今回はこの**Context**に注目してみようと思います。

## 大まかに2種類あるContext
実はAndroidにおけるContextは大きく分けて以下の2種類があります。
1. Application Context
1. Activity Context

今回は**Application Context**について考えてみて、明日Activity Contextについて記載したいと思います。

## Contextとは
まず、公式サイトの内容を見てみたいと思います。
https://developer.android.com/reference/android/content/Context
>Interface to global information about an application environment. This is an abs

元記事を表示

JetpackComposeのHorizontalPagerを使ってみた。

今回はHorizontalPagerを使用してみました。

今回は下記1.4.0での実装方法です。
“`
“androidx.compose.foundation:foundation:1.4.0”
“`

# サンプルコード
“`HorizontalPagerSample.kt
const val PAGE = 3
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun HorizontalPagerSample() {
val pagerState = rememberPagerState(initialPage = 0)
Box(
modifier = Modifier.fillMaxSize()
) {
HorizontalPager(
state = pagerState,
pageCount = PAGE
) { page ->
Column(

元記事を表示

複雑なDeepLinkをJetpackComposeで実装するPart4

# はじめに
今回は、複雑なDeepLinkが来たときやDeepLinkの内容によってホーム画面で出しわけないといけない時の実装を紹介していきます

### 本文
最後はMainNavGraphの実装です。
“`kotlin:MainNavGraph
@Composable
fun MainNavGraph(
navController: NavHostController,
// sealdClassでどの画面に遷移するのかを引数でもらいます
navigateScreenType: NavigateScreenType,
) {
// 何もNavGraphをセットしてない状態でゲットを呼ぶとExceptionが帰ってくるので、その時は何もリンクがなかったとしてホーム画面を表示するのみにします
val startDestination = try {
// ホーム画面で表示するダイアログ等がDeepLinkにあるときはNavGraph自体を更新しないとホーム画面に変更が通知されないので強制的にNavGraphを変更します
if

元記事を表示

【Android】Bluetoothについてのメモ

#
Android Bluetooth API を介した Bluetooth 機能へのアクセスが可能で、
Androidでは他のBluetooth端末とワイヤレスでデータの交換ができます。
具体的にできることは以下です。

* 他の Bluetooth 端末をスキャンする
* ペア設定された Bluetooth 端末のローカル Bluetooth アダプタを問い合わせる
* RFCOMM チャンネルを確立する
* Service Discovery を使用して他の端末に接続する
* 他の端末とデータを送受信する
* 複数の接続を管理する

# Permission
開発の中でBluetoothを使用するには パーミッションの許可が必要で
AndroidManifestに

“`

    
    

元記事を表示

AndroidStudioのlogcatを見やすくする方法

# 概要
AndroidStuioを最新版にアップグレードしたところ、logcatが見にくくなった。
![スクリーンショット 2023-12-03 10.57.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183689/bd1c86e5-152c-bece-09c9-5fcf652b195b.png)
「com…ew.rebuildingsagaanotherstory」の表示などが出るようになり、元々表示したいログが改行されてしまう。(元々のlogcat設定が消えてしまったからかも)
# 解決方法
Logcatの以下のアイコンをクリックする。

![スクリーンショット 2023-12-03 11.00.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183689/e4c35a19-c107-5917-5c36-fede4a9d6547.png)

デフォルトで「StandardView」にチェックが入って

元記事を表示

無関心な ViewModel

この記事は [Android Advent Calendar 2023](https://qiita.com/advent-calendar/2023/android) 3日目の記事です。

Android Developers ガイドの下記の図で示されるように UI Layer である ViewModel から直接 Data Layer への関心をなくしたいです。 ViewModel から Data Layer へのアクセスは Domain Layer に任せます。

UI layer cannot access data layer directly, it must go through the Domain layer

https://developer.android.com/topic/architec

元記事を表示

【体験記】私がモバイルエンジニアを続ける理由

こちらはアドベントカレンダーの2日目です。
まだ1日目の内容を見てない方はこちらを先にご確認いただけると幸いです!
https://qiita.com/minomusi/items/2e256e441654889bbbbd

それでは始めます:smiley:

## エンジニアを続けるか悩んだ数年とそこから
1日目の記事の最後に記載しましたが、私が新人の時は全く役に立たない新人だったなぁ〜と今考えると思います。

そんなこんなで1年、2年とエンジニアの仕事をし続けていた毎日ですが、常に「自分はエンジニアでずっと食べていくのだろうか?」、「向いてないのではないか?」ということを考えていた日々でした。
しかし、面白いことに最初は全くわからなかったモバイルアプリの開発ですが、2年もほぼ毎日してると少しずつですがわかるようになり思っていることを実現もできるようになって行きました。
(上司、先輩、同期などの支えが多くあったのは事実です。私一人の力では絶対に無理でした。)

そして3年目で初めて、携わっていたAndroidアプリの技術責任者をすることになります。

## モバイルアプリ超楽し〜
3

元記事を表示

スマホアプリ開発を始めたい自分がMacBook Pro 14インチ(M3 PRO)を選んだ理由

初投稿です。

これまで組み込みやWindows開発を経験してきましたが、ふと副業でスマホアプリ開発をやってみたい!と思い立ち開発用にMacを購入することになりました。

この記事では
* なぜMacなのか?
* なぜBookなのか?
* なぜM3 PROなのか?

について私なりに考えたことをご紹介します。
ベンチマークやレビューは既にたくさん記事があると思うので、この記事では初心者の視点で選ぶ際に考えたことを書いてみます。

似たような境遇の方がいらっしゃれば少しでも参考になれば幸いです。

## 購入したモデル
私が購入したのはMacBook Pro 14インチ(Late 2023, M3 PRO)です。

* プロセッサ: M3 PRO(11コアCPU, 14コアGPU)
* RAM: 18GB
* SSD: 1TB

プロセッサ、RAMはM3 PROとしては最低構成、SSDは最低構成の512GBからアップグレードしました。

M2世代と比べるとM3とM3 MAXの進化が目覚ましかったため、やや影の薄い感のあるM3 PROですが、個人的にはコスパは決して悪くないように思っていま

元記事を表示

恥ずかしがり屋の ViewModel

この記事は [Android Advent Calendar 2023](https://qiita.com/advent-calendar/2023/android) 2日目の記事です。

恥ずかしがり屋の ViewModel ということで property を公開しすぎないようにしたいです。

[1日目](https://qiita.com/ykws/items/a418572adffc8192ef30)に続き Android Developers でガイドで示されているサンプルからコードを抜粋して紹介します。

https://developer.android.com/topic/architecture/ui-layer#samples

## Good

`StateFlow` を公開するのがシンプルでわかりやすいです。

“`kotlin
private val _state = MutableStateFlow(HomeViewState())

val state: StateFlow
g

元記事を表示

Pixel6のNativeカーネル上でdockerを動かす(Androidのカスタムカーネル)

## はじめに
Android上でdcokerが動けば便利じゃないかな〜と思いつつ、ズバリそれなページがあったのでチャレンジしてみました。

**Docker on Android(こっちがメイン)**
https://gist.github.com/FreddieOliveira/efe850df7ff3951cb62d74bd770dce27

**Docker-native-on-Termux-on-Android(上記ページの補足的な情報として)**

https://github.com/Morakhiyasaiyam/Docker-native-on-Termux-on-Android

セルラー通信(4G / 5G)ができるスマホ端末をホストに、docker絡みの開発やら動作環境が作れるので便利かな〜と。色々な

元記事を表示

Compose MultiplatformでいつものQiitaビューアを作ってみた

この記事は[NTTテクノクロス Advent Calendar 2023 シリーズ1](https://qiita.com/advent-calendar/2023/ntt-tx)の2日目です。

こんにちは、NTTテクノクロスの戸部@etctaroと申します。

普段は社内でモバイルアプリ開発関連の技術支援や社内向けのノウハウ記事執筆、社内研修講師活動、社内コミュニティ活動などを行なっています。

毎年恒例のアドカレですが、今年も私はComposeで記事を一本を書きました。

今回のお題は「Compose Multiplatform」です。

★ところで、記事の前に宣伝です。

先日まで開催されていた技術書典15では当社の仲間と書籍を出しています。
今回私が執筆した本は以下の通り。

– [ゼロから始めるFlutterアプリ開発入門 2023.11版](https://techbookfest.org/product/5925951072370688)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazon

元記事を表示

ExoPlayer供養

# ごあいさつ
この記事は[Globeeアドベントカレンダー](https://qiita.com/advent-calendar/2023/globee)2日目の記事です。

この度はExoPlayer供養にご列席下さりありがとうございます。
ExoPlayerがDeprecatedになったことで、出す機会を失ったナレッジを記事化し、ExoPlayerの供養としたいと思います。

# この記事で書きたいこと
* ExoPlayerを使用して、俺俺HLSのマニフェストをパースして再生する
* ExoPlayerを使用して、DRMコンテンツを再生する
* 複数のフォーマットのコンテンツ保護を共存させる

# この記事でやらないこと
* コンテンツ保護の意義や解説
* 一般的な使い方

# ExoPlayerで俺俺HLSのマニフェストをパースする
HLSはDRMに比べると弱いと言われていますが、逆を言えば融通が聞くということでもあります。
マニフェストファイルを独自フォーマットに変更すれば鍵の取得など、コンテンツ管理に融通を利かすことができます。

## 1. パサーを実装する
HLSのP

元記事を表示

【体験記】私がモバイルエンジニアになった経緯

## はじめに
初の一人アドベントカレンダーの記念すべき1日目となります。(うっかりしていて、日付を超えてしまったのは内緒:innocent:)

1日目ということで、少し自分の過去について考えてみようと思います。
もしよければ最後までお付き合いいただけると幸いです!:writing_hand:

## 情報系の学校に入学した経緯
私は幼い頃から、PCと触れ合っていて機械大好き!!という人間ではありません。
初めて自分のPCを持ったのは専門学生になる際に学校から言われた時です。
それまで家庭ではPCに触れ合う機会は全くなく、中学や高校での情報の授業で触るくらいのレベルでした。

ですので、ローマ字入力もまともにできない。そんな状態で情報系の専門学校に行きました。
(正直いうと第一志望校に落ちてしまい、家庭事情などからその専門学校しか行ける学校がなかった:rolling_eyes:)

では入ってみてどうだったかというと。。。
– 周りはPCに詳しい連中が多い。
– 既にプログラミングを齧ってきている人が半数以上。
– タイピングの実力テストでは**ダントツの最下位**。

と中々のハー

元記事を表示

Androidのアニメーションオフ設定が地味だけど結構インパクトでかかった話(Composeでボイボ劇場も作ったよ)

# 導入

発覚など結構リアルに近いシナリオのボイボ劇場をComposeだけで作ってみましたのでもしよければご覧になってください!こちらの記事で同様のノリで書くと抵抗ある方もいると思ったため、こちらでは動画で触れていないコード部分について中心にいつも通り書いていきます。

## 意外と見落としがちな「ユーザー補助」

動画でも触れているのですが開発者オプションで昔からある、アニメーションスケールを一律オフにするかなり強めのオプションと

元記事を表示

Android 階層型アーキテクチャ データレイヤについて

# はじめに
Android Developersで紹介されている階層型アーキテクチャの中にはデータレイヤという層が存在するので、簡単にまとめてみる。

# データレイヤの構造
データレイヤにはアプリに必要なデータとビジネスロジックが含まれる。UI関連の状態やUIロジックに関してはUIレイヤの責任範囲になる。
また、データレイヤはRepositoriesとDataSourcesによって構成される。

## Repositories

命名規則は

データの種類 + Repository

例:NewsRepositoryなど

### リポジトリの持つ役割

– アプリの他の部分にデータを公開する。
– データの変更を一元管理する。
– 複数のデータソース間の競合を解決する。
– アプリの他の部分からデータソースを抽象化する。
– ビジネス ロジックを格納する。

### リポジトリはコンストラクタでデータソースを受け取る

“`kotlin
class ContentRepository(
private val contentRemoteDataSource: Con

元記事を表示

300 contribution から毎月Qiita投稿して6ヶ月で 1000 contribution 到達した話

# アドベントカレンダーの季節ですね^-^
こんにちは!
STORES 株式会社で STORES 決済 のAndroidエンジニアをしています、[みっちゃん](https://twitter.com/mimimi_engineer)です!

今日は12月1日!

エンジニアのみなさんはそろそろ会社のテックブログやQiitaなどのアドベントカレンダーに参加するぞと意気込んでいることかと思います。

実は私、2023年の目標に「毎月1記事書く」というのを掲げておりました。

![スクリーンショット 2023-10-20 14.25.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906559/8dbbe723-f1fc-4df8-63db-3e9b0a4cb0d5.png)

:::note warn
急にこんなものを見せられて困っている方もいるかと存じますが、私は目標厨なので毎年一年の初めに目標を設定し、年末に振り返ります。
:::

2022年12月時点では300 contributionもないく

元記事を表示

OTHERカテゴリの最新記事