草庐IT

android - Parcelable 和继承

这已经在SO上被问过几次了,但我的情况有点不同。我有实现Parcelable的A类。A类包含一些可以parceled的成员数据。它有自己的CREATOR并实现了writeToParcel()、describeContents()和一个接受Parcel的构造函数.有类B继承自类A。类B有额外的成员数据,但是它们都不需要分包。基本上,B类的parcelable数据与A类相同。如果我尝试将B放入一个Bundle中,将其传递给另一个Activity,然后再读取它,我将得到一个ClassCastException。我想这是意料之中的。经过反复试验,为了使B类可打包,我必须至少实现以下两点:pub

Android Binder 内部

我正在做一个项目,我们向android系统添加了一些非标准的安全功能,但我在调整Binder时遇到了一些严重的问题。有没有人对Binder系统有很深的了解,知道Binder为什么会“阻塞”一个传递Parcel的进程,接收进程又是如何解阻塞的? 最佳答案 这是Android文档中所说的预期行为:http://developer.android.com/reference/android/os/IBinder.htmlThekeyIBinderAPIistransact()matchedbyBinder.onTransact().The

android - 将位图放入包中

我想使用AIDL将字符串和位图传递给服务。该服务实现了这个AIDL方法:voidaddButton(inBundledata);在我的例子中,Bundle包含一个字符串和一个位图。调用应用程序(客户端)有这段代码:...//AddtexttothebundleBundledata=newBundle();Stringtext="Sometext";data.putString("BundleText",text);//AddbitmaptothebundleBitmapicon=BitmapFactory.decodeResource(getResources(),R.drawable

android - ParcelFileDescritor.createPipe(),又名 pipe(2) 和安全性

请注意,虽然我是在Android环境下问这个问题,但它更像是一个关于pipe(2)的一般unix问题...要将大量数据从一个进程传输到另一个进程,可以使用ParcelFileDescritor.createPipe(),然后通过绑定(bind)器将管道的读取端发送到另一个进程。ParcelFileDescritor.createPipe()直接映射到unixpipe(2)系统调用。虽然FD通过binder安全地传输到其他进程,但由于最终FD只是一个int,它是否有可能被发现,甚至被恶意进程猜测、打开和读取?从我的阅读来看,这似乎归结为通过默默无闻的安全性。只要你不知道,也猜不出FD的i

java - Android Parcel.obtain() 返回空值?

我正在开发一个Android应用程序(API15)并在尝试编写单元测试时遇到以下问题:我使用android.os.Parcel来保存一个类(例如,如果屏幕翻转)并将它发送到另一个Activity。如果我尝试像这样对Parcel方法进行单元测试(我从互联网上得到的):@TestpublicvoidtestParcel(){Commenttest=newComment();test.setId(testNr0Id);test.setComment(testNr0String);//ObtainaParcelobjectandwritetheparcelableobjecttoit:Parc

android - 如何将SpannableString写入parcel?

在我的应用程序中,我有一个对话框,其中包含几个SpannableString对象。因为这是对话框,所以我需要能够在用户离开应用程序并稍后返回时存储它。但问题是如何将SpannableString写入Parcel? 最佳答案 我实际上找到了一些使用现有函数来完成此操作的方法,尽管我不确定它是否适用于所有类型的跨度,还是仅适用于我正在使用的跨度。在里面写你必须添加的包裹方法@OverridepublicvoidwriteToParcel(Parceldest,intflags){TextUtils.writeToParcel(mSpan

android - 从 RemoteViews 对象中检索文本

我需要从RemoteViews对象中检索一些文本。我有可能获得LayoutId,但我不知道如何从此RemoteView中的TextView检索文本(即通知)。此外,RemoteView只包含setter,但没有getter,所以我想我必须使用LayoutId(以某种方式)。你能帮我吗?谢谢!/edit:我问这个问题的原因是因为我有一个AccessibilityService可以检索通知。因此,这是检索值的唯一方法。/edit2:我使用此代码接收通知:@OverridepublicvoidonAccessibilityEvent(AccessibilityEventevent){if(e

android - 使用 Parcel 克隆对象?

我有一个实现了Parcelable的类。我可以做类似下面的事情来创建类的新实例吗?:Foofoo=newFoo("a","b","c");Parcelparcel=Parcel.obtain();foo.writeToParcel(parcel,0);Foofoo2=Foo.CREATOR.createFromParcel(parcel);我希望foo2是foo的克隆。--------------------更新------------------------------以上不起作用(所有Foo成员在新实例中都是空的)。我在Activity之间传递Foos很好,所以Parcelable

android - 解码父 View SavedState 时恢复 View SavedState 抛出 ClassNotFoundException

我有2个类ParentClass和ChildClass:ParentClass是RelativeLayout的子类,它使用以下代码使用onSaveInstanceState()/onRestoreInstanceState()保存状态:@OverrideprotectedParcelableonSaveInstanceState(){SavedStatesavedState=newSavedState(super.onSaveInstanceState());savedState.someObj=someObj;savedState.someInt=someInt;savedState

java - MediaMetadata.getString java.lang.RuntimeException : Could not read bitmap from parcel blob

调用MediaMetadata.getString,在报告中有以下崩溃,但并不总是重现:java.lang.RuntimeException:Couldnotreadbitmapfromparcelblob.atandroid.graphics.Bitmap.nativeCreateFromParcel(NativeMethod)atandroid.graphics.Bitmap.access$000(Bitmap.java:32)atandroid.graphics.Bitmap$1.createFromParcel(Bitmap.java:1477)atandroid.graphi