如何在重新启动后通过服务启动活动

时间:2012-10-14 15:20:32

标签: android service android-activity

我需要我的应用程序在重启设备后开始运行(在后台)。这是我到现在为止所得到的(在从这里获得了很多帮助后......)

这是我的BootUpReceiver使用broadcastreceiver:

public class BootUpReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent serviceIntent = new Intent(context, RebootService.class);
        serviceIntent.putExtra("caller", "RebootReceiver");
        context.startService(serviceIntent);
    }
}

这是服务类:

public class RebootService extends IntentService{

    public RebootService(String name) {
        super(name);
        // TODO Auto-generated constructor stub
}

protected void onHandleIntent(Intent intent) {

        Intent i = new Intent(getBaseContext(), MainActivity.class);  
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        String intentType = intent.getExtras().getString("caller");
        if(intentType == null) 
            return;
        if(intentType.equals("RebootReceiver")) 
            getApplication().startActivity(i);            
    }
}

这是我的机器人清单:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <receiver
        android:name=".BootUpReceiver"
        android:enabled="true"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>

    <service android:name=".RebootService"/>
</application>

问题是,当我在手机上安装并重新启动时,应用程序崩溃:它说:“转移已停止工作”。按下确定按钮后,当我检查应用信息时,应用程序正在运行。

我是Android的新手,我不知道发生了什么。我应该添加更多权限吗?

请帮助。 TIA

1 个答案:

答案 0 :(得分:0)

我认为你的问题在于你的RebootService构造函数。当系统调用它时,它不提供任何参数,因此它会崩溃。如果您查看日志,您可能会看到“无法实例化服务......”的效果。

尝试用以下代码替换构造函数:

public RebootService() {
    super( "Reboot Service" );
}