0

我有一个很大的问题,我正在开发一个启动后启动的应用程序。使用 BOOT_COMPLETED 意图操作很容易实现,至少在 Android 3.1 之前,所有已安装的应用程序都处于“停止”状态(对吗?),并且必须显式启动以注册所有广播接收器。因此,我添加了一个活动来让我的应用程序首次启动(因为其余部分基于服务,启动器中没有图标)并注册接收器。发生的奇怪的事情是它在 2.2 上完美运行,而在 Android 4.0 和 4.1 上(我猜都是 3.1 以上)我收到错误“无法启动服务意图 {...} 未找到”。我觉得我的 cmp = smth/.service 而不是 smth.service 很奇怪。您能否解释一下与此问题相关的那些系统的区别?

我的清单(应用程序部分,其余部分不相关):

<application android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
  <receiver android:name=".ReceiverCall" android:exported="false" android:enabled="true" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.USER_PRESENT" />
            <action android:name="android.intent.action.SCREEN_ON" />
            <action android:name="android.intent.action.SCREEN_OFF" />
            <action android:name="com.android.ondeath" />
        </intent-filter>
</receiver>
  <service android:name="TheService" android:label="@string/app_name" android:exported="false" android:enabled="true" />
  <activity android:name=".Main"
            android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
  </activity>
</application>

还有接收器:

public class ReceiverCall extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    if(TheService.running() == false)
    {
    Log.d("Service", "ReceiverCall onReceive()");
    context.startService(new Intent(context, TheService.class));
    }
}
}

我的活动刚刚开始,没有布局,它运行 onCreate,它本身只有“finish()”。

感谢您提供任何可以引导我找到正确解决方案的建议:)

@编辑

我希望这就是你的意思。

09-28 16:26:09.509: E/Trace(599): error opening trace file: No such file or directory (2)
09-28 16:26:09.639: I/ActivityThread(599): Pub com.android.calendar:     com.android.providers.calendar.CalendarProvider2
09-28 16:26:09.869: D/ExchangeService(550): !!! EAS ExchangeService, onStartCommand, startingUp = true, running = false
09-28 16:26:09.929: D/dalvikvm(182): WAIT_FOR_CONCURRENT_GC blocked 0ms
09-28 16:26:10.140: D/dalvikvm(182): GC_EXPLICIT freed 544K, 13% free 11241K/12871K, paused 23ms+38ms, total 214ms
09-28 16:26:10.259: D/dalvikvm(615): Not late-enabling CheckJNI (already on)
09-28 16:26:10.289: I/ActivityManager(182): Start proc co.appdemo for broadcast co.appdemo/.ReceiverCall: pid=615 uid=10044 gids={3003, 1015, 1028}
09-28 16:26:10.629: E/Trace(615): error opening trace file: No such file or directory (2)
09-28 16:26:10.729: D/Service(615): running()
09-28 16:26:10.729: D/Service(615): ReceiverCall onReceive()
09-28 16:26:10.749: W/ActivityManager(182): Unable to start service Intent { cmp=co.appdemo/.TheService }: not found
09-28 16:26:11.079: D/dalvikvm(294): GREF has increased to 201
4

2 回答 2

0

我真的不认为这个错误与您的服务或接收器有关。因为它说找不到此类:com.android.providers.calendar.CalendarProvider2

所以可能你正在使用一些第三方库或其他东西,对吗?如果是,那么它可能是一个与您如何实现它相关的问题?

如果它是一个 jar,我建议您转到 properties > Java Build Path,如果您的 jar 没有勾选,则将其放上并清理您的项目再次运行。

于 2013-09-28T16:37:35.007 回答
0

代替

<service android:name="TheService"

你可能想要

<service android:name=".TheService"
于 2013-09-28T16:28:07.437 回答