Surf's UP for Android の開発でのもろもろ

  • 投稿:
  • 更新:2019年12月 4日
  • by
  • in

s_sup_android_02.png

左が Android版、右が iOS版となります。
かなりデザインが違っちゃいましたが、先行開発したiOS版で色々遊んじゃったので、Android版は正攻法で作って見ました。
大抵はマニュアルを2種類書くのが面倒なのでUIは同じにしちゃうのですが、機能的にはあまり多くないので、Androidでは作りやすいようにシンプルにしました。これはこれで使い易いかと思います。

iOS版を作った時「この手のアプリはAndroidの方が作り易いのでは?」と、確かFBで言ったような気がしますが、これが以外に面倒でした…
DOZEモード(どうしてもワンピースのオーズが頭に浮かぶ…)への対応とか、ロックアウト状態からウェイクアップしてActivityの表示とか等々…
それがまた Androidのバージョン毎で微妙に違うので、結局アラーム通知の部分は3回作り替えました。

これらアプリのベースとなる、夜明けや日の出時間を計算するJSコードを書いたときは「アラームアプリなんて超簡単に作れるでしょ!」と思ってたのですけどね (^^;

波乗り目覚まし - Surf's UP for Android もうすぐリリース

  • 投稿:
  • 更新:2019年12月 4日
  • by
  • in

s_sup_android_01.png

波乗り目覚まし - Surf’s UP for Android もうすぐリリース

サーファーのための目覚ましアプリ「波乗り目覚まし - Surf’s UP for Android」を近々リリースします。 公開ベータを利用できるので、試しに利用してみたい方はこちらからダウンロードして下さい。

このアプリはアラームを設定する場所の夜明けや日の出を自動計算してアラームに設定できます。
夜明け時間は日々変化するので、毎度毎度アラームの設定を変更する必要がありません。
Android-10 のダークテーマにも対応しています。

ダウンロードはこちらから
現在は先行受付中です。ベータ版を利用する場合はこちらです。


iOS版のダウンロードはこちらから

Tasker から 「Tap to silent」を実行

  • 投稿:
  • 更新:2019年11月 8日
  • by
  • in

「Tap to silent」はデバイスを簡単に消音モードにしたり解除したりできるシンプルなAndroidアプリです。
詳細な説明はこちらを参照して下さい。



このアプリは Tasker を使ってコントロールできます。

自分のデバイス(Pixel4)は仕事用に使ってて、社内に居るときは音を鳴らすようにしているのですが、退社したときは消音にしていました。
これを Tasker と「Tap to silent」を使って自動化させます。
場所を判定して処理を分岐させる設定はググれば見つかるとおもうので省きます。このあたりの説明を見ると良いかも。

Tasker から Intent を発行して「Tap to silent」を起動する部分は以下のような設定になります。

まずは Intent の設定をアクションカテゴリーから探さないといけないのですが、これがなかなか見つからなかった…
「タスク>アクションのカテゴリー」の検索(絞り込みの部分)に inten とか入れると出てきます。

tasker_01.png

次に Intent の設定です。赤枠の部分を設定します。

tasker_02.png

「行動」には android.intent.action.SEND を入力
「MIMEタイプ」には text/plain を入力
「Extra」には
  消音 silent:on
  メディア音量以外消音 silent:on_except_music
  消音解除 silent:off
「パッケージ」には com.jjworkshop.android.taptosilent を入力
「クラス」には com.jjworkshop.android.taptosilent.MainActivity を入力
「対象」を Activity に選択

「Extra」のvalueは、on が消音、on_except_music はメディア再生音以外を消音、off は消音モードになる直前の音量に復元します。

このタスクを先の場所判定の設定と合わせてやれば、自分が居る場所により消音モードを変更できます。
お試しあれ!

またまた Androidの新アプリをリリース「Tap to silent」

  • 投稿:
  • 更新:2019年11月 8日
  • by
  • in

taptosilent_promotion_1024x500.png

同等の処理は Tasker だけでも出来るのですが、設定が面倒そうなので消音の部分だけアプリで作ってみました。
単体で起動すると消音して、アプリをタップして終了させると元のサウンド設定に戻ります。



Androidの音量設定は複数ありデバイスの設定から個別に設定できるのですが、このアプリでは以下の音を消音します。

  1. ダイアルトーン
  2. 通知音量
  3. アラーム音量
  4. 音楽再生音量
  5. 着信音量
  6. システムメッセージ音量

この中で 2,5,6 は共通のボリューム設定となるようです。(もしかしたらデバイスにより違うかも知れません)

このアプリは外部プログラムからからコントロールできるように起動時のパラメタをプログラムから設定できるようにしています。
また、Tasker等 Intent を発行できる自動処理アプリから連動することもできます。元はと言えば、これがやりたくて作ったアプリですね。
Tasker と連携したい場合はこちらの記事を参照して下さい。
以下が、アプリ連動時の設定値です。

Package name: com.jjworkshop.android.taptosilent
Class Name: com.jjworkshop.android.taptosilent.MainActivity
Extra: name="silent" value="on" か "off" か "on_except_music"

Extraの設定は “on” で消音モードにします。”off” で消音を解除し元の設定にします。”on_except_music” は音楽再生や動画再生などのメディア再生音以外を消音にします。
外部起動した場合は、アプリは処理後に自動終了しタスクリストに残りません。

プログラム(Kotlin)から処理する場合は以下のようにします。

val packageName = "com.jjworkshop.android.taptosilent"
val className = "com.jjworkshop.android.taptosilent.MainActivity"
val intent = intent.setClassName(packageName, className)
intent.putExtra("silent", "on")  // 消音する
startActivity(intent)

外部起動でもアプリをタップして起動した場合でも、復元する音量設定は消音処理する時点での音量を保存して復元時に利用します。
なので、アプリで消音後に音量の設定をデバイスから変更しても、このアプリで消音モードを解除すると保存時の音量設定に戻ります。
また、消音したままでアプリを強制終了するとデバイスは消音されたままとなります。これを解除するには一度アプリを起動してから正しく終了すると音量を復元することができます。

メモ:
当初、パラメタ無しでアプリがタスクから消えたら復元とかできると便利だなぁーと、色々とコードを試してみたのですが、アプリのライフサイクルで、アプリ終了直前に処理を入れることが出来るのは APIレベル29(今の最新のAndroid-Q)だけでした。
他は終了直前を通知を受けることはできても、数行のコードでも途中でシステムからパージされるようで、思うように実行できませんでした。Serviceとか常駐させればなんとかなったのかも知れませんが、まぁそこまでやるアプリでもないので(笑)

Androidの新アプリをリリース「Tap to lock」

  • 投稿:
  • 更新:2019年11月 5日
  • by
  • in

s_promotion_1024x500.png

追記:2019/11/5
ちょっと名称を変えました。どっちかというとスリープじゃなくてロックだったので…

似たようなアプリは既にあったのですが、まぁ簡単なので作ってみました。
起動すると2秒後に画面をロックするだけのアプリです。
こんなアプリでもリリースできる Google Play は自由で良いなぁ…



gotobed03.png

Taskerとかと合わせて使えば、シェイクしてロックとか簡単にできます。

が、Pixel4で問題が…
ロックはするのですが、管理者ロックになるためか、次にウェイクアップさせようとすると顔認証でなくPINコードを要求されます。
なのであんまり便利じゃ無い… デバイスの設定でなんとかなるのかなぁ?
コードは書けるけど使い方には超疎い…
だれか知ってたら教えて(笑)

ソースコードはこちらにアップしました。好きに改良なり改造なりして使って構いません。

波乗り目覚まし - Surf's UP リリース

  • 投稿:
  • 更新:2019年10月17日
  • by
  • in

sup-insta-jp.png

サーファーのための目覚ましアプリ「波乗り目覚まし - Surf’s UP 」をリリースしました。
このアプリはアラームを設定する場所の夜明けや日の出を自動計算してアラームに設定できます。
夜明け時間は日々変化するので、毎度毎度アラームの設定を変更する必要がありません。

ダウンロードはこちらから

今回はリジェクト2回…

初回は位置情報の取得に時間がかかるときに、何もアクションをいれなかったらアウトでした。
これはクルクルを入れて対応
つか、そもそもなんで初回ロケーションの取得に数秒もかかるのよ… というか、実機ではほぼ滅多に出ないのに、たまたまテスターがやったときに発症したか…

2度目はプッシュ通知を使ってるときはユーザーに確認しろと…
これアプリを使用していくと、必要に応じて確認する処理は入れてあったのだけど、見落とされたか…
戦うのも面倒なので、アプリ起動時に同じ処理を入れて対応

なんだか、新しいアプリをリリースする度にAppleが嫌いになっていくような…
新しく発売になったiPhoneも、いまいち「欲しいなぁー」という気持ちにならないしなぁ…

まぁそんなこんなで、これをポチッとしてしまいました(笑)
このデバイスの方がiPhoneよりは遙かにInnovationを感じるのは俺だけでしょうか…?
とりあえず最近リリースした iOS版のアプリ2つのAndroid版を作り始めようかな!

Surf's UP デザイン

  • 投稿:
  • 更新:2019年10月10日
  • by
  • in

surfsup_beta.png

以前JSでコア部分のプロトタイプコードを書きましたが、そのUIになる部分がこんな感じです。

波乗りしている人は解ると思うけど(早起きサーファーね)日の出時間って週毎けっこう変化があって、夜明け近くの時刻にアラームを設定しているんだけど、毎度少しずつ調整しないとダメなんです。
ってことで、アプリで日の出時間をロケーションから計算してアラームを設定できればと思いました。

ただ、iOSで目覚まし時計作るのって制約が多くて意外に面倒なんです。
本当は、正規アプリの「時計」のアラームに連動できれば面倒がないのですが、URLスキームでの連動は出来なくて、残るまともな選択肢は2つだけ。

1つはバックグラウンドで待機してサウンドを再生する。
もう1つは通知サウンドを利用する。

で、どちらも一長一短があって、前者の問題は「バックグラウンドでアプリが待機していないとダメ」「なのでバッテリーを食う」「アラームでのBG処理は認められてないので、Appleの審査を通すのにそれ以外の理由で何かを実装をしないとダメ」の3つ。
後者の方は、「アラームじゃないのでサイレントモードで音が出せない」「サウンドの再生時間は30秒まで」の2つ。

問題の数で選んだわけでも無いですが、後者の方がアプリの状態に関係なく、一度設定すれば必ずアラームが鳴るので(前者の場合は何かの都合でBGからアプリがパージされるとアラームは鳴らない)後者の手法でやろうかと思います。

色々調べてみて、正直なところ、この手のアプリは Android で作った方が使い勝手はよくなると思う。

Calculate sunrise, sunset and more...

idea_20190920.png

I came up with an idea for new app so made sample code with JS.
But this code is someone make it. I just modified a bit because it will convert to Swift for my app.

Calculate sunrise, sunset and more…

新しいアプリのアイデアを思いついたので、ちょこっとサンプルコードをJSで書いてみました。
とはいえ、このコードは誰かが作ったコードで、後で Swift にコンバートするので、少し整理してシンプルにしただけですけどね。

全国の道の駅を検索 - RS Station v1.5.0 リリースしました

  • 投稿:
  • 更新:2019年9月 8日
  • by
  • in

rs_station_20190908_1.png

iOS/Android版共に v1.5.0 にアップデートしストアで公開済です。
今回のアップデートで、全ての道の駅を表示するモードを付けました。左上(画像の矢印部分)アイコンをタップすると、通常モードとクラスタリングモード(全体表示)を切り替えて表示できます。
クラスタリングモードではズーム値により、近隣に5つ以上マップピンが有る場合はクラスタリング(集約)します。クラスタリングはマップをズームインすることでクラスタリングが解除されていきます。

クラスタリングモードは、条件検索や都道府県選択によるマップ表示等で自動解除されます。また同アイコンを再タップすることでも解除できます。

最新版は以下よりダウンロード可能です。


全国の道の駅を検索 - RS Station 全ての駅の表示テスト(Android版)

  • 投稿:
  • 更新:2019年9月 6日
  • by
  • in

とりあえずAndroid版もテスト中です。
iOS版に比べると、どうもClusteringのためのレンダリングが遅くてタイミングによっては画面がチラつきますねぇー。
この動画はシミュレーターによるものなので、実機だともう少し改善されるかもです。
ある程度は対処したのですが、このあたりは Google maps ライブラリの実装による部分が主なので、現時点ではこれ以上改善するのが少し難しいです。

とはいえ、普通に使う分(ズームの「+/−」の連打とかしなければ)にはほぼ問題ないレベルです。
もうしばらく問題が無いかどうかチェックしたら iOS版と合わせて公開しようかと思います。

iOS版の実装は割と簡単にできたのですが Android版かなり苦戦しました。
Clusteringのサンプルはネットに結構ころがってるんだけど、マーカーのカラーを変更したり、Dynamicに更新する処理サンプルがほぼ皆無で、色々試行錯誤しながら実装したので結構時間かかりました。