Tôi đã nâng cấp Nexus 5 lên Marshmallow với OTA. Vì hoạt động dựa trên cảm biến đơn giản cập nhật không hoạt động nữa. Đoạn mã sau làm những gì cần làm trên các thiết bị khác (Galaxy S4 Lolipop, AVD, ...)Kể từ khi cập nhật OTA lên Marshmallow ứng dụng dựa trên con quay hồi chuyển của tôi không còn hoạt động nữa
Có ai đó đã thử nghiệm điều này không? Tôi có nhớ điều gì không?
Đây là mã:
build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "fr.rouk1.test"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest
package="fr.rouk1"
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-feature
android:name="android.hardware.sensor.gyroscope"
android:required="true"/>
<uses-feature
android:name="android.hardware.sensor.accelerometer"
android:required="true"/>
<uses-feature
android:name="android.hardware.sensor.compass"
android:required="true"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
MainActivity.java
package fr.rouk1;
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class MainActivity extends Activity implements SensorEventListener {
private TextView mText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mText = (TextView) findViewById(R.id.text);
initSensor();
}
private void initSensor() {
SensorManager sm = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);
if (sm.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR) == null) {
sm.registerListener(this,
sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
sm.registerListener(this,
sm.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
SensorManager.SENSOR_DELAY_NORMAL);
sm.registerListener(this,
sm.getDefaultSensor(Sensor.TYPE_GYROSCOPE),
SensorManager.SENSOR_DELAY_FASTEST);
} else {
sm.registerListener(this,
sm.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR),
SensorManager.SENSOR_DELAY_FASTEST);
}
}
@Override
public void onSensorChanged(SensorEvent event) {
// this is never called
String s = "";
for (int i = 0; i < event.values.length; i++) {
s = s.concat(String.format("%.4f, ", event.values[i]));
}
mText.setText(s);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
switch (accuracy) {
case SensorManager.SENSOR_STATUS_ACCURACY_HIGH:
Log.d("rouk1", "SENSOR_STATUS_ACCURACY_HIGH");
break;
case SensorManager.SENSOR_STATUS_ACCURACY_LOW:
Log.d("rouk1", "SENSOR_STATUS_ACCURACY_LOW");
break;
case SensorManager.SENSOR_STATUS_ACCURACY_MEDIUM:
Log.d("rouk1", "SENSOR_STATUS_ACCURACY_MEDIUM");
break;
case SensorManager.SENSOR_STATUS_NO_CONTACT:
Log.d("rouk1", "SENSOR_STATUS_NO_CONTACT");
break;
case SensorManager.SENSOR_STATUS_UNRELIABLE:
Log.d("rouk1", "SENSOR_STATUS_UNRELIABLE");
break;
}
}
}
Khi một ứng dụng gặp sự cố, bạn có thể kiểm tra logcat vì lý do tai nạn. probebly nó sẽ cung cấp cho bạn gợi ý về lý do tại sao nó bị rơi. chia sẻ logcat có thể giúp hiểu vấn đề. nhìn vào một mã rơi không phải là hữu ích mà không biết tại sao nó bị rơi. –
Ứng dụng không bị lỗi, chức năng 'onSensorChanged' không bao giờ được gọi. – rouk1
làm thế nào để bạn biết 'onSensorChanged' không được gọi. https://code.google.com/p/android/issues/detail?id=3708 có liên quan? –