L'éditeur PHP Xinyi vous propose une séance de questions-réponses Java sur le lancement automatique des applications Android lors de l'allumage du téléviseur. Dans le développement réel, il est parfois nécessaire d'implémenter une telle fonction. Cet article partagera une solution pour vous aider à réaliser facilement cette exigence. Avec le développement continu de la technologie, les développeurs doivent constamment acquérir de nouvelles connaissances et améliorer leur niveau technique. Voyons comment implémenter cette fonctionnalité !
J'ai ajouté ces autorisations au manifeste
<uses-permission android:name="android.permission.receive_boot_completed" />
J'ai ajouté bootreceiver à la liste :
<receiver android:name="com.portlmedia.streets.bootreceiver" android:enabled="true" android:exported="true"> <intent-filter android:directbootaware="true"> <action android:name="android.intent.action.boot_completed" /> <action android:name="android.intent.action.locked_boot_completed" /> <action android:name="android.intent.action.quickboot_poweron" /> <action android:name="android.intent.action.reboot"/> </intent-filter> </receiver>
J'ai créé bootreceiver dans mon projet :
public class BootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { Intent activityIntent = new Intent(context, MainActivity.class); context.startActivity(activityIntent); } } }
Ma question est la suivante : si vous pouvez m'aider, comment puis-je le tester à l'aide de l'émulateur d'Android Studio ?
J'ai mis un point d'arrêt dans la méthode onreceive mais lorsque je lance l'application, elle ne l'atteint pas J'ai également essayé d'utiliser un redémarrage à froid mais rien n'a fonctionné et je voulais tester si cela fonctionne réellement ou peut-être qu'il y a un problème avec mon code ?
Étape 1 : Code manifeste
Ajouter des autorisations
<uses-permission android:name="android.permission.system_alert_window" /> <uses-permission android:name="android.permission.foreground_service" />
Dans la classe d'application
<receiver android:name=".bootreceiver" 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" /> <action android:name="com.htc.intent.action.quickboot_poweron" /> </intent-filter> </receiver> <service android:name=".appstartservice" android:enabled="true" android:exported="true" android:stopwithtask="false" />
Étape 2 : Obtenez l'autorisation de superposition accordée par l'utilisateur ou
adb shell pm grant com.example.appstart android.permission.system_alert_window
Étape 3 : bootreceiver
class bootreceiver : broadcastreceiver() { override fun onreceive(context: context, intent: intent?) { log.i(tag, "onreceive: boot received ${intent?.action}") val serviceintent = intent(context, appstartservice::class.java) contextcompat.startforegroundservice(context, serviceintent) } companion object { private const val tag = "bootreceiver" } }
Étape 4 : Code de service
class AppStartService: Service() { override fun onBind(intent: Intent?): IBinder? { return null } override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { return START_STICKY } override fun onCreate() { super.onCreate() startForeground(1, createNotification()) GlobalScope.launch { withContext(Dispatchers.Main) { try { val intent = Intent(this@AppStartService, MainActivity::class.java) intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK startActivity(intent) } catch (ex: Exception) { Log.e(TAG, "onCreate: ", ex) } } } } private fun createNotification(): Notification { val serviceChannel = NotificationChannel( CHANNEL_ID, "${getString(R.string.app_name)} Service", NotificationManager.IMPORTANCE_DEFAULT ) val manager = getSystemService( NotificationManager::class.java ) manager.createNotificationChannel(serviceChannel) return NotificationCompat.Builder(this, CHANNEL_ID) .setContentTitle("${getString(R.string.app_name)} Service") .setSilent(true) .setContentText("Please restart this device if this service is not running") .setSmallIcon(R.mipmap.ic_launcher) .build() } companion object { private const val TAG = "AppStartService" private const val CHANNEL_ID = "app-start-service" } }
Dans mon cas, la classe bootreceiver reçoit les opérations de fin de démarrage. Alors, travaille pour moi ! Assurez-vous que l'action de fin de démarrage fonctionne sur un périphérique spécifique.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!