对于android–需要从Sensor.TYPE_ORIENTATION数据计算旋转矢量感兴趣的读者,本文将会是一篇不错的选择,并为您提供关于aiohttp.client_exceptions.Con
对于android – 需要从Sensor.TYPE_ORIENTATION数据计算旋转矢量感兴趣的读者,本文将会是一篇不错的选择,并为您提供关于aiohttp.client_exceptions.ContentTypeError: 0:json(content_type=‘??‘)、Android Camera Orientation ISsue、Android On Orientation改变崩溃、Android Orientation Sensor的有用信息。
本文目录一览:- android – 需要从Sensor.TYPE_ORIENTATION数据计算旋转矢量
- aiohttp.client_exceptions.ContentTypeError: 0:json(content_type=‘??‘)
- Android Camera Orientation ISsue
- Android On Orientation改变崩溃
- Android Orientation Sensor
android – 需要从Sensor.TYPE_ORIENTATION数据计算旋转矢量
传感器数据定义如下:
>必须重新计算这些值才能成为正确的3d位置:值[0]:方位角,磁北方向和Y轴之间的角度,绕Z轴(0到359). 0 =北,90 =东,180 =南,270 =西
> values1:俯仰,绕X轴旋转(-180到180),当z轴向y轴移动时为正值.
>值[2]:滚动,绕Y轴旋转(-90到90),当x轴远离z轴时带正值
我需要所有三个值,如Z轴值(从0到360度).我尝试了很多,但无法弄清楚如何做到这一点:/
(编辑:要查看工作代码背后的想法,请查看DroidAR framework的ActionWithSensorProcessing类,您可以看到如何处理不同的事件类型.)
我还尝试使用Sensor.TYPE_ACCELEROMETER和Sensor.TYPE_MAGNETIC_FIELD来自行计算这个3d矢量.这是代码:
final float[] inR = new float[16]; // load inR matrix from current sensor data: SensorManager.getRotationMatrix(inR,null,gravityValues,geomagneticValues); float[] orientation = new float[3]; SensorManager.getorientation(inR,orientation); mapMagAndAcclDataToVector(orientation); //here i do some *360 stuff orientetionChanged(orientation); //then the correct values are passed (in theorie)
但这不起作用,我认为这很复杂.
所以我打赌有一个简单的解决方案如何重新计算ensor.TYPE_ORIENTATION的值,使它们成为一个3d旋转矢量,但我只是不知道该怎么做.如果你知道答案,请告诉我.
编辑:
我应该补充一点,我想将值传递给OpenGL,使其与轴对齐,如下所示:
gl.glrotatef(values[1],1,0); gl.glrotatef(values[2],0); gl.glrotatef(values[0],1);
但由于奇怪的价值范围,我显然无法做到这一点.同样的问题
SensorManager.getorientation中的值,因为当您通过水平线时它们也会翻转.
另一个解决方案是使用inR矩阵计算角度,但我认为必须有一个更简单的解决方案(?)
解决方法
switch (event.sensor.getType()) { case Sensor.TYPE_MAGNETIC_FIELD: magnitude_values = event.values.clone(); sensorReady = true; break; case Sensor.TYPE_ACCELEROMETER: accelerometer_values = event.values.clone(); } if (magnitude_values != null && accelerometer_values != null && sensorReady) { sensorReady = false; float[] R = new float[16]; float[] I = new float[16]; SensorManager.getRotationMatrix(R,I,this.accelerometer_values,this.magnitude_values); float[] actual_orientation = new float[3]; SensorManager.getorientation(R,actual_orientation); }
把这个conde放在你的onSensorChanged中.在actual_orientation中,您将获得指向北方的向量与您的实际位置相关.
如果你想从摄像机的角度来检测北方,你必须改变这样的最后一行代码
float[] outR = new float[16]; SensorManager.remapCoordinateSystem(R,SensorManager.AXIS_X,SensorManager.AXIS_Z,outR); SensorManager.getorientation(outR,actual_vals);
aiohttp.client_exceptions.ContentTypeError: 0:json(content_type=‘??‘)
aiohttp.client_exceptions
- 问题
- 解决
问题
# 获取异步requests
async with aiohttp.ClientSession() as session:
async with session.post(url, headers=headers, data=data) as resp:
# 写入数据
csvWriter.writerow(await resp.json()) # 读取内容是异步的,需要挂起
print('库编号', data['p'], '爬取完毕!')
from aioHTTP_Requests import requests
async def req(URL):
headers = {"Accept": 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
"Accept-Language": "zh-CN,zh;q=0.9", "Host": "xin.baidu.com",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/72.0.3626.121 Safari/537.36", }
resp = await requests.get(URL,headers=headers,timeout=10,verify_ssl=False)
resp_text = await resp.json(encoding='utf-8')
return resp_text
if __name__ == "__main__":
print("HELLO WORLD")
URL = "https://xin.baidu.com/detail/basicAjax?pid=xlTM-TogKuTw9PzC-u6VwZxUBuZ5J7WMewmd"
loop = asyncio.get_event_loop()
loop.run_until_complete(req(URL))
csvWriter.writerow(await resp.json())
运行上面的程序会报错
解决
ContentTypeError:类型错误
在resp.json()
:传入编码文本类型参数即可:
resp.json(content_type='text/html',encoding='utf-8')
参考:Link
衷心感谢!
Android Camera Orientation ISsue
Some devices doesn''t rotate image after it was taken but just write its orientation information into Exif data. So before using taken photo you should call method like :
private int resolveBitmapOrientation(File bitmapFile) throws IOException { ExifInterface exif = null; exif = new ExifInterface(bitmapFile.getAbsolutePath()); return exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); }
private Bitmap applyOrientation(Bitmap bitmap, int orientation) {
int rotate = 0;
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_270:
rotate = 270;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotate = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_90:
rotate = 90;
break;
default:
return bitmap;
}
int w = bitmap.getWidth();
int h = bitmap.getHeight();
Matrix mtx = new Matrix();
mtx.postRotate(rotate);
return Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true);
}
and use this new bitmap in your listview. Or it''s even better to call this methods just after your photo was taken and override it with new rotated one.
Android On Orientation改变崩溃
> PlaceDetailsFragment – 具有视图寻呼机 – PlaceSlideFragment
> PlaceMapFramgment – 托管Google地图
当我尝试更改方向时,应用程序崩溃时出现以下错误日志.
01-12 15:24:57.950: E/AndroidRuntime(30412): FATAL EXCEPTION: main 01-12 15:24:57.950: E/AndroidRuntime(30412): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.m7.nomad/com.m7.nomad.PlaceActivity}: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.m7.nomad.fragments.PlaceSlideFragment: make sure class name exists,is public,and has an empty constructor that is public 01-12 15:24:57.950: E/AndroidRuntime(30412): at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1968) 01-12 15:24:57.950: E/AndroidRuntime(30412): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993) 01-12 15:24:57.950: E/AndroidRuntime(30412): at android.app.ActivityThread.handlerelaunchActivity(ActivityThread.java:3363) 01-12 15:24:57.950: E/AndroidRuntime(30412): at android.app.ActivityThread.access$700(ActivityThread.java:127) 01-12 15:24:57.950: E/AndroidRuntime(30412): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1163) 01-12 15:24:57.950: E/AndroidRuntime(30412): at android.os.Handler.dispatchMessage(Handler.java:99) 01-12 15:24:57.950: E/AndroidRuntime(30412): at android.os.Looper.loop(Looper.java:137) 01-12 15:24:57.950: E/AndroidRuntime(30412): at android.app.ActivityThread.main(ActivityThread.java:4507) 01-12 15:24:57.950: E/AndroidRuntime(30412): at java.lang.reflect.Method.invokeNative(Native Method) 01-12 15:24:57.950: E/AndroidRuntime(30412): at java.lang.reflect.Method.invoke(Method.java:511) 01-12 15:24:57.950: E/AndroidRuntime(30412): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 01-12 15:24:57.950: E/AndroidRuntime(30412): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 01-12 15:24:57.950: E/AndroidRuntime(30412): at dalvik.system.NativeStart.main(Native Method) 01-12 15:24:57.950: E/AndroidRuntime(30412): Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.m7.nomad.fragments.PlaceSlideFragment: make sure class name exists,and has an empty constructor that is public 01-12 15:24:57.950: E/AndroidRuntime(30412): at android.support.v4.app.Fragment.instantiate(Fragment.java:405) 01-12 15:24:57.950: E/AndroidRuntime(30412): at android.support.v4.app.FragmentState.instantiate(Fragment.java:97) 01-12 15:24:57.950: E/AndroidRuntime(30412): at android.support.v4.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1767) 01-12 15:24:57.950: E/AndroidRuntime(30412): at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:208) 01-12 15:24:57.950: E/AndroidRuntime(30412): at com.m7.nomad.PlaceActivity.onCreate(PlaceActivity.java:34) 01-12 15:24:57.950: E/AndroidRuntime(30412): at android.app.Activity.performCreate(Activity.java:4465) 01-12 15:24:57.950: E/AndroidRuntime(30412): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052) 01-12 15:24:57.950: E/AndroidRuntime(30412): at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1932) 01-12 15:24:57.950: E/AndroidRuntime(30412): ... 12 more 01-12 15:24:57.950: E/AndroidRuntime(30412): Caused by: java.lang.InstantiationException: can''t instantiate class com.m7.nomad.fragments.PlaceSlideFragment; no empty constructor 01-12 15:24:57.950: E/AndroidRuntime(30412): at java.lang.class.newInstanceImpl(Native Method) 01-12 15:24:57.950: E/AndroidRuntime(30412): at java.lang.class.newInstance(Class.java:1319) 01-12 15:24:57.950: E/AndroidRuntime(30412): at android.support.v4.app.Fragment.instantiate(Fragment.java:394) 01-12 15:24:57.950: E/AndroidRuntime(30412): ... 19 more
PlaceSlidesFragemntsAdapter.java
public class PlaceSlidesFragmentAdapter extends FragmentPagerAdapter { DBAdapter db = new DBAdapter(SplashActivity.context); List<String> photoList = new ArrayList<String>(); private int mCount; public PlaceSlidesFragmentAdapter(FragmentManager fm) { super(fm); db.open(); Cursor photosCursor = db.getPhotos(PlaceActivity.placeId); // Iterate Through the Place Cursor if (photosCursor.movetoFirst()) { do { photoList.add(photosCursor.getString(1)); } while (photosCursor.movetoNext()); } db.close(); mCount = photoList.size(); } @Override public Fragment getItem(int position) { return new PlaceSlideFragment(photoList.get(position)); } @Override public int getCount() { return mCount; } public void setCount(int count) { if (count > 0 && count <= 10) { mCount = count; notifyDataSetChanged(); } } }
PlaceSlideFragment.java
public final class PlaceSlideFragment extends Fragment { String imageResourceId; public PlaceSlideFragment(String i) { imageResourceId = i; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) { ImageView image = new ImageView(getActivity()); ImageLoader imgLoader = new ImageLoader(MainActivity.context); imgLoader.displayImage(imageResourceId,new Activity(),image); LinearLayout layout = new LinearLayout(getActivity()); layout.setLayoutParams(new LayoutParams()); layout.setGravity(Gravity.CENTER); layout.addView(image); return layout; } }
解决方法
使用setArguments(Bundle)而不是直接将参数传递给构造函数.
在你的PlaceSlideFragment.java示例中删除构造函数.相反,在onCreateView中使用:
imageResourceId = getArguments().getString("param");
然后,即时添加PlaceSlideFragment使用此代码:
Fragment f = new PlaceSlideFragment(); Bundle args = new Bundle(); args.putString("param",yourParam); f.setArguments(args);
或者如果你将这段代码移动到PlaceSlideFragment的静态方法中会更好
Android Orientation Sensor
package zhangphil.sensor;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
private String TAG = "ZHANG PHIL";
private SensorManager mSensorManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startSensor();
}
/**
* 启动传感器。
*/
private void startSensor() {
mSensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);
Sensor mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
if (mSensorManager == null || mSensor == null) {
throw new UnsupportedOperationException("设备不支持");
}
boolean isRegister = mSensorManager.registerListener(mSensorEventListener, mSensor, SensorManager.SENSOR_DELAY_NORMAL);
if (!isRegister) {
throw new UnsupportedOperationException();
}
}
private SensorEventListener mSensorEventListener = new SensorEventListener() {
private float x = 0, x_old = 0, y = 0, y_old = 0, z = 0, z_old = 0;
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
z = sensorEvent.values[0];
x = sensorEvent.values[1];
y = sensorEvent.values[2];
Log.d(TAG, x + " , " + y + " , " + z);
if (Math.abs(z - z_old) > 45) {
Log.d(TAG, "横竖屏切换");
}
x_old = x;
y_old = y;
z_old = z;
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
};
@Override
protected void onDestroy() {
super.onDestroy();
mSensorManager.unregisterListener(mSensorEventListener);
}
}
我们今天的关于android – 需要从Sensor.TYPE_ORIENTATION数据计算旋转矢量的分享就到这里,谢谢您的阅读,如果想了解更多关于aiohttp.client_exceptions.ContentTypeError: 0:json(content_type=‘??‘)、Android Camera Orientation ISsue、Android On Orientation改变崩溃、Android Orientation Sensor的相关信息,可以在本站进行搜索。
本文标签: