public class camera1 extends Activity {
SurfaceView cameraPreview;
SurfaceHolder previewHolder;
Camera camera;
boolean inPreview;
SensorManager sensorManager;
int accelerometerSensor;
LocationManager locationManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.camera1);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
2000, 2, locationListener);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
orientationSensor = Sensor.TYPE_ORIENTATION;
accelerometerSensor = Sensor.TYPE_ACCELEROMETER;
sensorManager.registerListener(sensorEventListener,
sensorManager.getDefaultSensor(orientationSensor),
SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(sensorEventListener,
sensorManager.getDefaultSensor(accelerometerSensor),
SensorManager.SENSOR_DELAY_NORMAL);
inPreview = false;
cameraPreview = (SurfaceView) findViewById(R.id.cameraPreview);
previewHolder = cameraPreview.getHolder();
previewHolder.addCallback(surfaceCallback);
previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
latitude = location.getLatitude();
longitude = location.getLongitude();
altitude = location.getAltitude();
}
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
}
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
};
final SensorEventListener sensorEventListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent sensorEvent) {
if (sensorEvent.sensor.getType() == Sensor.TYPE_ORIENTATION) {
headingAngle = sensorEvent.values[0];
pitchAngle = sensorEvent.values[1];
rollAngle = sensorEvent.values[2];
............................
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public class MixView extends Activity implements SensorEventListener,LocationListener, OnTouchListener{
// 카메라 스크린과 증강된 뷰
private CameraSurface camScreen;
private AugmentedView augScreen;
private boolean isInited; // 초기 세팅이 되어 있는가
private MixContext mixContext; // 메인 컨텍스트
static PaintScreen dWindow; // 스크린 윈도우
static DataView dataView; // 데이터 뷰
private Thread downloadThread; // 마커의 내용을 다운로드 할 스레드
// 센서와 위치 정보를 읽기 위함
private SensorManager sensorMgr;
private List<Sensor> sensors;
private Sensor sensorGrav, sensorMag;
private LocationManager locationMgr;
private boolean isGpsEnabled;
private SeekBar myZoomBar; // 줌 배율을 설정하기 위함
private WakeLock mWakeLock; // 화면이 점멸되지 않게 하기 위함
private boolean fError; // 에러 여부
// 나침반 에러
private int compassErrorDisplayed = 0;
// 줌 레벨과 프로그레스 수치
private String zoomLevel;
private int zoomProgress;
// 리스트 뷰에 쓰일, JSON으로부터 읽어온 타이틀과 URL을 저장할 벡터들
// private Vector<String> listDataVector;
// private Vector<String> listURL;
// 뷰 생성시
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 초기화
// 데이터 소스로부터 아이콘 생성
DataSource.createIcons(getResources());
try {
handleIntent(getIntent()); // 인텐트 제어
// 전원관리자
final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
// 화면이 꺼지지 않게 하기위한 웨이크 락
this.mWakeLock = pm.newWakeLock(
PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "My Tag");
// 위치관리자의 설정
locationMgr = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
// 위치정보 업데이트 설정. 2번째 인자 시간(1/1000s), 3번째 인자 거리(m)에 따라 갱신한다
locationMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000,10, this);
killOnError(); // 에러 여부를 체크한다
requestWindowFeature(Window.FEATURE_NO_TITLE); // 타이틀 바가 없는 윈도우 형태로
/*내부 메모리에 저장된 프레퍼런스를 불러온다*/
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit(); // 변경사항을 기록할 에디터
// 줌 바의 생성과 설정
myZoomBar = new SeekBar(this);
myZoomBar.setVisibility(View.INVISIBLE);
myZoomBar.setMax(100);
// 프레퍼런스로부터 줌 레벨을 읽는다. 디폴트 값은 65
myZoomBar.setProgress(settings.getInt("zoomLevel", 65));
// 체인지 리스너를 등록하고
myZoomBar.setOnSeekBarChangeListener(myZoomBarOnSeekBarChangeListener);
myZoomBar.setVisibility(View.INVISIBLE); // 갱신
// 프레임 레이아웃을 사용한다
FrameLayout frameLayout = new FrameLayout(this);
// 카메라 스크린과 증강 스크린을 생성하고
camScreen = new CameraSurface(this);
augScreen = new AugmentedView(this);
setContentView(camScreen); // 카메라 스크린을 컨텐트 뷰로 등록 후
// 증강 스크린을 덧씌워 준다
addContentView(augScreen, new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
......
안녕하세요 안드로이드 공부중인 대학생입니다
현재 증강현실 관련 어플을 제작중인데
camera1 액티비티는 카메라에 레이아웃을 이용해서 이미지뷰에 캐릭터를 띄우는 액티비티
mixview 액티비티는 카메라에 레이아웃을 전혀이용하지않고 건물마커를 띄우는 액티비팅입니다
저는 두개를 합쳐서 카메라에 캐릭터와 건물마커를 동시에 띄우고 싶은데하나의 액티비티에서 다른액티비티의 oncreate를 호출하려는 방식으로 하는데 안되네요...ㅠ
센서리스너도 서로 다른방식으로 사용해서 하나의 소스에 몰아가는것도 힘들고 좀 도와주세요..ㅠ
예제도 같이 설명해주시면 더감사합니다..ㅠ