surfacecreated
我遇到这个问题的场景是:页面一个大的surfaceview .想要通过相机实时预览捕获到的场景。页面进入的时候动态获取相机权限,如果有权限则直接绑定holder
surfaceholder=surfaceView.getHolder(); surfaceHolder.addCallback(MainActivity.this);
如果没有则申请。。在异步回调成功方法里,执行上面绑定:结果:
每次运行APP.第一次给权限以后总是黑屏。不走surfaceCreated 方法。重启APP就好了。。查询了好多资料。。
终于在文章:https://bbs.csdn.net/topics/392055168?page=1#post-403322796
中发现了同病相怜的人。
最后他给的建议是:说法了就是 绑定Holder时机不对!!!
因为SurfaceView写在xml文件中,界面显示以后其实已经创建了,但是这时候没有添加生命周期的回调,所以后来添加了,这个接口也不会调用了。所以解决办法是。。初始化时候就直接绑定holder在 surfaceCreated里面去查看权限。。如果有则正常处理。否则 申请。。申请回调 成功 也去初始化相机。并打开关联。问题解决。
我的页面代码如下:
package com.example.sunlei.mysurface; import Android.Manifest; import android.app.Activity; import android.content.pm.PackageManager; import android.graphics.Pixelformat; import android.hardware.Camera; import android.os.handler; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.content.contextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.widget.TextView; import android.widget.toast; import java.io.IOException; public class MainActivity extends Activity implements SurfaceHolder.Callback{ private String TAG="result"; SurfaceView surfaceView; Camera camera; SurfaceHolder surfaceHolder; @Override protected void onCreate(Bundle savedinstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); surfaceView=findViewById(R.id.surface); inicSurfaceHolder();//第二处 } /*** * 初始SurfaceHolder */ private void inicSurfaceHolder(){ surfaceHolder=surfaceView.getHolder(); surfaceHolder.addCallback(MainActivity.this); surfaceView.setVisibility(View.VISIBLE); Log.d(TAG,"inicCamera"); } /** * 相机预览 * @param holder */ @Override public void surfaceCreated(SurfaceHolder holder) { Log.d(TAG,"surfaceCreated"); requestpermission(); } void initCamera(){ try { camera= android.hardware.Camera.open(); camera.setPreviewdisplay(surfaceHolder); } catch (IOException e) { e.printstacktrace(); } } @Override protected void onResume() { super.onResume(); Log.d(TAG,"onresume"); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Log.d(TAG,"surfaceChanged"); if(camera!=null){ camera.startPreview(); } } @Override public void surfacedestroyed(SurfaceHolder holder) { if(camera!=null){ camera.stopPreview(); camera.release(); camera=null; } } /*** * 申请权限 */ void RequestPermission(){ if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CAMERA},1); Log.d(TAG,"RequestPermission"); }else{ initCamera(); } } /** * 权限回调 * @param requestcode * @param permissions * @param grantResults */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); Log.d(TAG,"onRequestPermissionsResult"); if(requestCode==1){ if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){ initCamera(); if(camera!=null){ camera.startPreview(); } }else{ toast.maketext(MainActivity.this,"授权失败",Toast.LENGTH_LONG).show();; } } } }问题解决。
相关阅读
在国内,中国知网收录了最多的期刊论文和硕博士论文。无论学霸学渣,都得上去下载论文。如果你的学校在知网购买了相应的下载版权,那恭
不知道大家使用京东购物时有没有注意过自己的京东网址是否正常?小编前几天双十一的时候受一个好友的委托,在京东帮他买一件东西,当
现在可能大家尤其是对于成年人来说,或者是步入这个社会多年的人,或者是说在社会中身上背负一定的经济压力的人来说,大家都有一个很关
经常在QQ空间发说说或者是日志的朋友,一定会遇到动态不显示的情况,就是发了说说或者日志,自己能看到,但不展示给好友,别人看不到。根据
autojs调用java的类库爬取bilibili视频弹幕内容,get请
/** * @功能 爬取指定bilibili视频弹幕 * @作者 家 * @感谢 内个谁, ProjectXero * @难点 不会解压gzip和deflate,再次感谢上