java.lang.RuntimeException: Unable to instantiate service

强颜欢笑 提交于 2020-01-04 11:03:36

问题


I am trying to code an application that monitors sms messages. I want to start a service from my main Activity class, but the service doesn't start for some reason. I think there might be a problem with how I declared my service in the manifest file or how I call it from my activity. Here is a part of my activity Code:

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);

and Here is a part of my Service class:

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);

And here is my manifest File:

    <?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>

and here is the error log:

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

Thanks.


回答1:


   public class SMSMonitor extends BroadcastReceiver {

you are SMSMonitor which is a BroadcastReceiver not Service

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



回答2:


tabligh.block.SMSMonitor is receiver and service in your manifest file ?

i think it should be Service.and extends BroadCastReceiver to SMSMonitor.

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

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

AND

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



回答3:


I've sometimes come across weird errors by not starting onCreate() with the standard super.onCreate() and setContentView().

And like others have said, make sure that you have added the Service to your Manifest file. This and forgetting to add Activities after I create them are my biggest mistake!

edit: Sorry, somehow missed all the Manifest code you put there.



来源:https://stackoverflow.com/questions/11157953/java-lang-runtimeexception-unable-to-instantiate-service

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!