带有包裹的意图如何在两个应用程序之间传递



我在android app2中得到了服务。我想从 app1 启动服务,并将意图中的相册对象传递给 app2 中的服务。

在应用1中

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");
}

我可以在意图中传递字符串。如果我将包裹对象放入意向,则会出现错误。

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 at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:400) at android.os.Parcel.readParcelableCreator(Parcel.java:2517) at android.os.Parcel.readParcelable(Parcel.java:2471) at android.os.Parcel.readValue(Parcel.java:2374) at android.os.Parcel.readArrayMapInternal(Parcel.java:2727) at android.os.BaseBundle.unparcel(BaseBundle.java:269) at android.os.BaseBundle.getString(BaseBundle.java:992) at android.content.Intent.getStringExtra(Intent.java:6743) at com.eusecom.demoad.view.EkasaService.onStartCommand(EkasaService.java:29) at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3685) at android.app.ActivityThread.-wrap23(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1740) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6692) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) 原因:java.lang.ClassNotFoundException:在路径上找不到类"com.eusecom.samshopersung.models.Album":DexPathList[[zip file "/data/app/com.eusecom.demoad-1/base.apk"],nativeLibraryDirectory=[/data/app/com.eusecom.demoad-1/lib/arm64,/system/lib64,/vendor/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:380) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:400) at android.os.Parcel.readParcelableCreator(Parcel.java:2517) at android.os.Parcel.readParcelable(Parcel.java:2471) at android.os.Parcel.readValue(Parcel.java:2374) at android.os.Parcel.readArrayMapInternal(Parcel.java:2727) at android.os.BaseBundle.unparcel(BaseBundle.java:269) at android.os.BaseBundle.getString(BaseBundle.java:992) at android.content.Intent.getStringExtra(Intent.java:6743) at com.eusecom.demoad.view.EkasaService.onStartCommand(EkasaService.java:29) at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3685) at android.app.ActivityThread.-wrap23(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1740) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6692) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) 02-27 14:12:18.439 22198-22198/com.eusecom.demoad D/Android运行时:关闭虚拟机 02-27 14:12:18.440 22198-22198/com.eusecom.demoad E/Android运行时:致命异常:主要 进程: com.eusecom.demoad, PID: 22198 java.lang.RuntimeException: 无法使用 Intent { cmp=com.eusecom.demoad/.view 启动服务com.eusecom.demoad.view.EkasaService@fe9af21。EkasaService launchParam=MultiScreenLaunchParams { mDisplayId=0 mFlags=0 } (有额外) }: android.os.BadParcelableException: ClassNotFoundException 当解编组时: com.eusecom.samshopersung.models.Album at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3702) at android.app.ActivityThread.-wrap23(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1740) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6692) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) 原因:android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.eusecom.samshopersung.models.Album at android.os.Parcel.readParcelableCreator(Parcel.java:2545) at android.os.Parcel.readParcelable(Parcel.java:2471) at android.os.Parcel.readValue(Parcel.java:2374) at android.os.Parcel.readArrayMapInternal(Parcel.java:2727) at android.os.BaseBundle.unparcel(BaseBundle.java:269) at android.os.BaseBundle.getString(BaseBundle.java:992)at android.content.Intent.getStringExtra(Intent.java:6743) at com.eusecom.demoad.view.EkasaService.onStartCommand(EkasaService.java:29) at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3685) at android.app.ActivityThread.-wrap23(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1740) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6692) at java.lang.reflect.Method.invoke(Native Method)

最好将对象序列化为字符串,在Intent中传递字符串,然后将字符串反序列化为目标应用程序中的对象。

最新更新