调用另一个文件中的类以提供服务。

huangapple 未分类评论51阅读模式
英文:

calling class from another file to service

问题

Accelerometer.java:

  1. package com.example.pahoappv2;
  2. import android.content.Context;
  3. import android.hardware.Sensor;
  4. import android.hardware.SensorEvent;
  5. import android.hardware.SensorEventListener;
  6. import android.hardware.SensorManager;
  7. public class Accelerometer {
  8. public interface Listener {
  9. void onTranslation(float tx, float ty, float tz);
  10. }
  11. private Listener listener;
  12. public void setListener(Listener l) {
  13. listener = l;
  14. }
  15. private SensorManager sensorManager;
  16. private Sensor sensor;
  17. private SensorEventListener sensorEventListener;
  18. Accelerometer(Context context) {
  19. sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
  20. sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
  21. if (sensor == null) System.out.println("sensor not found"); // debug message
  22. sensorEventListener = new SensorEventListener() {
  23. @Override
  24. public void onSensorChanged(SensorEvent sensorEvent) {
  25. if (listener != null) {
  26. listener.onTranslation(sensorEvent.values[0], sensorEvent.values[1], sensorEvent.values[2]);
  27. }
  28. }
  29. @Override
  30. public void onAccuracyChanged(Sensor sensor, int i) {
  31. }
  32. };
  33. }
  34. public void register() {
  35. sensorManager.registerListener(sensorEventListener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
  36. }
  37. public void unregister() {
  38. sensorManager.unregisterListener(sensorEventListener);
  39. }
  40. }

MainActivity.java (working codes properly):

  1. private Accelerometer accelerometer;
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.activity_main);
  5. accelerometer = new Accelerometer(this);
  6. accelerometer.setListener(new Accelerometer.Listener() {
  7. @Override
  8. public void onTranslation(float tx, float ty, float tz) {
  9. //getting data and doing smt
  10. }
  11. });
  12. ...
  13. ...
  14. ...
  15. }

ExampleService.java:

  1. public class ExampleService extends Service {
  2. Accelerometer accelerometer; // working
  3. accelerometer = new Accelerometer(this); // working
  4. accelerometer.setListener( // IDE cant see setListener method
  5. new Accelerometer.Listener() {
  6. @Override
  7. public void onTranslation(float tx, float ty, float tz) {
  8. // get data
  9. }
  10. });
  11. ...
  12. ...
  13. ...
  14. }
英文:

I have a class Accelerometer.java taking data from sensors and I can call it in MainActivity, it works. But in order to make a application running in background, I built a service and now I want to call my sensor class here. But my IDE(android studio) cant see the methods of class while it works for MainActivity perfectly.

Thank you so much

Accelerometer.java

  1. package com.example.pahoappv2;
  2. import android.content.Context;
  3. import android.hardware.Sensor;
  4. import android.hardware.SensorEvent;
  5. import android.hardware.SensorEventListener;
  6. import android.hardware.SensorManager;
  7. public class Accelerometer {
  8. public interface Listener {
  9. void onTranslation(float tx,float ty,float tz);
  10. }
  11. private Listener listener;
  12. public void setListener(Listener l){
  13. listener = l;
  14. }
  15. private SensorManager sensorManager;
  16. private Sensor sensor;
  17. private SensorEventListener sensorEventListener;
  18. Accelerometer(Context context){
  19. sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
  20. sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
  21. if(sensor==null) System.out.println("sensor not found"); //debug message
  22. sensorEventListener = new SensorEventListener() {
  23. @Override
  24. public void onSensorChanged(SensorEvent sensorEvent) {
  25. if(listener!=null) {
  26. listener.onTranslation(sensorEvent.values[0],sensorEvent.values[1],sensorEvent.values[2]);
  27. }
  28. }
  29. @Override
  30. public void onAccuracyChanged(Sensor sensor, int i) {
  31. }
  32. };
  33. }
  34. public void register(){
  35. sensorManager.registerListener(sensorEventListener,sensor,SensorManager.SENSOR_DELAY_NORMAL);
  36. }
  37. public void unregister(){
  38. sensorManager.unregisterListener(sensorEventListener);
  39. }
  40. }

MainActivity.java (working codes properly)

  1. private Accelerometer accelerometer;
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.activity_main);
  5. accelerometer = new Accelerometer(this);
  6. accelerometer.setListener(new Accelerometer.Listener() {
  7. @Override
  8. public void onTranslation(float tx, float ty, float tz) {
  9. //getting data and doing smt
  10. }
  11. });
  12. ...
  13. ...
  14. ...
  15. }

ExampleService.java

  1. public class ExampleService extends Service {
  2. Accelerometer accelerometer; //working
  3. accelerometer = new Accelerometer(this); //working
  4. accelerometer.setListener( //IDE cant see setListener method
  5. new Accelerometer.Listener() {
  6. @Override
  7. public void onTranslation(float tx, float ty, float tz) {
  8. //get data
  9. }
  10. });
  11. ...
  12. ...
  13. ...
  14. }

答案1

得分: 0

你必须在onCreate、onStartCommand等方法内调用它...

  1. public class ExampleService extends Service {
  2. @Override
  3. public void onCreate() {
  4. super.onCreate();
  5. Accelerometer accelerometer; // 正在工作
  6. accelerometer = new Accelerometer(this); // 正在工作
  7. accelerometer.setListener(
  8. new Accelerometer.Listener() {
  9. @Override
  10. public void onTranslation(float tx, float ty, float tz) {
  11. // 获取数据
  12. }
  13. });
  14. }
  15. // ...
  16. // ...
  17. // ...
  18. }
英文:

You have to call it inside onCreate, onStartCommand ...

  1. public class ExampleService extends Service {
  2. @Override
  3. public void onCreate() {
  4. super.onCreate();
  5. Accelerometer accelerometer; //working
  6. accelerometer = new Accelerometer(this); //working
  7. accelerometer.setListener(
  8. new Accelerometer.Listener() {
  9. @Override
  10. public void onTranslation(float tx, float ty, float tz) {
  11. //get data
  12. }
  13. });
  14. }
  15. ...
  16. ...
  17. ...

}

huangapple
  • 本文由 发表于 2020年7月27日 08:16:45
  • 转载请务必保留本文链接:https://java.coder-hub.com/63107115.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定