Вспомогательный класс - ошибка Не удалось запустить действие ComponentInfo: - PullRequest
1 голос
/ 29 декабря 2011

Ошибка Невозможно запустить действие ComponentInfo: java.lang.IllegalStateException: системные службы недоступны для действий до onCreate ()

Я экспериментирую с разделением кода и использованием вспомогательного класса.(Создал разные файлы Java) Я создал файл Activity Java, который зарегистрирован в Манифесте, и я не зарегистрировал следующий класс (файл Java):

import android.app.Activity;
import android.location.LocationManager;
import android.net.ConnectivityManager;
....


public class DeviceMonitor extends Activity {

    boolean laag=false;
    int level=-1;
    double batterylevel=-1;


    public boolean GPSEnabled() {

    final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) { // NO GPS ENABLED
        //ErrorMessage.append(R.string.enablegps);
        //ErrorMessage.append("\n");
        Log.d("StartPrepare","GPS DISABLED");
        return false;
                    } else {
        Log.d("StartPrepare","GPS ENABLED");
        return true;
                    }
    }

Я удалил OnCreate ()метод, это правильно?Должен ли я зарегистрироваться в Манифесте, если да, то как?

Я получил следующую ошибку при звонке из зарегистрированной операции, например:

DeviceMonitor MyDevice = new DeviceMonitor();
if (MyDevice.GPSEnabled()){gpsenabled=true;}else{gpsenabled=false;fout=true;}

Ошибка:

E / AndroidRuntime (1912): java.lang.RuntimeException: невозможно запустить действие. ComponentInfo {package}: java.lang.IllegalStateException: системные службы недоступны для действий до onCreate ()

Кто-нибудь, кто может дать мне некоторое представление о вспомогательных классах (я новичок в Java / Android) и может понять, что может вызвать ошибка?Я пытался добавить метод OnCreate (), но он не помог.

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 29 декабря 2011

НЕ делайте этого ...

DeviceMonitor MyDevice = new DeviceMonitor();

DeviceMonitor расширяет Activity, и вы никогда не должны создавать экземпляр Activity, используя new. Android Activity является классом особого случая и не должен рассматриваться как обычный класс Java.

Если вы хотите запустить Activity, вам нужно сделать это, используя startActivity...) или один из других методов 'start'.

Если вам нужен вспомогательный класс, просто создайте стандартный класс Java, который ничего не расширяет. Когда вы создаете его экземпляр из своего основного Activity, передайте ему Activity Context в его конструкторе, затем используйте его для доступа к службам Android и т. Д. Пример ...

public class DeviceMonitor {

    Context mContext = null;

    public DeviceMonitor (Context context) {
        mContext = context;
    }
}

РЕДАКТИРОВАТЬ: Чтобы создать свой помощник и передать Context от вашего основного Activity сделать это ...

// An Activity IS a Context so pass 'this'
DeviceMonitor MyDevice = new DeviceMonitor(this);
0 голосов
/ 29 декабря 2011

Вы должны объявить свой

boolean GPSEnabled 

после вызова метода onCreate () в вашем классе или службе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...