Android视频应用程序中的错误 - 以无效状态调用:4

时间:2015-09-04 03:50:36

标签: android video

我知道网上有一些类似的问题,但没有一个能解决我的问题。 我在三星S3上测试过,有些帖子说它是S3问题;但我下载的其他应用程序似乎没有这个签名问题。 请帮忙。

我的代码:

public class MainActivity extends AppCompatActivity implements     SurfaceHolder.Callback{
private MediaRecorder recorder;
private SurfaceHolder holder;
private static final String TAG = "MYTAG";
private int recstate = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i(TAG, "on create");
    recorder = new MediaRecorder();
    //initRecorder();
    setContentView(R.layout.activity_main);
    SurfaceView cameraView = (SurfaceView) findViewById(R.id.CameraView);
    holder = cameraView.getHolder();
    holder.addCallback(this);
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    final Button button_rec = (Button) findViewById(buttonRec);
    button_rec.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(recstate == 0)
            {
                recstate = 1;
                startRecord();
                button_rec.setText("Stop");
            }
            else {
                recstate = 0;
                stopRecord();
                button_rec.setText("Rec");
            }

        }

    });

    Button button_load = (Button) findViewById(buttonLoad);
    button_load.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            goToLoadActivity();
        }

    });

    Button button_exit = (Button) findViewById(buttonExit);
    button_exit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
            //exitActivity();
            System.exit(0);
        }

    });
}

public void surfaceCreated(SurfaceHolder holder) {
    //prepareRecorder();
}

public void surfaceChanged(SurfaceHolder holder, int format, int width,
                           int height) {
}

public void surfaceDestroyed(SurfaceHolder holder) {
  /*  if (recording) {
        recorder.stop();
        recording = false;
    }
    recorder.release();
    finish();
    */
}

private void initRecorder(){
    recorder.reset();
    Log.i(TAG, "reset Recorder");
    try{
    recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
    Log.i(TAG, "setAudioSource");
    recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    Log.i(TAG, "setVideoSource");}
    catch (Exception e){
        Log.i(TAG,e.toString());
        e.printStackTrace();
        finish();
    }

    //CamcorderProfile cpHigh = CamcorderProfile
    //        .get(CamcorderProfile.QUALITY_LOW);
    recorder.setProfile(CamcorderProfile.get(MediaRecorder.OutputFormat.MPEG_4));
    Log.i(TAG, "setProfile");
    Log.i(TAG,getOutputMediaFile().toString());
    recorder.setOutputFile(getOutputMediaFile().toString());
    Log.i(TAG, "setOutputFile");
    recorder.setMaxDuration(50000); // 50 seconds
    Log.i(TAG, "setMaxDuration");
    recorder.setMaxFileSize(50000000); // Approximately 50 megabytes
    Log.i(TAG, "setMaxFileSize");
    try {
        recorder.prepare();
    } catch (IllegalStateException e) {
        e.printStackTrace();
        finish();
    } catch (IOException e) {
        e.printStackTrace();
        finish();
    }
    Log.i(TAG,"Recorder prepare");
}

private void startRecord() {
    prepareRecorder();
    initRecorder();
    recorder.start();
}

private void stopRecord() {
    recorder.stop();
}

private void prepareRecorder() {
    recorder.setPreviewDisplay(holder.getSurface());
    if(holder.getSurface().isValid())
        Log.i(TAG,"surface is valid");
    else
        Log.i(TAG,"surface is not valid");

}
@Override
protected void onResume() {
    super.onResume();
    Log.i(TAG, "on resume");

}
private Uri getOutputMediaFile()
{
    File sdCard = Environment.getExternalStorageDirectory();
    File dir = new File (sdCard.getAbsolutePath() + "/MyApp/recorder");
    dir.mkdirs();


    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    File file = new File(dir.getPath() + File.separator+ "VID_"+timeStamp+".mp4");
    return Uri.fromFile(file);

}

private void goToLoadActivity() {
    Intent intent = new Intent(this, LoadActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    startActivity(intent);
}

private void exitActivity() {
    exitActivity();
}

错误消息:

  

09-03 23:33:29.246 790-1140 /? E / DatabaseUtils:向parcel写入异常   java.lang.SecurityException:Permission Denial:用户的get / set设置要求以用户-2运行,但是从用户0调用;这需要android.permission.INTERACT_ACROSS_USERS_FULL   at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:15031)               在android.app.ActivityManager.handleIncomingUser(ActivityManager.java:2488)               在com.android.providers.settings.SettingsProvider.call(SettingsProvider.java:688)               在android.content.ContentProvider $ Transport.call(ContentProvider.java:325)               在android.content.ContentProviderNative.onTransact(ContentProviderNative.java:275)               在android.os.Binder.execTransact(Binder.java:404)               在dalvik.system.NativeStart.run(原生方法)

     

09-03 23:33:29.246 10581-10581 /? I / MYTAG:表面有效   09-03 23:33:29.246 10581-10581 /? I / MYTAG:重置记录器   09-03 23:33:29.246 790-1140 /? W / ActivityManager:权限拒绝:用户的get / set设置要求以用户-2运行,但是从用户0调用;这需要android.permission.INTERACT_ACROSS_USERS_FULL   09-03 23:33:29.256 10581-10581 /? I / MYTAG:setAudioSource   09-03 23:33:29.256 10581-10581 /? I / MYTAG:setVideoSource   09-03 23:33:29.256 184-551 /? W / QualcommCamera2:Q int android :: get_camera_info(int,camera_info *):E   09-03 23:33:29.256 10581-10581 /? I / MYTAG:setProfile   09-03 23:33:29.266 10581-10581 /? I / MYTAG:file:///storage/emulated/0/MyApp/recorder/VID_20150903_233329.mp4   09-03 23:33:29.266 10581-10581 /? I / MYTAG:setOutputFile   09-03 23:33:29.266 10581-10581 /? I / MYTAG:setMaxDuration   09-03 23:33:29.266 10581-10581 /? I / MYTAG:setMaxFileSize   09-03 23:33:29.276 10581-10581 /? W / System.err:java.io.FileNotFoundException:/file:/storage/emulated/0/MyApp/recorder/VID_20150903_233329.mp4:open failed:ENOENT(没有这样的文件或目录)   09-03 23:33:29.276 10581-10581 /? W / System.err:at libcore.io.IoBridge.open(IoBridge.java:409)   09-03 23:33:29.276 10581-10581 /? W / System.err:在java.io.FileOutputStream。(FileOutputStream.java:88)   09-03 23:33:29.276 10581-10581 /? W / System.err:在java.io.FileOutputStream。(FileOutputStream.java:128)   09-03 23:33:29.276 10581-10581 /? W / System.err:在java.io.FileOutputStream。(FileOutputStream.java:117)   09-03 23:33:29.276 10581-10581 /? W / System.err:在android.media.MediaRecorder.prepare(MediaRecorder.java:812)

0 个答案:

没有答案