anroid开发问题整理

      把每天出现的问题记下来,避免遗忘。


1.关于activity设置为singleInstance和singleTask的问题,当设置了此属性的时候,发现onActivityResult方法不好使了,经过查多方资料,发现当然设置此属性的时候,其实直接返回了取消结果返回的,主要原因是此activity实例其实是一直存在的。解决方法:如果跳转到另一个activity也是自己写的话,那么可以返回一个intent,当前activity在onNewIntent方法里处理,如果跳转到的另一个activity不是自己写的,那么只能用一个非singleInstance的activity中转下。 


2.关于webview的问题,如果用到webview的时候要和其它的activity交互(比如相机功能)的时候,发现返回到webview的activity的时候,webview会重新加载,这是一个很讨厌人的问题,因为一个webview可能会加载很久,这时候就需要将webview的activity设置为singleInstance,也就是上一个问题。


3.关于camera拍照,android2.0以上api是支持往JPEG图片里写入一些信息的,比如经纬度、拍照时间、白平衡、拍照角度等等一些信息,用到的类是ExifInterface,可是带了一个问题,就是存经纬度的时候发现不能存进去,主要原因是这个类存入信息的时候是按照固定的格式来存入的,比如经纬度的格式是"34.2324254/xxxxx",前者是经纬度,后者是地球半径值好像,因为坐标系的不同(比如54坐标系和西安80坐标系)的地球半径值是不一样的,所以这个类支持的还是比较多的,我们如果只需要存入一种的话完全可以前者是经纬度,后者弄一个固定的后缀,这样自己也好取。


4.下面是获取手机设备方向的方法,需要实现SensorEventListener,然后重写以下方法

 

	@Override
	public void onSensorChanged(SensorEvent event) {
		float[] values = event.values;
		int orientation = Configuration.ORIENTATION_UNDEFINED;
		float X = -values[0];
		float Y = -values[1];
		float Z = -values[2];
		float magnitude = X * X + Y * Y;
		// Don't trust the angle if the magnitude is small compared to the y
		// value
		// 这里是关键,来至于谷歌官方
		if (magnitude * 4 >= Z * Z) {
			float OneEightyOverPi = 57.29577957855f;
			float angle = (float) Math.atan2(-Y, X) * OneEightyOverPi;
			orientation = 90 - (int) Math.round(angle);
			// normalize to 0 - 359 range
			while (orientation >= 360) {
				orientation -= 360;
			}
			while (orientation < 0) {
				orientation += 360;
			}
		}
		if(orientation < 45 || orientation >= 315){
			screentDirection = 0;
		}else if(orientation >= 45 && orientation < 135){
			screentDirection = 90;
		}else if(orientation >= 135 && orientation < 225){
			screentDirection = 180;
		}else{
			screentDirection = 270;
		}
	}

你可能感兴趣的:(anroid)