Для класса Service я вижу android .content.ActivityNotFoundException: не удается найти явный класс активности - PullRequest
0 голосов
/ 04 февраля 2020

Я работаю с Android и сталкиваюсь со следующей ошибкой при создании службы и ее запуске из основного потока операций. Я проделал go через все потоки, связанные с этой ошибкой, но эту ошибку они видят в основном для задачи Activity Ниже приведены сведения об ошибке и коде

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.serviceexample/com.example.serviceexample.MyServiceBg}; have you declared this activity in your AndroidManifest.xml?

Я проверил свой AndriodManifest. xml и я вижу службу, объявленную

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.serviceexample">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="ServiceExample"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <service
            android:name=".MyIntentService"
            android:exported="false"></service>

        <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=".MyBgService"/>
    </application>

</manifest>

MainActivity. java:

package com.example.serviceexample;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn = (Button)findViewById(R.id.displayBtn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent displayTost  = new Intent(MainActivity.this, MyBgService.class);
                startActivity(displayTost);
            }
        });
    }

Мой фоновый сервис:

package com.example.serviceexample;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;

import androidx.annotation.Nullable;

public class MyBgService extends Service {

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        int i;
        for (i = 1; i< 10; i++) {
            Toast.makeText(getApplicationContext(), "Number = "+i, Toast.LENGTH_LONG).show();
        }
        return Service.START_NOT_STICKY;
    }
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

Я попытался связать путь в AndroidManifest. xml. Но все равно получаю такую ​​же ошибку. Не уверен, в чем проблема.

Вот версия Gradle: 3.5.3, и я использую версию SDK 29

Любая помощь будет высоко оценена.

Ответы [ 2 ]

4 голосов
/ 04 февраля 2020

В основном по нажатию кнопки, вы запускаете сервис. Вместо этого

startActivity(displayTost);

используйте

startService(new Intent(MainActivity.this, MyBgService.class));
3 голосов
/ 04 февраля 2020

MyBgService - это услуга . Это не деятельность. Вы не можете сделать как

startActivity(displayTost);

вместо

startService(displayTost);
...