Estoy trabajando en una aplicación En esto, tengo que enviar el estado actual de los dispositivos Android en 30-30 segundos a través de mi aplicación, lo cual hice. Pero el problema al que me enfrento es que la aplicación no se inicia después de completar el arranque. Este problema está relacionado con algunos dispositivos Android.
MI código es:
public class BootCompletedReceiver extends BroadcastReceiver { private static final String TAG = "BootCompletedReceiver"; @Override public void onReceive(Context context, Intent intent) { Log.d(TAG,"action : "+intent.getAction()); if (Objects.requireNonNull(intent.getAction()).equals(Intent.ACTION_BOOT_COMPLETED)){ Log.d(TAG,"receive boot completes : "+intent.getAction()); @SuppressLint("StaticFieldLeak") AsyncTask task = new AsyncTask() { @Override protected Object doInBackground(Object[] objects) { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } return null; } @RequiresApi(api = Build.VERSION_CODES.O) @Override protected void onPostExecute(Object o) { super.onPostExecute(o); context.startForegroundService(new Intent(context, StatUpdateService.class)); } }; task.execute(); } } }Archivo de manifiestos:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <......./> <receiver android:name=".receiver.BootCompletedReceiver" android:enabled="true" android:exported="true"> <intent-filter> <category android:name="android.intent.category.DEFAULT" /> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.QUICKBOOT_POWERON" /> </intent-filter> </receiver>elemento de la lista
En algunos de los dispositivos Android, este código funciona y Mi aplicación se inicia después de completar el arranque, pero en algunos de los dispositivos Android, no funciona.
Android no inicia automáticamente ninguna aplicación hasta que la inicie manualmente al menos una vez. Después de eso, las aplicaciones se iniciarán automáticamente en cada inicio de Android.
Agregue el permiso android.permission.RECEIVE_BOOT_COMPLETED en su manifiesto.
Cuando Android termina de iniciarse y está listo para iniciar la actividad de inicio, se envía el evento de inicio y las aplicaciones calificadas se identifican como candidatas de inicio. El sistema envía los intentos android.intent.category.HOME y android.intent.category.DEFAULT cuando finaliza la inicialización.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.test.app"> <!-- add this --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <application android:theme="@style/app_theme_red"> <!-- main --> <activity android:name=".ui.activity.MainActivity" android:exported="true"> <!-- main filter --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <!-- add this --> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <!-- boot receiver --> <receiver android:name=".BootReceiver" android:exported="false"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> </application> </manifest>