1

起動時にサービスを開始したい。ブロードキャストレシーバーを作成し、ブロードキャストレシーバーからサービスを開始し、すべてxmlに挿入しました。のチュートリアルhttp://www.androidcompetencycenter.com/2009/06/start-service-at-boot/は私を大いに助けてくれました。結果: エミュレーターでは、実際のデバイスと同様に、次のように発生します: - サービスが開始され、すぐに停止します! なぜサービスが停止するのかわかりません!

サービスは確実に開始されています。ログとトーストメッセージを読むことができます。サービスが開始されたことを証明するもの。

ログにも次のようなメッセージが表示されます。

<u>
05-17 23:18:44.379: D/EAS SyncManager(247): !!! EAS SyncManager, onCreate
05-17 23:18:44.789: D/EAS SyncManager(247): !!! EAS SyncManager, onStartCommand
05-17 23:18:44.860: D/EAS SyncManager(247): !!! EAS SyncManager, stopping self
05-17 23:18:44.999: D/My Service(258): starting broadcast receiver
05-17 23:18:45.119: D/My Service(258): starting service in onCreate
05-17 23:18:45.985: D/Eas Debug(247): Logging: 
05-17 23:18:45.999: D/EAS SyncManager(247): !!! EAS SyncManager, onDestroy
05-17 23:18:46.299: I//system/bin/fsck_msdos(29): Attempting to allocate 998 KB for FAT
</u>

EAS SyncManager が破棄されます。これが私のサービスが強制的に停止された原因だと思います。http://hi-android.info/src/com/android/exchange/SyncManager.java.htmlから読んだことから、EAS SyncManager が破棄されると、起動時に開始されたサービスが StopSelf() を受け取ることがわかりますデフォルトで。

これが本当かどうかはわかりません。それが本当なら...どうすれば修正できますか?今まで誰かがこれに戸惑いましたか?助けてください。

コードは次のとおりです。

のクラス

// サービス クラス

public class Contacts_Service extends Service{

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();   
        Log.d("My Service", "onCreate");

        mPeriodicEventHandler = new Handler();      
                mPeriodicEventHandler.postDelayed(doPeriodicTask,13000);
    }



     private Runnable doPeriodicTask = new Runnable()
        {
            public void run() 
            {

                //your action here
                Log.d("My Service", "eeeevery 13000 ms");



                mPeriodicEventHandler.postDelayed(doPeriodicTask, 13000);
            }
        };

}

// BroadcastReceiver クラスは、起動時にサービスを開始します

public class MyStartupIntentReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {

         if("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())){

         Log.d("My Service", "starting broadcast receiver");
            Intent serviceIntent = new Intent();
            serviceIntent.setAction("com.Srv.mail.Contacts_Service");
            context.startService(serviceIntent);

            //serviceIntent.setAction("com.Srv.mail.SrvMailSettingsActivity");
            //context.startActivity(serviceIntent);

    }

    }

}

また、AndroidManifest.xml

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

    <uses-sdk android:minSdkVersion="7" />
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.INTERNET" />   
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />



<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >


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


        <service android:enabled="true" android:name="Contacts_Service">
                <intent-filter>
                 <action android:name="com.Srv.mail.Contacts_Service" />
            </intent-filter>
            </service>  






        <activity
            android:name="com.Srv.mail.SrvMailSettingsActivity"
            android:label="@string/app_name" >
            <!-->intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

            </intent-filter-->

        </activity>

    </application>

</manifest>
4

1 に答える 1

0

よくわかりませんこれも試してみてください..うまくいくかもしれません

if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
// Your code
}
于 2012-05-19T11:33:48.637 に答える