sp<> and Surface are native APIs. This code will break on various devices.
The only supported way to do this is with the new extended native APIs in 2.3. On Tue, Jun 7, 2011 at 7:06 AM, Sandeep Patil <[email protected]>wrote: > Dear frndz, > > I am facing a problem of being not able to use the surface object > obtained from an activity class in the native side. Here is what i am > doing, > > * Getting a SurfaceView object with the help of findviewbyId() > function. > * Then obtaining its SurfaceHolder by calling getHolder() function of > the surfaceView class. > * Then adding a callback to the holder, so as to know when the surface > is being created and destroyed. > * Once i get the callback of onSurfaceCreated(), i am getting the > surface object by getSurface() of the SurfaceHolder class and setting > it to a (Surface mSUrface = null ) field in the Activity class. > * From onSurfaceCreated() itself, I am calling a native function that > tries to access the mSurface object and casts it to sp<Surface>. > > Here is my native function, > > JNIEXPORT void JNICALL setSurface(JNIEnv* env,jobject thiz) > { > jfieldID surfacefieldID; > jfieldID surface_native; > Surface* p; > jclass clazz; > > clazz = env->FindClass("com/example/SMFMediaPlayer/ > SecondActivity"); > if (clazz == NULL) { > LOGE("Can't find com/example/SMFMediaPlayer/SecondActivity > \n"); > } > > surfacefieldID = env->GetFieldID(clazz, "mSurface", "Landroid/view/ > Surface;"); > if (surfacefieldID == NULL) { > LOGE("Can't find MediaPlayer.mSurface\n"); > } > > jclass surface = env->FindClass("android/view/Surface"); > if (surface == NULL) { > LOGE("Can't find android/view/Surface\n"); > } > > surface_native = env->GetFieldID(surface, "mSurface", "I"); > > if (surface_native == NULL) { > LOGE("Can't find Surface fields\n"); > } > > jobject surfaceobj = env->GetObjectField(thiz,surfacefieldID); > if (surfaceobj != NULL) > { > p = (Surface*) env->GetIntField(surfaceobj, surface_native); > > if(p->isValid()) > { > const sp<Surface>& native_Surface = sp<Surface>(p); > } > } > . > //There some more code down here > > > > } > > > > > The problem here is that the execution is stopping at the > statement,"const sp<Surface>& native_Surface = sp<Surface>(p);". > > I am not getting what is the mistake. > > Actually i am using this code create my own media player. So i request > to let me know my mistake or an alternative way to access the surface > object. And also i need the SurfaceComposerClient object corresponding > the surface object. > > SOmebody help me out. > > Thanks You > Sandeep Patil > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en > -- Dianne Hackborn Android framework engineer [email protected] Note: please don't send private questions to me, as I don't have time to provide private support, and so won't reply to such e-mails. All such questions should be posted on public forums, where I and others can see and answer them. -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

