Problème de service dans Android Studio
phpcn_u1582
phpcn_u1582 2017-05-16 13:28:31
0
3
999

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

phpcn_u1582
phpcn_u1582

répondre à tous(3)
大家讲道理

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 :

Intent intent=new Intent(MainActivity.this,MyService.class);

Service d'appel en classe,

2) Démarrage implicite :

Intent intent=new Intent("com.example.administrator.myhhhhh.MyService");

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 :

 protected static synchronized void startService(Context context,String action){
        LogUtils.debug("startHeartBeatService.");
        if (context==null){
            throw new NullPointerException("context must not be null.");
        }
        //add Urgent listener service.
        Intent mIntent=new Intent();
        mIntent.setAction(action);
        PackageManager pm = context.getPackageManager();
        List<ResolveInfo> resolveInfo = pm.queryIntentServices(mIntent, 0);
        // Make sure only one match was found
        if (resolveInfo == null || resolveInfo.size() != 1) {
            LogUtils.debug("not found action like this \'com.hll.push.heartbeat\'");
            return;
        }
        // Get component info and create ComponentName
        ResolveInfo serviceInfo = resolveInfo.get(0);
        String packageName = serviceInfo.serviceInfo.packageName;
        String className = serviceInfo.serviceInfo.name;
        ComponentName component = new ComponentName(packageName, className);
        // Create a new intent. Use the old one for extras and such reuse
        Intent explicitIntent = new Intent(mIntent);
        // Set the component to be explicit
        explicitIntent.setComponent(component);
        context.startService(explicitIntent);
    }

Je vous souhaite bonne chance~

Ty80
Intent intent=new Intent(this,MyService.class);
大家讲道理

Mon intention a été mal écrite

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal