از اندروید 3.1 تمام برنامه هایی که حداقل یک بار اجرا نشده اند، intent ها را دریافت نمی کنند و BroadcastReceiver های آنها exclude می شود. پس شما حداقل نیاز به یک activity دارید که باهاش حداقل یکبار برنامه رو اجرا کنید. پس از بار اول می توانید BroadcastReceiver خود را برای دریافت intent مربوط به کامل شدن boot سیستم تنظیم کنید که در صورت reset شدن موبایل سرویس شما مجددا اجرا شود:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.javabyab.broadcastreceiver"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<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>
<service
android:name=".MyService"
android:enabled="true"
android:exported="true" >
</service>
</application>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
</manifest>
BroadcastReceiver شما هم چیزی شبیه این می شود:
public class MyReceiver extends BroadcastReceiver {
public MyReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
Log.i("test-saeed","------------receive boot");
// use this to start and trigger a service
Intent i= new Intent(context, MyService.class);
// potentially add data to the intent
context.startService(i);
}
}