Service problem in Android Studio
phpcn_u1582
phpcn_u1582 2017-05-16 13:28:31
0
3
998

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

phpcn_u1582
phpcn_u1582

reply all(3)
大家讲道理

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:

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

Calling service through class,

2) Implicit startup:

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

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:

 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);
    }

Wish you good luck~

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

My intent was written wrong

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template