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

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

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

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

Android

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

Android Studio

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

解決済

【kotlin】putExtraとSerializableを使って Serviceクラスに 独自で作ったクラスを渡したい

Create12c
Create12c

総合スコア48

Java

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

Android

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

Android Studio

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

2回答

0評価

0クリップ

262閲覧

投稿2022/04/19 08:43

編集2022/04/20 14:34

閲覧いただきありがとうございます。

アプリをキルしても動的に表示し続ける通知を作ろうとしています。

そのため下記のように onStop時にServiceクラスに移行し、同時にSetNotificationクラスをServiceクラスに渡そうとしています。
こちらを参考にしました。

※Serviceクラスとはプログラム内で明示的に停止させない限り、アプリをキルしてもバックグラウンドで動き続ける特殊なクラス

kotlin

// 通知サービスを開始する override fun onStop() { super.onStop() val serviceIntent = Intent(this, NotificationService::class.java) serviceIntent.putExtra("key1", setNotification) startService(serviceIntent) }

受け取り側(Serviceクラス)

kotlin

override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { if (intent != null) { setNotification = intent.getSerializableExtra("key1") as SetNotification setNotification.setNotificationChannel() } return START_NOT_STICKY }

SetNotificationクラスは Serviceクラスで通知をセットするための処理がまとめられています。

kotlin

class SetNotification(mainActivity:Activity, notificationManager:NotificationManager) : Serializable { private val CHANNEL_ID = "123" private var notificationManager: NotificationManager private var mainActivity : Activity private val handler = Handler() private var runnable = Runnable {} init { this.mainActivity = mainActivity this.notificationManager = notificationManager } 〜〜〜省略〜〜〜 }

しかしonStopを実行してみるとエラーが発生して通知が表示されないです。

Logcat

--------- beginning of crash 2022-04-19 16:09:41.613 19443-19443/com.Create12c.cpubatteryindicatorinstatusbar E/AndroidRuntime: FATAL EXCEPTION: main Process: com.Create12c.cpubatteryindicatorinstatusbar, PID: 19443 java.lang.RuntimeException: Unable to stop activity {com.BSCreate.cpubatteryindicatorinstatusbar/com.Create12c.cpubatteryindicatorinstatusbar.MainActivity}: java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.Create12x.cpubatteryindicatorinstatusbar.SetNotification) at android.app.ActivityThread.callActivityOnStop(ActivityThread.java:5410) at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:5345) at android.app.ActivityThread.handleStopActivity(ActivityThread.java:5455) at android.app.servertransaction.StopActivityItem.execute(StopActivityItem.java:40) at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2325) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:246) at android.app.ActivityThread.main(ActivityThread.java:8633) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130) Caused by: java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.Create12c.cpubatteryindicatorinstatusbar.SetNotification) at android.os.Parcel.writeSerializable(Parcel.java:2125) at android.os.Parcel.writeValue(Parcel.java:1895) at android.os.Parcel.writeArrayMapInternal(Parcel.java:987) at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1620) at android.os.Bundle.writeToParcel(Bundle.java:1303) at android.os.Parcel.writeBundle(Parcel.java:1056) at android.content.Intent.writeToParcel(Intent.java:11512) at android.app.IActivityManager$Stub$Proxy.startService(IActivityManager.java:6800) at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1780) at android.app.ContextImpl.startService(ContextImpl.java:1740) at android.content.ContextWrapper.startService(ContextWrapper.java:738) at android.content.ContextWrapper.startService(ContextWrapper.java:738) at com.Create12c.cpubatteryindicatorinstatusbar.MainActivity.onStop(MainActivity.kt:215) at android.app.Instrumentation.callActivityOnStop(Instrumentation.java:1476) at android.app.Activity.performStop(Activity.java:8438) at android.app.ActivityThread.callActivityOnStop(ActivityThread.java:5402) at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:5345)  at android.app.ActivityThread.handleStopActivity(ActivityThread.java:5455)  at android.app.servertransaction.StopActivityItem.execute(StopActivityItem.java:40)  at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2325)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:246)  at android.app.ActivityThread.main(ActivityThread.java:8633)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)  Caused by: java.io.NotSerializableException: android.app.ActivityManager at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1240) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1604) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1565) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1488) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1234) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354) at android.os.Parcel.writeSerializable(Parcel.java:2120) at android.os.Parcel.writeValue(Parcel.java:1895)  at android.os.Parcel.writeArrayMapInternal(Parcel.java:987)  at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1620)  at android.os.Bundle.writeToParcel(Bundle.java:1303)  at android.os.Parcel.writeBundle(Parcel.java:1056)  at android.content.Intent.writeToParcel(Intent.java:11512)  at android.app.IActivityManager$Stub$Proxy.startService(IActivityManager.java:6800)  at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1780)  at android.app.ContextImpl.startService(ContextImpl.java:1740)  at android.content.ContextWrapper.startService(ContextWrapper.java:738)  at android.content.ContextWrapper.startService(ContextWrapper.java:738)  at com.Create12c.cpubatteryindicatorinstatusbar.MainActivity.onStop(MainActivity.kt:215)  at android.app.Instrumentation.callActivityOnStop(Instrumentation.java:1476)  at android.app.Activity.performStop(Activity.java:8438)  at android.app.ActivityThread.callActivityOnStop(ActivityThread.java:5402)  at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:5345)  at android.app.ActivityThread.handleStopActivity(ActivityThread.java:5455)  at android.app.servertransaction.StopActivityItem.execute(StopActivityItem.java:40)  at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2325)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:246)  at android.app.ActivityThread.main(ActivityThread.java:8633)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130) 

こちらを参考にすると、どうやらSetNotificationのプロパティがSerializableを継承していないのが原因だったようなので mainActivityなどにもSerializableを継承したのですが結果は同じでした。

どうしたらServiceクラス移行時に、Serviceクラスに独自クラスを渡すことができるでしょうか?

どうかご教授お願い致します。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

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

Android

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

Android Studio

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。