Newbie, I encountered a problem at the beginning of learning Service
I did it according to the tutorial, and it crashed when starting the service
MyService.java
package com.example.administrator.myhhhhh;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class MyService extends Service {
public MyService() {
}
@Override
public void onCreate() {
Log.i("LOG","onCreat");
super.onCreate();
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
}
MainActivity.java
package com.example.administrator.myhhhhh;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android. widget.Button;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button start,stop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button start=(Button)findViewById(R.id.button);
Button stop=(Button)findViewById(R.id.button2);
start.setOnClickListener(this);
stop.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent=new Intent("MyService");
switch (v.getId()){
case R.id.button:
startService(intent);
break;
case R.id.button2:
stopService(intent);
break;
}
}
}
Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk /res/android"
package="com.example.administrator.myhhhhh">
<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=".MyService"
>
<intent-filter>
<action android:name="MyService"/>
</intent-filter>
</service>
</application>
</manifest>
Logcat error message:
05-04 21:28:44.377 21214-21214/com.example.administrator.myhhhhh E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.administrator.myhhhhh, PID: 21214
java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=MyService }
at android.app.ContextImpl.validateServiceIntent(ContextImpl.java:1851)
at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1880)
at android.app.ContextImpl.startService(ContextImpl.java:1864)
at android.content.ContextWrapper.startService(ContextWrapper.java:516)
at com.example.administrator.myhhhhh.MainActivity.onClick(MainActivity.java:26)
at android.view.View.performClick(View.java:4918)
at android.view.View$PerformClick.run(View.java:20399)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5871)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1119)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:885)
05-04 21:28:44.434 21214-21214/com.example.administrator.myhhhhh I/Process: Sending signal. PID: 21214 SIG: 9
Intent intent=new Intent("MyService");What the hell? This cannot be called up regardless of the version of the Android system. There are two ways to start the service, explicit calling and implicit calling:
1) Display startup:
Calling service through class,
2) Implicit startup:
It is the absolute path of the service class (with the package name part). It should be noted that implicit startup has been deprecated in the latest version of Android (5.0 and above) (due to security issues), and you need to perform some additional processing on it. (Get its ComponentName property through action), here is a way for you, the code is as follows:
Wish you good luck~
My intent was written wrong