我知道网上有一些类似的问题,但没有一个能解决我的问题。 我在三星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)