Автозапуск андроид сервис - PullRequest
3 голосов
/ 08 сентября 2011

Как автоматически запустить сервис в Android 3.x, тестовая табличка Samsung Galaxy 10.1. Мой код работает на табличке noname с Android 2.2.1. Код не работает ни в эмуляторе Android с Android версии 3.x

Код:

StartAtBootService.java пакет test.autostart;

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

public class StartAtBootService extends Service 
{
        public IBinder onBind(Intent intent)
        {
            return null;
        }

        @Override
        public void onCreate() 
        {
            Log.v("StartServiceAtBoot", "onCreate");
        }

        @Override
        public int onStartCommand(Intent intent, int flags, int startId) 
        {
            Log.v("StartServiceAtBoot", "onStartCommand()");          
            return START_STICKY;
        }

        @Override
        public void onDestroy() 
        {
            Log.v("StartServiceAtBoot", "onDestroy");
        }
}

StartAtBootServiceReciver.java пакет test.autostart;

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

public class StartAtBootServiceReceiver extends BroadcastReceiver 
{
    @Override
    public void onReceive(Context context, Intent intent) 
    {
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            Intent i = new Intent();
            i.setAction("test.autostart.StartAtBootService");
            context.startService(i);
        }
    }
}

Manifest

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <service android:name="StartAtBootService">
            <intent-filter>
                <action android:name="test.autostart.StartAtBootService">
                </action>
            </intent-filter>
        </service>
        <receiver android:name="StartAtBootServiceReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED">
                </action>
                <category android:name="android.intent.category.HOME">
                </category>
            </intent-filter>
        </receiver>
    </application>
</manifest>

Ответы [ 2 ]

5 голосов
/ 14 сентября 2011

Это была проблема с SD-картой, Eclipse устанавливал новые приложения на SD-карту по умолчанию на моем Samsung Galaxy 10.1. Чтобы решить эту проблему, мне нужно было добавить android: installLocation = "internalOnly" в манифесте.

Новый Манифест:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="test.autostart"
      android:versionCode="1"
      android:versionName="1.0" android:installLocation="internalOnly">
    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <service android:name="StartAtBootService">
            <intent-filter>
                <action android:name="test.autostart.StartAtBootService">
                </action>
            </intent-filter>
        </service>
        <receiver android:name="StartAtBootServiceReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED">
                </action>
                <category android:name="android.intent.category.HOME">
                </category>
            </intent-filter>
        </receiver>
    </application>
</manifest>

Надеюсь, это поможет кому-то в будущем.

0 голосов
/ 08 сентября 2011

Убедитесь, что ваше приложение не на SD.Если ваше приложение должно запускаться во время загрузки, не размещайте его на SD

...