Débutant, j'ai rencontré un problème au début de l'apprentissage de Service
Je l'ai fait selon le tutoriel, et il a planté au démarrage du service
MyService.java
package com.example.administrator.myhhhhh;
importer android.app.Service;
importer android.content.Intent;
importer android.os.IBinder;
importer android.util.Log;
classe publique MyService étend le 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;
importer android.content.Intent;
importer android.support.v7.app.AppCompatActivity;
importer android.os.Bundle;
importer android.view.View;
importer android.widget.Button;
La classe publique MainActivity étend AppCompatActivity implémente 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>
</manifeste>
Message d'erreur Logcat :
05-04 21:28:44.377 21214-21214/com.example.administrator.myhhhhh E/AndroidRuntime : EXCEPTION FATALE : 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 : Envoi du signal PID : 21214 SIG : 9
Intent intent=new Intent("MyService");Qu'est-ce que c'est ? Celui-ci ne peut pas être appelé quelle que soit la version du système Android. Il existe deux manières de démarrer le service, l'appel explicite et l'appel implicite :
1) Démarrage de l'affichage :
Service d'appel en classe,
2) Démarrage implicite :
Il s'agit du chemin absolu de la classe de service (avec la partie nom du package). Il convient de noter que le démarrage implicite est obsolète dans la dernière version d'Android (5.0 et supérieure) (en raison de problèmes de sécurité), et vous devez le faire. effectuez un traitement supplémentaire dessus (obtenez sa propriété ComponentName via l'action), voici un moyen pour vous, le code est le suivant :
Je vous souhaite bonne chance~
Mon intention a été mal écrite