Why does the service not start after BOOT_COMPLETED?

I add that my background service works fine, but my phone shuts off and on, and then my reciver class in action. android.intent.action.BOOT_COMPLETED.but does not work, and does not run the .my code below, please help me.

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

And I also add permission to 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> 
+5
source share
2 answers

You may be mistaken, but if you want to make this Intent work, you should call:

 context.startService(alarmIntent); 

And let me know if this log is Log.v("log_tag", "Action :: "+intent.getAction()); on your Logcat, please, another Log.v("log_tag", "REPEAT"); .

I would suggest that your BroadcastReceiver would be like this:

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

Then on your Service in onCreate your Service add this:

 /* 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"); 

I would also suggest creating a new BroadcastReceiver and on it do your things that you want to repeat, and replace whatever.class with BroadccastReceiver .

+3
source

The likelihood that your application is installed on external storage cannot receive an event that completed loading. You must add android:installLocation="internalOnly" to the manifest.

+2
source

Source: https://habr.com/ru/post/1239573/


All Articles