Как Intent with Parcelable проходит между двумя приложениями? - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть Сервис в Android App2.Я хочу запустить Сервис из приложения app1 и передать объект Album в Intent в Сервис в app2.

В app1

var alb: Album = Album()
alb.name="album name"
alb.numOfSongs=1
alb.thumbnail=2

var serviceIntent: Intent = Intent();
var componentName: ComponentName = ComponentName("com.eusecom.demoad","com.eusecom.demoad.view.EkasaService")
serviceIntent.setComponent(componentName)
serviceIntent.putExtra("albumpar", alb)
context.startService(serviceIntent)

В app2 в классе Сервис

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    Album alb = intent.getParcelableExtra("albumpar");

}

Iмогу передать String в Intent.Если я ставлю Intent the Parcelable, я получаю ошибку.

02-27 14: 12: 18.438 22198-22198 / com.eusecom.demoad E / Parcel: Класс не найден при демаршаллинге: com.eusecom.samshopersung.models.Album java.lang.ClassNotFoundException: com.eusecom.samshopersung.models.Album в java.lang.Class.classForName (собственный метод) в java.lang.Class.forName (Class.java:400) на андроиде.os.Parcel.readParcelableCreator (Parcel.java:2517) на android.os.Parcel.readParcelable (Parcel.java:2471) на android.os.Parcel.readValue (Parcel.java:2374) на android.os.Parcel.readArrayMapInternal (Parcel.java:2727) в android.os.BaseBundle.unparcel (BaseBundle.java:269) в android.os.BaseBundle.getString (BaseBundle.java:992) в android.content.Intent.getStringExtra (Intent.java): 6743) на com.eusecom.demoad.view.EkasaService.onStartCommand (EkasaService.java:29) на android.app.ActivityThread.handleServiceArgs (ActivityThread.java:3685) на android.app.ActivityThread.-wrap23 (ActivityThread.java).) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1740) в android.os.Handler.dispatchMessage (Handler.java:102) в android.os.Looper.loop (Looper.java:154) в android.app.ActivityThread.main (ActivityThread.java): 6692) на java.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1468) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) Причина: java.lang.ClassNotFoundException: не найден класс "com.eusecom.samshopersung.models.Album" по пути: DexPathList [[zip-файл "/data/app/com.eusecom.demoad-1 / base.apk "], nativeLibraryDirectories = [/ data / app / com.eusecom.demoad-1 / lib / arm64, / system / lib64, / vendor / lib64]] в dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:56) в java.lang.ClassLoader.loadClass (ClassLoader.java:380) в java.lang.ClassLoader.loadClass (ClassLoader.java:312) в java.lang.Class.classForName (собственный метод) в java..lang.Class.forName (Class.java:400)на android.os.Parcel.readParcelableCreator (Parcel.java:2517) на android.os.Parcel.readParcelable (Parcel.java:2471) на android.os.Parcel.readValue (Parcel.java:2374) на android.os.Parcel.readArrayMapInternal (Parcel.java:2727) в android.os.BaseBundle.unparcel (BaseBundle.java:269) в android.os.BaseBundle.getString (BaseBundle.java:992) в android.content.Intent.getStringExtra (Intent).java: 6743) на com.eusecom.demoad.view.EkasaService.onStartCommand (EkasaService.java:29) на android.app.ActivityThread.handleServiceArgs (ActivityThread.java:3685) на android.app.ActivityThread.-wrap23 (ActivityThread.java) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1740) в android.os.Handler.dispatchMessage (Handler.java:102) в android.os.Looper.loop (Looper.java:154)в android.app.ActivityThread.main (ActivityThread.java:6692) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1468)на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1358) 02-27 14: 12: 18.439 22198-22198 / com.eusecom.demoad D / AndroidRuntime: завершение работы VM 02-27 14: 12: 18.440 22198-22198 / com.eusecom.demoad E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной Процесс: com.eusecom.demoad, PID: 22198 java.lang.RuntimeException: Невозможно запустить службу com.eusecom.demoad.view.EkasaService@fe9af21 с Intent {cmp = com.eusecom.demoad / .view.(ActivityThread.java:3702) в android.app.ActivityThread.-wrap23 (ActivityThread.java) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1740) в android.os.Handler.dispatchMessage (Handler.java): 102) в android.os.Looper.loop (Looper.java:154) в android.app.ActivityThread.main (ActivityThread.java:6692) в java.lang.reflect.Method.invoke (Naметод) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1468)at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1358). Вызывается: android.os.BadParcelableException: ClassNotFoundException при отмене отмены вызова: com.eusecom.samshopersung.models.Album at android.os.arlaParcel.java:2545) на android.os.Parcel.readParcelable (Parcel.java:2471) на android.os.Parcel.readValue (Parcel.java:2374) на android.os.Parcel.readArrayMapInternal (Parcel.java:2727)) в android.os.BaseBundle.unparcel (BaseBundle.java:269) в android.os.BaseBundle.getString (BaseBundle.java:992) в android.content.Intent.getStringExtra (Intent.java:6743) в com.eusecom.demoad.view.EkasaService.onStartCommand (EkasaService.java:29) в android.app.ActivityThread.handleServiceArgs (ActivityThread.java:3685) в android.app.ActivityThread.-wrap23 (ActivityThread.java) в android.app.ActivityThread$ H.handleMessage (ActivityThread.java:1740) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:154) на android.app.ActivityThread.maв (ActivityThread.java:6692) в java.lang.reflect.Method.invoke (собственный метод)

1 Ответ

0 голосов
/ 27 февраля 2019

Вам лучше сериализовать объект в строку, передав строку в Intent, а затем десериализовать строку в объект в целевом приложении.

...