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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

2回答

5737閲覧

バックグランドのActivityを強制起動する方法

peishun

総合スコア30

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2016/04/09 09:44

Androidアプリ開発をしております。

一定時間経過後、たとえAndroid端末がスリープ状態だったとしてもActivityを起動する処理を実装しようとしています。

現在、時間を指定して、それをServiceを用いて、アプリがバックグラウンドにいてもその時間をカウントダウンする処理まではできました。

java

1//一定時間のカウントダウンが終了したとき 2if(time == 0){ 3 4 //サービス終了 5 stopService(mService); 6 7 //アクティビティを強制起動 8 ?????????????????????? 9}

アクティビティを強制起動するための、
上記の???に入れるべき処理がわかりません。

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

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

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

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

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

guest

回答2

0

ServiceからActivityを起動する場合は、以下のような感じです

Java

1public class YourService extends Service { 2 3 @Override 4 public final int onStartCommand(final Intent intent, final int flags, final int startId) { 5 // 何かの処理 6 7 // Activityの起動 8 Context context = this.getApplicationContext(); 9 Intent intent = new Intent(context, YourActivity.class); 10 intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 11 context.startActivity(intent); 12 13 // Serviceの終了など 14 stopSelf(); 15 } 16}

ですが、Android端末がスリープしているなどの時にはService自体が
動かない場合もあるので、そういう場合もActivity起動して欲しい場合は
AlarmManager
を使うのが良いでしょう。
例えば、10分後にActivity起動して欲しいなら、以下のような感じで、Activity起動の登録をすることができます

Java

1 2 public final static long NEXT_WAKE_UP_TIME = 10 * 60 * 1000; ///< 10分後 3 4 private void registWakeUpYourActivity() { 5 Context context = this.getApplicationContext(); 6 Intent serviceIntent = new Intent(context, YourService.class); 7 serviceIntent.setPackage("com.example.your.service.YourService"); 8 final PendingIntent pendingIntent = PendingIntent.getService(context, 0, serviceIntent, 0); 9 final AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 10 final long nextWakeupTime = System.currentTimeMillis() + NEXT_WAKE_UP_TIME; 11 alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, nextWakeupTime, pendingIntent); 12 }

投稿2016/04/11 04:47

bzcat

総合スコア37

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

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

peishun

2016/04/13 05:54

AlarmManagerという便利なものがあるんですね。 勉強になりました。
guest

0

ベストアンサー

大前提として、そのようなアプリ設計は基本的にユーザーを不快にさせるためおすすめはしません。
一般に使われるのはNotificationです。

それでも、要件を満たす必要があるということであれば、少々古いですが、下記参考になりませんか?
ServiceからActivityを起動する

ただ、スリープ中だった場合は、できない可能性があるため、
電源がついたときのイベントで、タイマーが0であれば、アクティビティを起動する。
という処理を組む必要がありそうです。

投稿2016/04/10 09:18

編集2016/04/10 09:23
Odacchi

総合スコア907

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

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

peishun

2016/04/13 05:55

サービスからActivityを起動するにはintentで新たに起動する必要があるんですね。そのような実装にしたら解決しました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問