我有一个很大的问题,我正在开发一个启动后启动的应用程序。通过使用BOOT_COMPLETED意图动作很容易实现,至少在Android 3.1中,所有已安装的应用程序都处于“停止”状态(对吗?),并且必须明确启动才能注册所有BroadcastReceivers。因此,我首次添加了一个活动让我的应用程序启动(因为其余的基于服务,启动器中没有图标)并注册接收器。发生了奇怪的事情是在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()”。
感谢任何可以引导我找到正确解决方案的建议:)
@EDIT
我希望这就是你的意思。
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
答案 0 :(得分:0)
而不是
<service android:name="TheService"
你可能想拥有
<service android:name=".TheService"
答案 1 :(得分:0)
我真的不认为这个错误与你的服务或接收器有关。因为它说无法找到这个类:com.android.providers.calendar.CalendarProvider2
所以你可能正在使用某些第三方库或其他东西,是吗?如果是,那么可能是一个问题,如何实现它?
如果它是一个罐子,我会建议你去属性&gt; Java Build Path,如果你的jar没有勾选,那就把它打开并再次清理你的项目。