質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

464閲覧

画面遷移 アラーム解除 シェイク&計算式

kimukou1205

総合スコア13

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2019/01/23 06:22

編集2019/01/28 00:27

前提・実現したいこと

該当のソースコード

} private void stopAlarm() { } public void setAlarmText(String alarmText) { alarmTextView.setText(alarmText); } @Override public void onStart() { super.onStart(); inst = this; } @Override public void onDestroy() { super.onDestroy(); if (AccelerometerManager.isListening()) { AccelerometerManager.stopListening(); //Toast.makeText(this, "onDestroy Accelerometer Stopped", Toast.LENGTH_SHORT).show(); } Log.e("MyActivity", "on Destroy"); } // 登録 @SuppressLint("ObsoleteSdkInt") private void register(long alarmTimeMillis) { AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); PendingIntent pendingIntent = getPendingIntent(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { alarmManager.setAlarmClock(new AlarmManager.AlarmClockInfo(alarmTimeMillis, null), pendingIntent);
AndroidStudio

試したこと

MainActivityからPlaySoundActivityへ処理したいが画面遷移しないため、ネットなど調べたが不明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

stdio

2019/01/23 08:16

>>GitHubにもあるので見てくれると助かります。 嫌です。ここは質問をする場です。 私たちはあなたにこれっぽちも興味もないのでそんな教員か親みたいなことは絶対に致しません。 デバックの依頼ならよそでやってください。
jimbe

2019/01/23 08:30

どこからか得られたコードを改修しておられるのでしょうか, 場所により書き方も質もばらばらです. Log の Tag までめちゃめちゃです. まず全体的にコードを整理されたほうが良いかと思います. コードを微調整しながら動かしてみましたが, メイン画面( MainActivity )で時間を設定する→ AlarmManager に登録(右上に目覚ましのアイコンが出る)→時間になると AlarmReceiver が起動→ PlaySoundService を起動→音( alarm1.mp3 )を鳴らし通知を設定(左上にアイコンが出る)→通知をタップ→メイン画面を表示...となり, PlaySoundActivity は出てきません. 通知タップ後に PlaySoundActivity に行けばよいのでしょうか.
kimukou1205

2019/01/23 13:46

studio、嫌ならしなくてもいいんですよ。MainActivityだけのコードじゃわからないですからねGitHubで全体のコードを見て欲しかったんですが? あなたのような人には頼んでないので大丈夫ですので。
kimukou1205

2019/01/23 13:50

jimbe 私は、二度寝しないめざましアラームを作っており、スムーズ機能の代わりにランダムの計算式やシェイクでアラーム音を解除するアプリケーションです。MainActivityの画面で時間を設定して、その設定した時間がきたら、画面遷移しPlaySoundActivityに移動して計算式を表示し、正しい計算式を入力したらアラーム音を解除して元のMainActivity画面に戻るつもりです。
jimbe

2019/01/23 13:57

なるほど, でしたらやはり通知から PlaySoundActivity ですね.
jimbe

2019/01/23 14:13

あ, いや違いますね, RingtonePlayingService の 通知を設定しているところで Activity を呼ぶ感じでしょうか.
guest

回答1

0

ベストアンサー

アラームのレシーバから起動されるサービス内にアクティビティの起動を入れることで画面が遷移します.

java

1RingtonePlayingService.java:8095行目辺り 2 3 if (random_number == 1) { 4 5 mMediaPlayer = MediaPlayer.create(this, R.raw.alerm1); 6 } 7 8 mMediaPlayer.setLooping(true); 9 mMediaPlayer.start(); 10 11 //追加ここから 12 Intent playSoundIntent = new Intent(this, PlaySoundActivity.class); 13 playSoundIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 14 getApplication().startActivity(playSoundIntent); 15 //追加ここまで 16 17 mNM.notify(0, mNotify); 18 19 this.isRunning = true; 20 this.startId = 0; 21 22 } 23 else if (!this.isRunning && startId == 0){ 24 Log.e("if there was not sound ", " and you want end");

AlarmManager の通知はバージョンが上がる毎に不正確になっているようで, その代わりに一応'より'正確にするメソッドが追加されています.
目覚ましということで時間が不正確では問題かと思いますので, MainActivity.java の最期のほうに(使われずに)ある register メソッドの alarmManager.setAlarmClock(), alarmManager.setExact(), alarmManager.set() の使い分けを参考に, 現在 alarmManager.set() されている箇所を修正されるのが良いかと思います.
(エミュレータでの動作確認中は, 大体1分程度は時間がずれていました.)

投稿2019/01/23 14:48

編集2019/01/23 14:51
jimbe

総合スコア12623

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kimukou1205

2019/01/24 05:17 編集

修正ありがとうございます。 エミュレータで動作確認したところ、無事時刻通り(だいたい3秒くらいかかるですが。。)にPlyaSoundActivityに画面遷移し、SubActivityで難易度設定したものが反映されていました。 しかし、再びアラーム時間を設定しようとするとアラームセットした時刻になっても画面遷移されないのです。いちいち実行しおす必要があり、めんどくさいと感じてしまいました。この原因はわかりますか?値が解除されずそのままになっている状態でしょうか?
jimbe

2019/01/24 06:24

エミュレータの精度の違いはパソコンの性能差とかでしょうか^^; ログを見ると "if there is sound: and you want start" と出ていることから, 先に追加いただいた 'PlaySoundActivity を実行する箇所' を通っていません. 大きな if 文の中であり, 変数の値に従って分岐していますので, この辺りが何の処理をしているのか, なぜ通らないのかは, 作者さんが分かっていると思います.
kimukou1205

2019/01/24 07:27

if文の中に値を初期化するコードを書けばよいのですか?
kimukou1205

2019/01/24 07:44 編集

finish();に初期化するように書いたところできました。 しかし、アラーム音を解除するための計算式は問題なしですが、シェイクの方が全く機能できていないため、MainActivityのコードをPlaySoundActivityに書いておいた方がよいでしょうか?
jimbe

2019/01/24 07:44

’値を初期化していないのが原因’ と特定されたのでしょうか. それは何の値でしょうか. 少なくともこの if 文は(変数名的に)時間の設定で分岐しているわけでは無さそうですけれど. 私がコメントさせて頂いたのは「activity を起動する部分を通っていない」という現象だけで, 「値が解除されずそのままになっている状態」かどうかは分かりません. ですので, どんな値の初期化を何処に入れればいいのかは, 判断しかねます. すみません.
jimbe

2019/01/24 07:46

書いている間にコメント頂いてしまいました. 失礼しました.
jimbe

2019/01/24 07:54

すいませんが, 「どのコードをどこに」というご質問は基本共同開発者同士で行われるもので, teratail で長く続けるものではものでは無いと思います. 「画面遷移しない」というご質問に関してはなんとか動き始めたようなので, シェイクに関してはまた別のご質問とされては如何でしょうか.
kimukou1205

2019/01/25 06:32

非常に助かりました。ありがとうございます。 また、別で質問します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問