我正在尝试创建没有UI / Activity的Service应用程序。 该服务将在BOOT_COMPLETED开始。目前,当接收方服务无法启动主服务时,我遇到了一个问题。
错误听起来像(Android设备监视器):
标记:活动管理器 文字:无法启动服务Intent {cmp = com.remote.cat / .ActionService} U = 0:未找到
我在设备上的Android操作系统版本是4.2.2
我在PowerShell中通过此命令测试它:
adb.exe shell am broadcast -a android.intent.action.BOOT_COMPLETED -n com.remote.cat/.AutoStartServiceReceiver
这两项服务都在 com.remote.cat
包的根目录中感觉我错过了一件小事或打错了,非常感谢任何帮助! 谢谢!
以下是清单的代码:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.remote.cat"
android:installLocation="internalOnly">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application android:allowBackup="true" android:label="@string/app_name"
android:icon="@mipmap/ic_launcher" android:theme="@style/AppTheme">
<receiver android:name="com.remote.cat.AutoStartServiceReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
<service android:name="com.remote.cat.AutoStartServiceReceiver"></service>
<service android:name="com.remote.cat.ActionService"></service>
</manifest>
这是brodcastreceiver类:
package com.remote.cat;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class AutoStartServiceReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED))
{
Intent serviceIntent = new Intent(context, ActionService.class);
//Intent serviceIntent = new Intent("com.remote.cat.ActionService");
context.startService(serviceIntent);
}
}
}
以下是我要尝试的主要服务:
package com.remote.cat;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;
import java.util.TimerTask;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class ActionService extends Service
{
private ScheduledThreadPoolExecutor executor = null;
@Override
public IBinder onBind(Intent intent)
{
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
executor = new ScheduledThreadPoolExecutor(4);
final ScheduledFuture<?> handle = executor.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "one minute message", Toast.LENGTH_LONG).show();
}
}, 0, 8, TimeUnit.SECONDS);
return START_STICKY;
}
}
答案 0 :(得分:1)
将清单中的AutoStartServiceReceiver
声明更改为<receiver>
而不是<service>
。
答案 1 :(得分:0)
错误发生在您的broadcastreceiver类
中if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED))
应该是
if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
修改强>
我认为您必须在应用程序标记内声明您的服务,因为它是应用程序的一部分