更新时间:2022-12-27 12:29:01
2400(ActivityThread.java:221)
在android.app .ActivityThread
H.handleMessage(ActivityThread.java:1897)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os .Looper.loop(Looper.java:158)
在android.app.ActivityThread.main(ActivityThread.java:7225)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit
MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main( ZygoteInit.java:1120)
引起:java.lang.IllegalStateException:onCreate()之前的活动不可用的系统服务
at android.app.Activity.getSystemService(Activity.java:5762)
at com.name.flyrecorder.SensorListener。< init>(SensorListener.java:16)
at com.name.flyrecorde r.CheckStart
I tried to create an App with an Service in background which listen for changes of the acceleration. When i now try to start the Service the app crashes:
This is the Error Message:
05-30 19:11:03.764 12650-12650/com.name.flyrecorder E/AndroidRuntime: FATAL EXCEPTION: main Process: com.nameflyrecorder, PID: 12650 java.lang.RuntimeException: Unable to start service com.name.flyrecorder.CheckStart@3d998d with Intent { cmp=com.name.flyrecorder/.CheckStart }: java.lang.IllegalStateException: System services not available to Activities before onCreate() at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4079) at android.app.ActivityThread.access$2400(ActivityThread.java:221) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1897) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7225) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) Caused by: java.lang.IllegalStateException: System services not available to Activities before onCreate() at android.app.Activity.getSystemService(Activity.java:5762) at com.name.flyrecorder.SensorListener.<init>(SensorListener.java:16) at com.name.flyrecorder.CheckStart$TestAcc.<init>(CheckStart.java:38) at com.name.flyrecorder.CheckStart.onStartCommand(CheckStart.java:29) at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4062) at android.app.ActivityThread.access$2400(ActivityThread.java:221) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1897) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7225) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
What I have tried:
My Mainfest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.name.flyrecorder">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
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>
<service android:name=".CheckStart" />
</application>
</manifest>
This is my Main Activity:
package com.name.flyrecorder;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startService(new Intent(this, CheckStart.class));
}
public void startBackgroundListener(View view){
startService(new Intent(this, CheckStart.class));
}
}
My Service:
package com.name.flyrecorder;
import android.app.Service;
import android.content.Intent;
import android.hardware.SensorManager;
import android.os.AsyncTask;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.util.Log;
import android.widget.Toast;
import java.util.Timer;
import java.util.TimerTask;
public class CheckStart extends Service {
public CheckStart(){
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId){
Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();
new TestAcc().execute();
return Service.START_NOT_STICKY;
}
@Override
public void onDestroy(){
Toast.makeText(this,"Service Stopped", Toast.LENGTH_SHORT).show();
}
public class TestAcc extends AsyncTask<Void, Void, Void>{
SensorListener sensorListener = new SensorListener();
double[] sensor_values = new double[2];
@Override
protected Void doInBackground(Void... voids) {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
sensor_values = sensorListener.getValues();
Log.i("X",String.valueOf(sensor_values[0]));
Log.i("Y",String.valueOf(sensor_values[1]));
Log.i("Z",String.valueOf(sensor_values[2]));
}
},2000
);
return null;
}
}
}
And my SensorListener:
package com.name.flyrecorder;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v4.app.FragmentActivity;
public class SensorListener extends FragmentActivity implements SensorEventListener {
Sensor accelerometer;
SensorManager sensorManager;
double ax,ay,az = 0;
public SensorListener(){
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
ax = event.values[0];
ay = event.values[1];
az = event.values[2];
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public double[] getValues(){
double[] values = {ax,ay,az};
return values;
}
}
2400(ActivityThread.java:221) at android.app.ActivityThread
H.handleMessage(ActivityThread.java:1897) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7225) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit
MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) Caused by: java.lang.IllegalStateException: System services not available to Activities before onCreate() at android.app.Activity.getSystemService(Activity.java:5762) at com.name.flyrecorder.SensorListener.<init>(SensorListener.java:16) at com.name.flyrecorder.CheckStart