トップページ > 記事閲覧
Android版:通知設定について
名前:BayLeaf 日時: 2017/04/20 06:24

初めまして。 Windows版とAndroid版両方でゲームを作っています。 現在はAndroid版特有の機能を使ってみたいと考えています。 そこでAndroid版の通知についての質問なのですが、 1. アプリ外に通知できる関数が存在するか 2. もし作成することができるならば以下の関数を要望します。 2-1. 通知の表示関数(引数はchar型,可能であれば文字の色変えとbool型で通知された時間を表示するかどうかもほしい) 2-2. 通知のオンオフを一括設定できる関数(引数はbool型) 2-3. 通知のオンオフをハンドルごとに設定できる関数(引数はbool型+int型) 2-4. 通知時にバイブレーションを機能させるかどうかの関数(引数はbool型,もしくはint型でバイブの強さが設定できればなお良い) 数が多いので大変かもしれませんが、返信よろしくお願いします。
メンテ

Page: 1 |

Re: Android版:通知設定について ( No.1 )
名前:管理人 日時:2017/04/21 00:25

> 1. アプリ外に通知できる関数が存在するか アプリ外に通知とは、所謂 Android端末の画面を上端をタッチしながら下に向かってスライド させた際に表示される通知のことですよね? 今のところ通知を追加できる関数はありません。 関数を追加することはできるかもしれませんが、アプリを終了してしまうと通知を 送ることはできませんが、その点については問題ないのでしょうか?( 常にアプリを起動しておいて貰うのでしょうか? ) > 2-1. 通知の表示関数(引数はchar型,可能であれば文字の色変えとbool型で通知された時間を表示するかどうかもほしい) > 2-2. 通知のオンオフを一括設定できる関数(引数はbool型) > 2-3. 通知のオンオフをハンドルごとに設定できる関数(引数はbool型+int型) > 2-4. 通知時にバイブレーションを機能させるかどうかの関数(引数はbool型,もしくはint型でバイブの強さが設定できればなお良い) 平日は作業に充てられる時間が少ないので実装が可能かも含めて週末に調べてみます
メンテ
Re: Android版:通知設定について ( No.2 )
名前:BayLeaf 日時:2017/04/21 23:28

返信ありがとうございます。 > アプリ外に通知とは、所謂 Android端末の画面を上端をタッチしながら下に向かってスライド させた際に表示される通知のことですよね? そうです。アプリ内での通知は個人で実装できるのでアプリ外に通知できれば色々と便利かなと思います。 > 今のところ通知を追加できる関数はありません。 了解しました。 > 関数を追加することはできるかもしれませんが、アプリを終了してしまうと通知を 送ることはできませんが、その点については問題ないのでしょうか?( 常にアプリを起動しておいて貰うのでしょうか? ) アプリ終了後に通知はできなくとも問題ありません。 なので、常にアプリを起動している状態で十分です。 アプリゲーでよくあるスタミナ全回復のような通知もできたらいいですが、 DXライブラリでそれができてしまうとバグの管理などが面倒になるので現状はないほうが良いと思われます。 > 平日は作業に充てられる時間が少ないので実装が可能かも含めて週末に調べてみます ありがとうございます。気長にお待ちしています。
メンテ
Re: Android版:通知設定について ( No.3 )
名前:管理人 日時:2017/04/24 01:29

> アプリ終了後に通知はできなくとも問題ありません。 > なので、常にアプリを起動している状態で十分です。 了解です > アプリゲーでよくあるスタミナ全回復のような通知もできたらいいですが、 > DXライブラリでそれができてしまうとバグの管理などが面倒になるので現状はないほうが良いと思われます。 そうですね… スタミナ回復などの通知はアプリが起動していなくても通知できる機能『プッシュ通知』というものを 使用するのですが、こちらは Google のサーバーにアカウントを作成したりアプリを登録したりしなければ ならないので通常の通知よりも難度が高そうです… (・・; > ありがとうございます。気長にお待ちしています。 この週末で実装してしまおうと思ったのですが、間に合いませんでした orz 因みに時間を非表示にすることはできましたが、文字の色は指定することはできないようです
メンテ
Re: Android版:通知設定について ( No.4 )
名前:BayLeaf 日時:2017/04/25 00:47

> スタミナ回復などの通知はアプリが起動していなくても通知できる機能『プッシュ通知』というものを > 使用するのですが、こちらは Google のサーバーにアカウントを作成したりアプリを登録したりしなければ > ならないので通常の通知よりも難度が高そうです… (・・; 流石にGoogleサーバーを利用するとなると手軽さを損なう恐れがありそうですね。 プッシュ通知に関しては保留にして他の作業をしたほうが良いかと思われます。 > この週末で実装してしまおうと思ったのですが、間に合いませんでした orz > 因みに時間を非表示にすることはできましたが、文字の色は指定することはできないようです 文字の色指定はできたらいいなと思って書いただけなので気にしないでください。 寧ろ時間の非表示が実装できそうなことがわかっただけでも大きな収穫です。 それにしてもまだ投稿から1週間も経っていないのにも関わらず迅速な対応ありがとうございます。 実装を楽しみにしています。
メンテ
Re: Android版:通知設定について ( No.5 )
名前:管理人 日時:2017/05/05 21:03

お待たせしました、通知関係の機能を追加したこちらのバージョンをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用 以下の関数を追加しました // 通知を発行する // Title : タイトル // SubTitle : サブタイトル // Icon : アイコン ( -1 でデフォルトのアイコン ) // ShowWhen : 通知時刻を表示するか ( TRUE : 表示する FALSE : 表示しない ) // AutoCancel : 通知がタップされたら通知を削除するか // ( TRUE : タップされたら通知を削除する FALSE : Cancel されるまで通知を削除しない ) // NotifyID : 通知ID // Vibrate : 振動パターン用の int型配列( 時間の単位はミリ秒 )、NULL の場合は振動なし // ( Vibrate[0]:振動停止時間 Vibrate[1]:振動時間 Vibrate[2]:振動停止時間 Vibrate[3]:振動時間 ... 以下繰り返し ) // VibrateLength : Vibrate 配列の要素数 // LightColor : 通知時のライトの色( GetColor で取得 )、LightOnTime か LightOffTime が 0 の場合はライトの点灯無し // LightOnTime : ライトの点灯時間( 単位:ミリ秒 ) // LightOffTime : ライトの消灯時間( 単位:ミリ秒 ) extern int AndroidNotification( const TCHAR *Title, const TCHAR *SubTitle, int Icon = -1, int ShowWhen = TRUE, int AutoCancel = TRUE, int NotifyId = 0, int *Vibrate = NULL, int VibrateLength = 0, unsigned int LightColor = 0, int LightOnTime = 0 int LightOffTime = 0 ) ; // 通知をキャンセルする // NotifyID : 通知ID extern int AndroidNotificationCancel( int NotifyId ) ; // 全ての通知をキャンセルする extern int AndroidNotificationCancelAll( void ) ; すみません、今回ハンドル式にはしませんでした、引数 NotifyID でそれぞれの通知を指定することが できますので、こちらで独自に管理してください m(_ _;m > 2-1. 通知の表示関数(引数はchar型,可能であれば文字の色変えとbool型で通知された時間を表示するかどうかもほしい) 通知時間を表示するかどうかは引数 ShowWhen で指定できます > 2-2. 通知のオンオフを一括設定できる関数(引数はbool型) 通知の一括オンはありませんがオフは AndroidNotificationCancelAll で行うことができます > 2-3. 通知のオンオフをハンドルごとに設定できる関数(引数はbool型+int型) ハンドル式ではないので、通知をオンにする際はその都度 AndroidNotification を呼んでください オフは AndroidNotificationCancel で行うことができます > 2-4. 通知時にバイブレーションを機能させるかどうかの関数(引数はbool型,もしくはint型でバイブの強さが設定できればなお良い) バイブレーションの仕方は引数 Vibrate と VibrateLength で指定することができます 尚、バイブレーションの強さをアプリ側から指定することはできないようです( 振動オン時間、振動オフ時間を 指定する仕組みはありましたが、強さを指定する仕組みはありませんでした ) あと、振動と同じように通知を知らせるライトの色や点灯パターンは LightColor, LightOnTime, LightOffTime で 指定することができます 不明な点がありましたらお訊ねください m(_ _)m
メンテ
Re: Android版:通知設定について ( No.6 )
名前:BayLeaf 日時:2017/05/06 04:41

ありがとうございます! 思っていたよりも良い関数ができていて嬉しい限りです。 早速試させていただきましたので、いくつか書きます。 1. ライト関連が上手く機能していないようです(GetColor(255,255,255),2000,2000で実行しました) 2. 実行しているときに通知をタップするとホーム画面に移行してしまう現象が発生しています 3. AndroidNotification関数実行直後に通知内容を上に表示することはできないですか? (3についてはできなくとも構いませんがどんな通知がされたのか判断がつきにくいと思います、   もしできなければ実行画面に表示させる予定です) 大体のことはできたのとあらかた起こりそうなバグの確認もしたので 上記についてご返答をお待ちしています。
メンテ
Re: Android版:通知設定について ( No.7 )
名前:管理人 日時:2017/05/06 21:13

> 1. ライト関連が上手く機能していないようです(GetColor(255,255,255),2000,2000で実行しました) ライトはアプリが非アクティブの時のみ点灯するようです、 ただ、手元の端末では非アクティブではないときも点灯したので 注釈に書きませんでした… OS のバージョンによるのかもしれません お使いの Android端末の OS のバージョンは幾つでしょうか? > 2. 実行しているときに通知をタップするとホーム画面に移行してしまう現象が発生しています Androidは少し環境が異なると挙動が変わったりするので起こりえると思うのですが、 手元の環境では発生しませんでした… AndroidManifest.xml の <activity android:name="android.app.NativeActivity" と書かれている行は使い方説明ページの通り <activity android:name="android.app.NativeActivity" android:label="@string/app_name" android:configChanges="orientation|screenSize" android:launchMode="singleInstance"> となっていますでしょうか? 特に最後の android:launchMode="singleInstance" が重要なのですが… > 3. AndroidNotification関数実行直後に通知内容を上に表示することはできないですか? >  (3についてはできなくとも構いませんがどんな通知がされたのか判断がつきにくいと思います、 >   もしできなければ実行画面に表示させる予定です) すみません、今のところできません これを実現する場合は Java のコードを自前で組んでいただく必要があります <DXライブラリ Android版を使用した Androidアプリで Java のコードを実行する> https://dxlib.xsrv.jp/lecture/Android/Android_Java.html ↑こちらの解説では文字列入力ダイアログを Java コードを使用して実現するのですが、 ダイアログやステータスバーの関連の API は UIスレッドから呼ぶ必要があり、 それが今のところ C++ だけでは実現できないのです… ( UIスレッドで指定の関数を呼び出すための API である runOnUIThread が  『 C++側から Javaの関数を呼び出す』機能で使用できない ) 通知の内容をステータスバーに表示する方法はまだ調べられていませんが、 DXライブラリAndroid版は基本的にステータスバーなどを非表示にしているので、 Java のコードを使用して一時的にステータスバーを表示する処理と、通知の内容を ステータスバーに表示する処理を同時に行えば実現できると思います
メンテ
Re: Android版:通知設定について ( No.8 )
名前:BayLeaf 日時:2017/05/07 01:14

> ライトはアプリが非アクティブの時のみ点灯するようです、 > ただ、手元の端末では非アクティブではないときも点灯したので > 注釈に書きませんでした… OS のバージョンによるのかもしれません > > お使いの Android端末の OS のバージョンは幾つでしょうか? バージョンは「7.0」です。 ライトについての項目も確認してみましたが他のアプリと変わるところはありませんでした。 > AndroidManifest.xml の > > <activity android:name="android.app.NativeActivity" > > と書かれている行は使い方説明ページの通り > > <activity android:name="android.app.NativeActivity" android:label="@string/app_name" android:configChanges="orientation|screenSize" android:launchMode="singleInstance"> > > となっていますでしょうか? > 特に最後の android:launchMode="singleInstance" が重要なのですが… 確認したところ、使い方説明ページに書いてあった内容の通りに書いていました。 android:launchMode="singleInstance" もしっかり書いてありました。 念のため以下にコードを示します。 // 青色ライトで点灯する(タップで消去) AndroidNotification("Test", "テストメッセージ", -1, TRUE, TRUE, 0, NULL, 0, GetColor(0, 0, 255), 2000, 2000); 上記関数を実行後、先ほどと同じようにタップしてみたらホーム画面に移行する以外にも ・画面が真っ黒になる ・実行中の画面でフリーズする 上記のことも発生しました。 幸いホームボタンなどは機能していたので再度アクティブにすることで復帰はできました。 > 通知の内容をステータスバーに表示する方法はまだ調べられていませんが、 > DXライブラリAndroid版は基本的にステータスバーなどを非表示にしているので、 > Java のコードを使用して一時的にステータスバーを表示する処理と、通知の内容を > ステータスバーに表示する処理を同時に行えば実現できると思います 分かりました、やはりC++だけでは限界があるようですね。 Javaについてはある程度理解しているので最終手段として使用することは検討しています。 Javaを使うことになればリンクも参照しながら実装していきたいと思いますが、 できなくともアプリ自体に支障が出る訳ではないので今はこのままの状態で進めていきたいと思います。
メンテ
Re: Android版:通知設定について ( No.9 )
名前:管理人 日時:2017/05/11 00:18

お待たせしました 手元の環境でも > ・画面が真っ黒になる > ・実行中の画面でフリーズする が再現できましたので、こちらは修正しました よろしければその修正版をお試しください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用 ただ、 > 1. ライト関連が上手く機能していないようです(GetColor(255,255,255),2000,2000で実行しました) > 2. 実行しているときに通知をタップするとホーム画面に移行してしまう現象が発生しています こちらは再現しませんでした Android 7.0 であることが関係している可能性も考え、Android 7.0のエミュレーターを 使用して試してみましたが、再現しませんでした 再現確認用に作成したサンプルプログラムはこちらのようになっています ( 起動後約4秒後( 240フレーム後 )に振動+ライト点灯付き通知を行う ) #include "DxLib.h" int android_main( void ) { int x, add ; int Counter ; int GrHandle ; SetBackgroundColor( 128,128,128 ) ; if( DxLib_Init() == -1 ) { return -1 ; } GrHandle = LoadGraph( "test1.bmp" ) ; SetDrawScreen( DX_SCREEN_BACK ) ; x = 0 ; add = 8 ; Counter = 0 ; while( ProcessMessage() == 0 ) { // 約4秒経過したら通知を発行する Counter ++ ; if( Counter == 60 * 4 ) { int VibRate[] = { 0, 100, 100, 100, 100 } ; // 振動+黄色点滅付き AndroidNotification( "タイトル", "サブタイトル", -1, FALSE, TRUE, 0, VibRate, 5, GetColor( 255,255,0 ), 1000, 1000 ) ; } ClearDrawScreen() ; // 画面を左右に移動する画像の処理 x += add ; if( x < 0 || x > 640 ) { add = -add ; } DrawGraph( x, 0, GrHandle, TRUE ) ; // 現在のカウントを表示 DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Count:%d", Counter ) ; ScreenFlip() ; } DxLib_End(); return 0; } よろしければ BayLeafさんの環境ではこちらのプログラムでも件の二つの現象が 発生してしまうか、お試しいただけないでしょうか? m(_ _;m
メンテ
Re: Android版:通知設定について ( No.10 )
名前:BayLeaf(一応解決) 日時:2017/05/12 06:11

お疲れ様です。 >> 1. ライト関連が上手く機能していないようです(GetColor(255,255,255),2000,2000で実行しました) >> 2. 実行しているときに通知をタップするとホーム画面に移行してしまう現象が発生しています 2につきましては修正版での実行で解決できていました。 > よろしければ BayLeafさんの環境ではこちらのプログラムでも件の二つの現象が > 発生してしまうか、お試しいただけないでしょうか? m(_ _;m 管理人さんのプログラムを実行したところ、 やはりライトが点滅してくれませんでした。 Android自体の設定項目も見てライトが有効になっていたので問題はないように感じましたが、 もしかするとどこかで無効になっている可能性があるかもしれません。 作成しているアプリ自体の動作には特に影響していないのでとりあえずこのまま進めてみます。 元々の質問の「Android版での通知ができるかどうか」は解決しましたし、 ライト関連は管理人さんのご厚意による追加機能であって取り急ぐほどのことではないので「一応解決」としておきます。 ここまでありがとうございました。 進展がありましたらまた来ます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存