如果有人可以帮助解决这个问题,我将非常感激。
我有一个使用AlarmManager启动服务的活动,它运行正常。我创造了一个 新服务(修改后的副本),这是错误的: java.lang.RuntimeException:无法启动服务...使用Intent {...(有额外内容)}: java.lang.ClassCastException
我做了很多搜索并多次检查我的清单,因为它似乎是通常的问题。这两个服务都是声明的,它们位于应用程序标记内并且是完全作用域的。我见过的大多数例子只提到一个服务,所以,为了以防万一,我尝试了几种不同的方法来编写清单中的2个服务,但没有找到除下面的服务之外的有效版本。
我已经尝试了几种创建意图的方法,因为我认为问题在于事实 新服务位于不同的包中(在同一个应用程序中)。
我还尝试了一个意图过滤器和自定义操作(参见底部),但它也给出了同样的错误。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="couk.jit.currencycheck1"
android:versionCode="1"
android:versionName="1.0.1" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="couk.jit.currencycheck1.MainMenu"
...
</activity>
<service
android:name="couk.jit.currencycheck1.ServiceClass"
android:enabled="true" />
<service
android:name="couk.jit.currencycheck1.xml.ServiceClassXML"
android:enabled="true" />
<activity
android:name="couk.jit.currencycheck1.HistoryActivity"
android:label="@string/title_activity_history" >
</activity>
</application>
</manifest>
此版本的活动代码会出错。
import couk.jit.currencycheck1.xml.ServiceClassXML;
...
Intent intent;
if (dataSource == 0 || dataSource == 1)
intent = new Intent(this, ServiceClass.class);
else {
intent = new Intent(this, ServiceClassXML.class); //gives error
}
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0);
AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP,
scheduleStart.getTimeInMillis(), 60 * 1000, pintent);
这两个版本没有给出错误 - 但是没有达到服务。没有日志消息,没有动作。 (a)中
//intent = new Intent(this, ServiceClassXML.class); //gives error
intent = new Intent("couk.jit.currencycheck1.xml.ServiceClassXML");
(b)中
//intent = new Intent(this, ServiceClassXML.class); //gives error
//intent = new Intent("couk.jit.currencycheck1.xml.ServiceClassXML");
intent = new Intent();
intent.setComponent(new ComponentName("couk.jit.currencycheck1.xml","ServiceClassXML.java"));
也尝试了这个,它给出了同样的错误。
intent = new Intent(context, ServiceClassXML.class);
服务类
public class ServiceClassXML extends Service {
SharedPreferences prefs = null;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("DBG", "ServiceClassXML started");
prefs = PreferenceManager.getDefaultSharedPreferences(this.getApplication().getApplicationContext());
boolean run = prefs.getBoolean("running", false);
if (!run)
stopSelf();
else {
new GetXMLTask(this.getApplication().getApplicationContext(), true).execute("");
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}
尝试使用intent过滤器和自定义操作。 清单
<service
android:name="couk.jit.currencycheck1.xml.ServiceClassXML"
android:enabled="true" >
<intent-filter>
<action android:name="couk.jit.currencycheck1.xml.DO_CUSTOM_ACTION"/>
</intent-filter>
</service>
活动
//intent = new Intent(this, ServiceClassXML.class);
//intent = new Intent("couk.jit.currencycheck1.xml.ServiceClassXML");
//intent = new Intent();
//intent.setComponent(new ComponentName("couk.jit.currencycheck1.xml","ServiceClassXML.java")); //service not reached
intent = new Intent("couk.jit.currencycheck1.xml.DO_CUSTOM_ACTION");
intent.setClass(this, ServiceClassXML.class);
logcat的
09-03 16:56:32.344: E/AndroidRuntime(763): FATAL EXCEPTION: main
09-03 16:56:32.344: E/AndroidRuntime(763): java.lang.RuntimeException: Unable to start service couk.jit.currencycheck1.xml.ServiceClassXML@4602fc38 with Intent { flg=0x4 cmp=couk.jit.currencycheck1/.xml.ServiceClassXML (has extras) }: java.lang.ClassCastException: android.app.Application
09-03 16:56:32.344: E/AndroidRuntime(763): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3063)
09-03 16:56:32.344: E/AndroidRuntime(763): at android.app.ActivityThread.access$3600(ActivityThread.java:125)
09-03 16:56:32.344: E/AndroidRuntime(763): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2096)
09-03 16:56:32.344: E/AndroidRuntime(763): at android.os.Handler.dispatchMessage(Handler.java:99)
09-03 16:56:32.344: E/AndroidRuntime(763): at android.os.Looper.loop(Looper.java:123)
09-03 16:56:32.344: E/AndroidRuntime(763): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-03 16:56:32.344: E/AndroidRuntime(763): at java.lang.reflect.Method.invokeNative(Native Method)
09-03 16:56:32.344: E/AndroidRuntime(763): at java.lang.reflect.Method.invoke(Method.java:521)
09-03 16:56:32.344: E/AndroidRuntime(763): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-03 16:56:32.344: E/AndroidRuntime(763): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-03 16:56:32.344: E/AndroidRuntime(763): at dalvik.system.NativeStart.main(Native Method)
09-03 16:56:32.344: E/AndroidRuntime(763): Caused by: java.lang.ClassCastException: android.app.Application
09-03 16:56:32.344: E/AndroidRuntime(763): at couk.jit.currencycheck1.xml.GetXMLTask.<init>(GetXMLTask.java:52)
09-03 16:56:32.344: E/AndroidRuntime(763): at couk.jit.currencycheck1.xml.ServiceClassXML.onStartCommand(ServiceClassXML.java:24)
09-03 16:56:32.344: E/AndroidRuntime(763): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3053)
09-03 16:56:32.344: E/AndroidRuntime(763): ... 10 more
答案 0 :(得分:0)