服务无法在重启时启动

时间:2013-01-15 09:19:32

标签: android android-manifest android-broadcast

我正在尝试在启动设备时启动服务。我已经搜索了很多,并按照步骤进行了操作,但仍然无法解决问题。移动设备重新启动后,它会在开头显示“应用程序意外停止”。我知道它来自接收器文件,但无法弄清楚特别是问题所在。

Receiver.java

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class Receiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent arg1) {
        // TODO Auto-generated method stub
        if(arg1.getAction().equals(Intent.ACTION_BOOT_COMPLETED))
        {
            Intent myIntent = new Intent();
            myIntent.setAction("com.androidhive.jsonparsing.UpdateService");
            context.startService(myIntent);
        }
    }   
}

AndroidManifest

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:label="@string/app_name"
        android:name=".AndroidJSONParsingActivity" >
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <!-- Single List Item View -->
    <activity
        android:label="Single Menu Item"
        android:name=".SingleMenuItemActivity" >
    </activity>
    <service android:name=".UpdateService">
        <intent-filter>
            <action android:name="com.androidhive.jsonparsing.UpdateService"/>
        </intent-filter>
    </service>
    <receiver android:name=".MyReceiver" 
        android:enabled="true"
        android:exported="false">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
    </receiver>
</application>

我是否需要添加任何内容以便服务正常启动。

3 个答案:

答案 0 :(得分:0)

将您的收件人声明为AndroidManifest.xml

 <receiver android:name=".Receiver" 
        android:enabled="true"
        android:exported="false">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
    </receiver>

因为您将BroadcastReceiver类设为Receiver.class,但在AndroidManifest.xml中使用MyReceiver声明它

答案 1 :(得分:0)

请检查你的android清单应该是这样的:

<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
    android:label="@string/app_name"
    android:name=".AndroidJSONParsingActivity" >
    <intent-filter >
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<!-- Single List Item View -->
<activity
    android:label="Single Menu Item"
    android:name=".SingleMenuItemActivity" >
</activity>
<service android:name=".UpdateService">
    <intent-filter>
        <action android:name="com.androidhive.jsonparsing.UpdateService"/>
    </intent-filter>
</service>
<receiver android:name=".Receiver" 
    android:enabled="true"
    android:exported="false">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

问题出在你的接收器声明中。 请检查android:name标签,它应该有正确的类名。

答案 2 :(得分:0)

而不是使用

Intent myIntent = new Intent();
myIntent.setAction("com.androidhive.jsonparsing.UpdateService");
context.startService(myIntent);

尝试在接收器中执行此操作

Intent myIntent = new Intent(context, UpdateService.class);
context.startService(myIntent);