#android #accelerometer #gyroscope #android-gravity
#Android #акселерометр #гироскоп #android-гравитация
Вопрос:
Я работаю над проектом Android, основанным на датчике движения. Для различных целей я использую акселерометр, гироскоп в моем проекте.
Вот пример onCreate() для метода onResume():
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*To setup Gravity*/
flickManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Objects.requireNonNull(flickManager).registerListener(mSensorListener, flickManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
mAccel = 10f;
mAccelCurrent = SensorManager.GRAVITY_EARTH;
mAccelLast = SensorManager.GRAVITY_EARTH;
/*End Here*/
/*To setup YouTube API*/
youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view);
youTubeView.initialize(Config.YOUTUBE_API_KEY, this);
/*---------End-------------------*/
/*Setup the textbox*/
txtView = (TextView) findViewById(R.id.ttview);
txtview2 = (TextView) findViewById(R.id.ttview2);
txtview3 = (TextView) findViewById(R.id.ttview3);
txtview4 = (TextView) findViewById(R.id.ttview4);
final EditText seekToText = (EditText) findViewById(R.id.seek_to_text);
/*-----------------End------------------------------*/
/* Setup seekbar*/
Button seekToButton = (Button) findViewById(R.id.seek_to_button);
seekToButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int skipToSecs = Integer.valueOf(seekToText.getText().toString());
player.seekToMillis(skipToSecs * 1000);
Log.d("dur:" skipToSecs * 1000,"Second");
}
});
protected void onResume()
{
flickManager.registerListener(mSensorListener, flickManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
super.onResume();
//accelerometer.register();
//gyroscope.register();
}
Мой подход заключается в том, чтобы сначала проверить некоторые условия, прежде чем активировать какую-либо работу, основанную на движении.
Возможно ли установить какое-либо условие, такое как «If-else» здесь? Если нет, то какой наилучшей практикой будет вызывать их извне метода, чтобы узнать, должны ли они активироваться или нет.
Спасибо.
Комментарии:
1. да, вы можете настроить любое условие, которое хотите, что вы пробовали до сих пор?
2. Я пытался использовать условие if-else для onResume(), например
if(flickManager.registerListener(mSensorListener, flickManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);) { accelerometer.register(); }
, но оно ни на что не реагирует в эмуляторе, приложение, похоже, вообще не запускается.3. Если приложение не запускается, похоже, что где-то произошел сбой. Можете ли вы проверить logcat на наличие некоторых журналов?
4. Вот оно: « Исключение java.lang.RuntimeException: невозможно возобновить активность {com.example. YouTilt/com.example. YouTilt. MainActivity}: android.util. Исключение SuperNotCalledException: Activity {com.example.apps/com.example.apps. MainActivity} не вызывал super.onResume(), вызванный: android.util. Исключение SuperNotCalledException: Activity {com.example.apps/com.example.apps. MainActivity} не вызывал super.onResume() « Это то, что у меня сейчас есть.
5. Ах, хорошо, так что ошибка просто говорит о том, что вам нужно вызвать
super.onResume()
inonResume()
. Судя по вашему коду, вы, похоже, этого не делаете.