ともちゃんのアプリ開発日記

組込みC言語プログラマだったともちゃんが、四苦八苦しながら、AndroidのJAVA/Kotlin、iOSのSwiftUIを習得して行きます。ともちゃんの備忘録も兼ねています。

iOS用カレンダーライブラリUCalendarView

iOS

カレンダーの日のセルにデータを表示できるiOSライブラリ「UCalnedarView」をGithubに公開しました。 github.com iOS用CalendarView

Android 11対応リネームアプリ PM Rename

最近、スマホをAndroid 11対応に変えて、DSC Auto Renameという自動リネームアプリが動かずに、PM Rename(PM Rename - 写真/動画のファイル名を自動変更【広告なし】 - Google Play のアプリ)に乗り換えていただけるユーザ様が多くいらっしゃいます。 私も昔…

Android 12 ベータ4対応を完了しました

Indigo Software(広告無しのAndroidアプリ - 広告無しのAndroidアプリ - Indigo Software)のアプリは、Android 12 ベータ4対応を完了しました。

Android 12ベータ3対応を始めました。

先日、Android 12のベータ3がリリースされました。 APIが最終版になっていますので、アプリのテストが始められます。 手始めに、「からだログ」のAndroid 12ベータ3対応を行ってみました。 Android 11からの変更点はあまり無いような感じです。 何もしないで…

Windows 11の必要条件のTPM2.0について

WIndows11の最小動作条件がアナウンスされています。 www.microsoft.com この中で曲者は、TPM2.0です。 PC正常性チェックツールでWIndows11のインストール可能か調べてみると、インストール不可と出ました。このツール、インストール不可とは出ますが、どこ…

Drawer内のNavigation Header内にSpinnerを置く

Drawer内のNavigation Header内にSpinnerを置き、正常に動作させるのに苦労しました。 やりたいこと 下記の様に、Drawer内のNavigation Header内にSpinnerを置きたい。 DrawerのSpinner Layout XML activity_min.xml

Firebaseを使用したPeer to Peerプッシュ通信(SMS代替)

背景 Googleプレイストアでは、SMSに対する規制が強化されている。 そのため、手軽なPush通知の手段が欲しい。 Push通知のためのサーバを置きたくない。 アイデア シンプルPush通知のアイデア 参照リンク AndroidのPush通知(FCM)をサーバー知識無しで試して…

Android 11 AsyncTask 非推奨 (Java)

Android 11でAsyncTaskが非推奨になりました。 なので、java.util.concurrentのExecutorを使って書き換えました。 Asyncタスクを使った例: public static class AsyncExportProgress extends AsyncTask<Void, Void, String> { ProgressBar progressBar; Snackbar snackbar; @Ove</void,>…

Android 11 AsyncTask 非推奨 (Kotlin)

Android 11でAsyncTaskが非推奨になりました。 なので、java.util.concurrentのExecutorを使って書き換えました。 Asyncタスクを使った例: private class TestAsyncTask : AsyncTask<Void, Void, Int>() { override fun onPreExecute() { super.onPreExecute() // 前処理 } o</void,>…

Android 11 IntentService 非推奨

Android 11でIntentServiceが非推奨になりました。 JobIntentServiceを使って書き換えました。 IntentServiceの例: class TestService : IntentService("TestService") { override fun onHandleIntent(intent: Intent?) { // ここに処理を書く }} 呼び出し…

ツータッチメール2で、Intentを使用してGmailアプリに、CC, BCC, 件名, 本文が渡せない。

ツータッチメール2では、Intentという内部処理を使用して、Gmailアプリに、CC, BCC, 件名, 本文を渡しています。 ある日突然、Gmailアプリが、CC, BCC, 件名, 本文を受け付けてくれなくなりました。 その時のソースコードはこうです。 // メールアドレス設…

GoogleのCloud Pub/SubをREST APIを使って試使用してみた

GoogleのCloud Pub/SubをREST APIを使って試使用してみました。 なぜ、REST APIか? それは、Googleが推奨するClient Libraryは、Androidで動作しないためです。 Client Library(Java)はWindowsの環境変数を使用するように書いてあるのですが、ライブラリの…

MPAndroidChartでLineChartを描く

MPAndroidChartでLineChartを描くのに苦労しましたので、サンプルコードを載せておきます。 private class GraphManager { private LinearLayout chartLayout; private final Context context; public GraphManager(Context context) { this.context = conte…

Android 8.0の通知ドット(通知バッジ)を削除する。

Android 8.0の通知ドット(通知バッジ)が邪魔な時があるので、削除する設定です。 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val channel =…

画像の自動リネーム

DSC auto renameに触発されて、どうやったらこのようなアプリが作れるのかと思い、PM Rename(Photo/Movie Rename)を作りました。 1. AndroidManifest.xml <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> リネームサービスを起動するので、</uses-permission></uses-permission>

Googleカレンダーのイベントを削除する

Googleカレンダーは便利なのですが、カレンダーのイベントを自動的にあるいは一括して削除する機能がないので、一括して削除する機能を作ってみました。 AndroidManifest.xml(アカウントにアクセスするパミッション) <uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /></uses-permission></uses-permission>

タッチに追従してViewを動かす

今までどうやったらいいかわからなかったのですが、意外に簡単でした。 activity_main.xml

OAuth2認証を使用して、添付ファイル付きGmailを自動送信する

OAuth2認証を使用して、添付ファイル付きGmailを自動送信しようとしたとき、かなりつまづいたので、記事にします。 1.Javamail-androidのダウンロード activation.jar、additionnal.jar、mail.jarをダウンロードし、libsフォルダに入れます。 2.build.grad…

progressDialogがAPI26で非推奨になったため、代替でProgressBarつきSnackbarを実装してみた

Kotlinのソースです。 snackBar = Snackbar.make(dataCenter.getImportView()!!, "", Snackbar.LENGTH_INDEFINITE)val snackView = snackBar!!.view as Snackbar.SnackbarLayoutprogressBar = ProgressBar(context, null, android.R.attr.progressBarStyleHo…

排他制御(synchronizedブロック)

共通資源を排他制御するには、synchronizedブロックを使います。 synchronized(共通資源のインスタンス) { 共通資源へのアクセス} 私の実装例は以下です。(Kotlinのサンプルコード) synchronized(databaseManager.getSwitchingListDatabase()) { cursor = da…

Android 8.0の通知(NotificationChannel)

Android 8.0では、通知にNotificationChannelを設定してやる必要があります。 NotificationManager myNotification = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) …

Android 8.0のバックグラウンド処理

Android 8.0では、バックグラウンド処理に厳しい制約が付けられました。 よって、バックグラウンド処理からフォアグラウンド処理に移行するソースコードです。 サービスを呼び出す側 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { activity.startF…

端末がスリープしても動き続けるバックグラウンド処理

HandlerとWakeLockで実現しました。(ソースコードはKotlinで書いています。) AndroidManifest.xml <uses-permission android:name="android.permission.WAKE_LOCK" /> 時間を刻むタイマーサービス TimerService.kt class TimerService : Service() { val handler = Handler() companion object { private var wakelock : Powe</uses-permission>…

AlarmManagerを指定した時間に発火させる

Android 6.0以降、Dozeモードが導入されて、AlarmManagerも影響を受けるようになりました。 AlarmManagerを指定した時間に発火させるには、 Android 6.0(Marshmallow)以上:AlarmManger#setExactAndAllowWhileIdle() Android 4.4(KitKat)以上:AlarmManger#s…

Androidアプリの課金テストのアカウント

課金テスト用のアカウントは、Google Play Consoleの [設定]→ [テスタの管理] だけでなく、 [設定]→ [アカウントの詳細]→ [テスト用のアクセス権がある Gmail アカウント] にも登録しないと、課金されてしまいます。

Android 6.0のRuntime Permission

Android 6.0のRuntime Permissionの取得方法です。 1.Activityで実行する例 ストレージのアクセス権を得る場合の例です。 if (ContextCompat.checkSelfPermission(ExportImportActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageMana…

AChartEngineで円グラフを描く

AChartEngineで円グラフを描く public void displayPieChart( int dataCount, String label[], int data[], int kind) { Resources resources = context.getResources(); if (dataCount == 0) { chartLayout.removeAllViews(); return; } CategorySeries ser…

Google Playでapkの公開に時間がかかった

Google Playでアプリの公開に時間がかかりました。 36時間経っても公開されず、さすがにおかしいと思い、バージョンコードを一つ上げて、apkをアップデートしました。 そうすると、何事も無かったかのように、2時間後くらいに新バージョンコードのapkが公開…

端末起動時の時間のかかる処理

端末起動時に処理を動かすには、 android.intent.action.BOOT_COMPLETED をキャッチしてやります。 public class BootBroadcastReceiver extends BroadcastReceiver { Context context; @Override public void onReceive(Context context, Intent intent) { …

AsyncTaskのdoInBackgroundが途中終了する

AsyncTaskのdoInBackgroundが途中終了する現象に遭遇して四苦八苦しました。 AsyncTaskの呼び出し元のスレッドかActivityが終了すると、doInBackgroundも途中終了するような感じです。。 正確な記載でなくてすいません。