cari

Rumah  >  Soal Jawab  >  teks badan

Masalah perkhidmatan dalam Android Studio

Pemula, saya menghadapi masalah pada permulaan pembelajaran Perkhidmatan
Saya melakukannya mengikut tutorial, dan ia ranap semasa memulakan perkhidmatan
MyService.java

pakej com.contoh.pentadbir.myhhhhh;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

MyService kelas awam melanjutkan Perkhidmatan {

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

pakej com.contoh.pentadbir.myhhhhh;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

MainActivity kelas awam melanjutkan AppCompatActivity melaksanakan 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>

Mesej ralat Logcat:
05-04 21:28:44.377 21214-21214/com.example.administrator.myhhhhh E/AndroidRuntime: PENGECUALIAN MAUT: utama

                                                                               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/Proses: Menghantar isyarat PID: 21214 SIG: 9

phpcn_u1582phpcn_u15822743 hari yang lalu968

membalas semua(3)saya akan balas

  • 大家讲道理

    大家讲道理2017-05-16 13:30:31

    Intent intent=new Intent("MyService");What the hell? Ini tidak boleh dipanggil tanpa mengira versi sistem Android Terdapat dua cara untuk memulakan perkhidmatan, panggilan eksplisit dan panggilan tersirat:

    1) Paparan permulaan:

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

    Perkhidmatan panggilan melalui kelas,

    2) Permulaan tersirat:

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

    Ia adalah laluan mutlak kelas perkhidmatan (dengan bahagian nama pakej) Perlu diingat bahawa permulaan tersirat telah ditamatkan dalam versi terkini Android (5.0 dan ke atas) (disebabkan oleh isu keselamatan), dan anda perlu lakukan beberapa pemprosesan tambahan padanya (Dapatkan sifat ComponentName melalui tindakan), berikut ialah cara untuk anda, kodnya adalah seperti berikut:

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

    Semoga berjaya~

    balas
    0
  • PHP中文网

    PHP中文网2017-05-16 13:30:31

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

    balas
    0
  • 大家讲道理

    大家讲道理2017-05-16 13:30:31

    Niat saya salah tulis

    balas
    0
  • Batalbalas