java.lang.RuntimeException:无法实例化服务

时间:2012-06-22 14:14:33

标签: java android debugging

我正在尝试编写一个监视短信息的应用程序。我想从我的主Activity类启动一个服务,但该服务由于某种原因没有启动。我认为我在清单文件中如何声明我的服务或者如何从我的活动中调用它可能存在问题。 以下是我的活动代码的一部分:

public class TablighBlockActivity extends Activity {
    /** Called when the activity is first created. */
    private ToggleButton toggEnable;

    public void onCreate(Bundle savedInstanceState) {
        if (loadState("running")==false){startService(new Intent(this, SMSMonitor.class));}
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

以下是我的服务类的一部分:

public class SMSMonitor extends BroadcastReceiver {


@Override
public void onReceive(Context context, Intent intent) {

    Intent i = new Intent(context,SMSMonitor.class);
    i.setClass(context, SMSMonitor.class);
    context.startService(i);

这是我的清单文件:

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="tabligh.block"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="3" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>


    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <receiver android:name="SMSMonitor">  
            <intent-filter>  
                <action android:name="android.intent.action.BOOT_COMPLETED" /> 
                <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> 
            </intent-filter>  

        </receiver>

        <activity
            android:name=".TablighBlockActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:enabled="true" android:name=".SMSMonitor"
                                    android:process=":smsmonitor"
                                    ></service>
    </application>

</manifest>

这是错误日志:

06-22 13:46:14.649: W/dalvikvm(1013): threadid=3: thread exiting with uncaught exception (group=0x4000fe70)
06-22 13:46:14.668: E/AndroidRuntime(1013): Uncaught handler: thread main exiting due to uncaught exception
06-22 13:46:15.038: E/AndroidRuntime(1013): java.lang.RuntimeException: Unable to instantiate service tabligh.block.SMSMonitor: java.lang.ClassCastException: tabligh.block.SMSMonitor
06-22 13:46:15.038: E/AndroidRuntime(1013):     at android.app.ActivityThread.handleCreateService(ActivityThread.java:2449)
06-22 13:46:15.038: E/AndroidRuntime(1013):     at android.app.ActivityThread.access$2800(ActivityThread.java:112)
06-22 13:46:15.038: E/AndroidRuntime(1013):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1744)
06-22 13:46:15.038: E/AndroidRuntime(1013):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-22 13:46:15.038: E/AndroidRuntime(1013):     at android.os.Looper.loop(Looper.java:123)
06-22 13:46:15.038: E/AndroidRuntime(1013):     at android.app.ActivityThread.main(ActivityThread.java:3948)
06-22 13:46:15.038: E/AndroidRuntime(1013):     at java.lang.reflect.Method.invokeNative(Native Method)
06-22 13:46:15.038: E/AndroidRuntime(1013):     at java.lang.reflect.Method.invoke(Method.java:521)
06-22 13:46:15.038: E/AndroidRuntime(1013):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
06-22 13:46:15.038: E/AndroidRuntime(1013):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
06-22 13:46:15.038: E/AndroidRuntime(1013):     at dalvik.system.NativeStart.main(Native Method)
06-22 13:46:15.038: E/AndroidRuntime(1013): Caused by: java.lang.ClassCastException: tabligh.block.SMSMonitor
06-22 13:46:15.038: E/AndroidRuntime(1013):     at android.app.ActivityThread.handleCreateService(ActivityThread.java:2446)
06-22 13:46:15.038: E/AndroidRuntime(1013):     ... 10 more

感谢。

3 个答案:

答案 0 :(得分:2)

   public class SMSMonitor extends BroadcastReceiver {

您是SMSMonitor,它是BroadcastReceiver而非服务

Intent i = new Intent(context,SMSMonitor.class);
    i.setClass(context, SMSMonitor.class);
    context.startService(i);

答案 1 :(得分:1)

tabligh.block.SMSMonitor是清单文件中的接收者和服务吗?

我认为应该是Service.and将BroadCastReceiver扩展到SMSMonitor。

 <receiver android:name="SMSMonitor"> **and**  

   <service android:enabled="true" android:name=".SMSMonitor"
                                    android:process=":smsmonitor"
                                    ></service>

Intent i = new Intent(context,SMSMonitor.class);
//i.setClass(context, SMSMonitor.class);<<Remove this line no need...
context.startService(i);

答案 2 :(得分:0)

我有时会因为没有使用标准onCreate()super.onCreate()启动setContentView()而遇到奇怪的错误。

和其他人一样,请确保您已将Service添加到Manifest file。在创建活动后忘记添加活动是我最大的错误!

编辑:抱歉,不知何故错过了你放在那里的所有Manifest代码。