2015-10-17 3 views
5

मैंने अपने नेक्सस 5 को मार्शमलो को ओटीए के साथ अपग्रेड कर दिया है। चूंकि अद्यतन सरल सेंसर आधारित गतिविधि अब और काम नहीं करती है। निम्नलिखित कोड अन्य उपकरणों (गैलेक्सी एस 4 लॉलीपॉप, एवीडी, ...) परचूंकि मार्शमलो को ओटीए अपडेट के बाद से मेरा जीरोस्कोप आधारित ऐप अब काम नहीं करता है

क्या किसी ने इसका प्रयोग किया है? क्या मुझे कुछ याद आती है?

यहाँ कोड है:

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; 
     } 
    } 
} 
+0

जब कोई ऐप क्रैश होता है, तो आप क्रैश कारण के लिए लॉगकैट की जांच कर सकते हैं। संभवतः यह आपको संकेत देगा कि यह क्यों दुर्घटनाग्रस्त हो गया। लॉगकैट साझा करना समस्या को समझने में मदद कर सकता है। एक क्रैशिंग कोड को देखते हुए यह जानकर उपयोगी नहीं है कि यह क्यों दुर्घटनाग्रस्त हो गया। –

+1

ऐप क्रैश नहीं होता है, फ़ंक्शन 'ऑन सेंसर चेंज' को अभी कभी नहीं कहा जाता है। – rouk1

+0

आप कैसे जानते हैं 'ऑन सेंसर चेंज' को नहीं कहा जाता है। https://code.google.com/p/android/issues/detail?id=3708 संबंधित? –

उत्तर

1

अंत में यह issue मिला। अस्थायी समाधान SENSOR_DELAY_FASTEST के बजाय SENSOR_DELAY_GAME का उपयोग करना है।

संबंधित मुद्दे