🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

Android

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

Android Studio

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

Q&A

解決済

1回答

5581閲覧

Android10のバックグラウンドからのアクティビティの起動に関する制限に関連し、Android8でテストしたいが上手く動かない

jun74

総合スコア338

Java

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

Android

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

Android Studio

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

1グッド

4クリップ

投稿2019/11/11 19:48

前提・実現したいこと

以下のページより、Android10以降ではバックグラウンドサービスからの起動は通知で起動する必要があることが分かりました。
バックグラウンドからのアクティビティの起動に関する制限
Display time-sensitive notifications

上記より、該当のソースコードのようにロジックを組み、Android7、8でテストを実施しました。
するとAndroid7では通知が設定されつつ、即時、フルスクリーンで画面が表示されました。
しかし、Android8ではハンズアップ通知にもならず通知が設定されるだけで、フルスクリーンで表示もされません。

最終的にはAndroid9まではバックグラウンドから直接Activityを起動し、10以降は上記の仕様で通知より起動するように変更したいと考えています。
しかし、エミュレータが動かないスペックの古いパソコンかつ、Android8までの端末しかない環境で上記仕様についてテストしたいと考えています。

Android10では該当ソースコードでちゃんと機能するのでしょうか?

また、ターゲットはAPIレベル28までとして、バックグラウンドから直接startActivityとして起動した場合、異常終了するのでしょうか?
それとも問題なく直接起動できるのでしょうか?

該当のソースコード

java

1 String channelId = "default"; 2 Intent fullScreenIntent = new Intent(intent2); 3 PendingIntent fullScreenPendingIntent = PendingIntent.getActivity(this, 0, 4 fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT); 5 6 NotificationCompat.Builder notificationBuilder = 7 new NotificationCompat.Builder(this, channelId) 8 .setSmallIcon(R.mipmap.ic_launcher_round) 9 .setContentTitle("abc") 10 .setContentText("def") 11 .setDefaults(Notification.DEFAULT_LIGHTS) 12 .setPriority(NotificationCompat.PRIORITY_MAX) 13 .setCategory(NotificationCompat.CATEGORY_ALARM) 14 15 .setFullScreenIntent(fullScreenPendingIntent, true); 16 17 notification = notificationBuilder.build(); 18 19 // startForeground 20 startForeground(1, notification);

補足情報(FW/ツールのバージョンなど)

Android Studio3.4
APIレベル14から28まで対象

chirunote👍を押しています

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

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

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

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

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

guest

回答1

0

自己解決

以下よりAPI26以上は「NotificationManager.IMPORTANCE_HIGH」をchannelに設定し、そのchannelを利用するようにすれば行けそうです。
「前提・実現したいこと」に記載したリンクにも、そこまでちゃんとリンクしててくれれば、ここまで悩まなかったのですが。。

通知チャネルを作成して管理する

初回1回限りしか動かない処理

java

1 //アラーム通知チャンネル登録 2 if (android.os.Build.VERSION.SDK_INT >= 26) { 3 String CHANNEL_ID = "alarm"; 4 CharSequence name = getString(R.string.alarmChannel_name); 5 String description = getString(R.string.alarmChannel_description); 6 int importance = NotificationManager.IMPORTANCE_HIGH; 7 NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance); 8 channel.setDescription(description); 9 NotificationManager notificationManager = getSystemService(NotificationManager.class); 10 notificationManager.createNotificationChannel(channel); 11 }

通知処理

java

1 //アラーム通知チャンネル使用 2 String channelId = "alarm"; 3 Intent fullScreenIntent = new Intent(intent2); 4 PendingIntent fullScreenPendingIntent = PendingIntent.getActivity(this, 0, 5 fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT); 6 7 NotificationCompat.Builder notificationBuilder = 8 new NotificationCompat.Builder(this, channelId) 9 .setSmallIcon(R.mipmap.ic_launcher_round) 10 .setContentTitle(getString(R.string.app_name)) 11 .setContentText(notifyMsg) 12 .addAction(0, "停止画面を開く", fullScreenPendingIntent) 13 .setFullScreenIntent(fullScreenPendingIntent, true); 14 15 //***/>以下は停止画面が開いてないときのみ設定するように!! 16 notificationBuilder.addAction(0, "スヌーズ", fullScreenPendingIntent); 17 18 notification = notificationBuilder.build(); 19 20 // startForeground 21 startForeground(1, notification);

なお、API22から25までは質問に記載した方法で実現できるはずです。

投稿2019/11/12 13:21

編集2019/11/12 15:23
jun74

総合スコア338

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問