启动在设备启动时启动活动的服务

时间:2013-09-24 13:02:16

标签: android startup boot

我试图在设备启动时启动应用程序。

我的代码如下

1-首先是包含后台线程(asynctask)的主类,它将数据发送到mysql数据库。

2-服务类

package com.seven.ex.helper;

import com.seven.ex.AndroidGPSTrackingActivity;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

public class service extends Service {
private static final String TAG = "MyService";
@Override
public IBinder onBind(Intent intent) {
    return null;
}
public void onDestroy() {
    Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
    Log.d(TAG, "onDestroy");
}

@Override
public void onStart(Intent intent, int startid)
{
    Intent intents = new Intent(getBaseContext(),AndroidGPSTrackingActivity.class);
    intents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intents);
    Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
    Log.d(TAG, "onStart");
}
}    

3- BootUpReceiver类

package com.seven.ex.helper;

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

public class BootUpReceiver extends BroadcastReceiver{

@Override
public void onReceive(Context arg0, Intent arg1) {
    Intent intent = new Intent(arg0,service.class);
    arg0.startService(intent);
    Log.i("Autostart", "started");
}

}

4- android清单文件

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

<uses-sdk android:minSdkVersion="8" />

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
<uses-permission android:name="android.permission.INTERNET" />

  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />




   <application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name="com.seven.gpstracking.AndroidGPSTrackingActivity"
        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:name=".service" 
              android:label="@string/app_name"
              >
    </service>

    <receiver android:enabled="true" android:name=".BootUpReceiver">

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

    </application>


   </manifest>

在尝试启动之前,主要方法正常工作。 此外,应用程序仍然工作后我忽略启动时的Android错误(应用程序已关闭)

在log cat中找到一个未找到类的异常

你可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您的服务目前无法正常运作。您必须将东西从onStart()移动到onStartCommand(),然后返回服务是否粘滞。问题是onStart() - 方法很可能根本没有被调用(因为它现在已被删除)。

@Override
public int onStartCommand(final Intent intent, final int flags, final int startId) {

        //do your stuff here

    return Service.START_NOT_STICKY;
}

答案 1 :(得分:0)

在您的清单中,您已分配包:com.example.gpstracking。当你然后定义.BootUpReceiver。系统应该期望在com.example.gpstracking.BootUpReceiver中找到该类。

请尝试将包.BootUpReceiver更改为完整路径com.seven.ex.helper.BootUpReceiver。 AndroidGPSTrackingActivity也是如此,因为据我所知,这应该是com.seven.ex.AndroidGPSTrackingActivity。