代码之家  ›  专栏  ›  技术社区  ›  crickpatel0024

为什么在BOOT_COMPLETED之后不启动服务?

  •  5
  • crickpatel0024  · 技术社区  · 9 年前

    我添加了我的后台服务,但我的手机关闭并打开,然后我的接收器类在get action android.intent.action.BOOT_COMPLETED中运行。但服务未启动。我下面的代码请帮助我!!!

    public class ReceiverCall extends BroadcastReceiver {
        static final String ACTION = "android.intent.action.BOOT_COMPLETED";
        static final String ACTION1 = "android.intent.action.QUICKBOOT_POWERON";
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.v("log_tag", "Action :: "+intent.getAction());
             if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
                    /* Setting the alarm here */
                    Intent alarmIntent = new Intent(context, MyAlarmService.class);
                    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);
                    AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
                    Calendar calendar = Calendar.getInstance();
                    calendar.setTimeInMillis(System.currentTimeMillis());
                    manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), + (1000 * 60 * 2), pendingIntent);
                    Log.v("log_tag", "REPEAT");
                }
        }
    

    我还在manifeast中添加了权限。

     <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="com.employeemanager.app.permission.C2D_MESSAGE" />
        <uses-permission android:name="android.permission.GET_ACCOUNTS" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.WAKE_LOCK" />
        <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.BROADCAST_STICKY" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <uses-permission android:name="android.permission.GET_TASKS" />
        <uses-permission android:name="android.permission.WAKE_LOCK" />
        <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    
        <application
            android:allowBackup="true"
            android:theme="@style/AppTheme" >
            <activity
                android:name="***8"
                android:label="@string/app_name"
                android:theme="@android:style/Theme.NoTitleBar" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <service
                android:name="***.MyAlarmService"
                android:enabled="true" >
            </service>
    
            <receiver android:name="***.ReceiverCall"
                android:enabled="true"  >
                <intent-filter>
                    <action android:name="***" />
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                    <action android:name="android.intent.action.QUICKBOOT_POWERON" />
                    <action android:name="android.intent.action.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE" />
                    <category android:name="android.intent.category.LAUNCHER" >
                    </category>
                </intent-filter>
            </receiver>
        </application>
    
    2 回复  |  直到 9 年前
        1
  •  3
  •   Skizo-ozᴉʞS ツ    9 年前

    也许你打错了,但如果你想做到这一点 Intent 您应该致电的工作:

    context.startService(alarmIntent);
    

    如果这个日志 Log.v("log_tag", "Action :: "+intent.getAction()); 在你的Logcat上显示了请这个 Log.v("log_tag", "REPEAT");

    我建议你 BroadcastReceiver 将是这样的:

    public class ReceiverCall extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.v("log_tag", "Action :: "+intent.getAction());
         if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
                //make an intent to your Service as follows 
                Intent serviceIntent = new Intent(context, MyAlarmService.class);
                context.startService(serviceIntent);
            }
    }
    

    然后在你的 Service 在您的 onCreate 您的 服务 添加以下内容:

    /* Setting the alarm here */
    Intent alarmIntent = new Intent(context, Whatever.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);
    AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), + (1000 * 60 * 2), pendingIntent);
    Log.v("log_tag", "REPEAT");
    

    我还建议您创建一个新的 广播接收机 在上面做你想重复的事情,并替换 whatever.class 由您的 BroadccastReceiver .

        2
  •  2
  •   Helmi    9 年前

    您的应用程序可能安装在外部存储上,它无法接收启动完成事件。您应该添加 android:installLocation="internalOnly" 在你的舱单上。