3

起動時にフォアグラウンド サービスを開始しようとしていますが、通常のバックグラウンド サービスを開始しようとすると開始されません。それは完全にうまく始まります。

私のコードの何が問題なのか教えてください。

私のコードは: マニフェスト ファイル:

<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>

ACTION_BOOT_COMPLETED を処理する BroadcastReceiver:

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);
        }
    }
4

1 に答える 1

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="android.permission.RECEIVE_BOOT_COMPLETED"

  • enable を true に設定します。

    アンドロイド: 有効にされた ="true"

于 2012-10-19T15:58:57.093 に答える