см. Я публикую вам пример, который поможет вам
Для некоторых приложений вам нужно будет запустить и запустить службу при запуске устройства без вмешательства пользователя. Такие приложения в основном включают мониторы (телефония, Bluetooth, сообщения, другие события).
По крайней мере, эта функция в настоящее время разрешена чрезмерно ограничительной политикой разрешений Android.
Шаг 1: Сначала вам нужно будет создать простой сервис, определенный в Monitor.java:
public class Monitor extends Service {
private static final String LOG_TAG = "::Monitor";
@Override
public void onCreate() {
super.onCreate();
Log.e(LOG_TAG, "Service created.");
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Log.e(LOG_TAG, "Service started.");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.e(LOG_TAG, "Service destroyed.");
}
@Override
public IBinder onBind(Intent intent) {
Log.e(LOG_TAG, "Service bind.");
return null;
}
}
Шаг 2: Далее нам нужно создать класс приемника Broadcast, StartAtBootServiceReceiver.java:
public class StartAtBootServiceReceiver extends BroadcastReceiver
{
private static final String LOG_TAG=StartAtBootServiceReceiver";
@Override
public void onReceive(Context context, Intent intent)
{
Log.e(LOG_TAG, "onReceive:");
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Intent i = new Intent();
i.setAction("test.package.Monitor");
context.startService(i);
}
}
}
Шаг 3: Наконец, ваш файл AndroidManifest.xml должен содержать следующее:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="test.package.Monitor"
android:versionName="1.0"
android:versionCode="100"
android:installLocation="internalOnly">
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="8"/>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<service android:name="test.package.Monitor">**
<intent-filter>
<action android:name="test.package.Monitor">
</action>
</intent-filter>
</service>
<receiver android:name="test.package.StartAtBootServiceReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED">
</action>
<category android:name="android.intent.category.HOME">
</category>
</intent-filter>
</receiver>
</application>
Мне нужно выделить некоторые наиболее важные аспекты, ключевые факторы возможных ошибок при реализации:
1) Необходимо предоставить разрешение android.permission.RECEIVE_BOOT_COMPLETED (в декларации xml)
2) Установка должна выполняться во внутреннем хранилище, а не на SDCARD! Чтобы применить это, используйте android: installLocation = "internalOnly" в манифесте