前台服务不会在启动时启动

时间:2012-10-19 15:37:04

标签: android service

我正在尝试在启动时启动前台服务,但它永远不会启动,但是如果我尝试启动正常的后台服务。它开始很好。

请告诉我我的代码有什么问题?

我的代码是: 清单文件:

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <receiver android:name="com.test.andsrvfg.AndSrvFgService">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
    <service android:name="AndSrvFgService">
        <intent-filter>
            <action android:name="com.test.andsrvfg.AndSrvFgService"></action>
        </intent-filter>
    </service>
</application>

BroadcastReceiver处理ACTION_BOOT_COMPLETED:

public class AndSrvFgStarter extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) 
    {
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            Intent i = new Intent();
            i.setAction("com.test.andsrvfg.AndSrvFgService");
            context.startService(i);
        }
    }
}

实际服务如下:

public class AndSrvFgService extends Service {

    private boolean bForeground = false;
    public AndSrvFgService() {
    }

    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if(!bForeground) {
            bForeground = true;
            Notification note = new Notification( 0, null, System.currentTimeMillis() );
            note.flags |= Notification.FLAG_NO_CLEAR;
            startForeground( 1242, note );      
                }


        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        if(bForeground) {
            stopForeground(true);
        }
    }

1 个答案:

答案 0 :(得分:4)

此代码适用于我:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.dfsdf"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

        <activity android:name="com.google.ads.AdActivity"
              android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>

        <service android:name=".MyService"/>

        <receiver android:enabled="true" 
            android:name=".BootUpReceiver"
            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>

    </application>

</manifest>
  • 把它放在接收器中:

    机器人:权限= “android.permission.RECEIVE_BOOT_COMPLETED”

  • 将enable设置为true:

    android:enabled =“true”