cwac-camera "... поддерживается только в альбомной ориентации" исключение
Я пытаюсь записать видео, используя библиотеку Android cwac-camera. Я знаю, что библиотека поддерживает запись только в альбомной ориентации, но я не могу заставить ее перестать бросать UnsupportedOperationException: Video recording supported only in landscape
, Я пытался использовать CameraView lockToLandscape()
метод и принудительной ориентации экрана вручную с помощью андроидов setDisplayOrientation
(как в коде, так и в конфигурации XML), но независимо от CameraInfo
говорит мне, что ориентация 90
, И CameraView's getDisplayOrientation()
возвращается -1
, Вот моя активность и фрагмент:
Есть некоторая странность в результате нахождения внутри плагина Cordova (я не могу использовать R).
public class RecordActivity extends Activity implements CameraHostProvider {
public static final String TAG = "ApparatusRecordActivity";
private VideoRecordingFragment current=null;
private boolean recording_state = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
String package_name = getApplication().getPackageName();
int layoutid = getApplication().getResources().getIdentifier("apparatus_activity_main", "layout", package_name);
int containerid = getApplication().getResources().getIdentifier("container", "id", package_name);
Log.d(TAG,"layout id: " + layoutid);
Log.d(TAG,"container id: " + containerid);
setContentView(layoutid);
current = new VideoRecordingFragment();
getFragmentManager().beginTransaction().add(containerid, current, "video_camera_fragment").commit();
SimpleCameraHost host = getCameraHost();
current.setHost(host);
Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(host.getCameraId(),info);
Log.d(TAG,"Orientation rotation: " + info.orientation);
}
@Override
public SimpleCameraHost getCameraHost() {
return (new SimpleCameraHost.Builder(this)
.recordingHint(CameraHost.RecordingHint.VIDEO_ONLY)
//.useFrontFacingCamera(true)
.videoDirectory(new File("/sdcard"))
.build());
}
public void record(View v) {
try {
if (recording_state == false) {
recording_state = true;
Log.d(TAG,"Start recording");
current.record();
current.getButton().setText("Stop");
} else {
recording_state = false;
Log.d(TAG,"Stop recording");
current.stopRecording();
current.getButton().setText("Record");
}
} catch (Exception e) {
// Print stack trace and try again.
Log.e(TAG,Log.getStackTraceString(e));
}
}
}
А вот фрагмент VideoRecordingFragment, который он вызывает:
public class VideoRecordingFragment extends CameraFragment {
public static final String TAG = "ApparatusVideoRecordingFragment";
public String package_name;
public int camera_layout_id;
public int camera_component_id;
public CameraView camera_view;
public View content;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
package_name = getActivity().getApplication().getPackageName();
camera_layout_id = getActivity().getApplication().getResources().getIdentifier("apparatus_camera", "layout", package_name);
Log.d(TAG,"camera_layout_id: " + camera_layout_id);
content = inflater.inflate(camera_layout_id, container, false);
camera_component_id = getActivity().getApplication().getResources().getIdentifier("camera", "id", package_name);
Log.d(TAG,"camera_component_id: " + camera_component_id);
CameraView camera_view = (CameraView) content.findViewById(camera_component_id);
//camera_view.lockToLandscape(true);
Log.d(TAG,"camera_view orientation: " + camera_view.getDisplayOrientation());
setCameraView(camera_view);
return(content);
}
public int getIdentifier(String asset, String type) {
return getActivity().getApplication().getResources().getIdentifier(asset,type,package_name);
}
public Button getButton() {
return ((Button)content.findViewById(getIdentifier("record_button","id")));
}
}