Maison > Java > Comment lancer automatiquement une application Android lors de l'allumage du téléviseur ?

Comment lancer automatiquement une application Android lors de l'allumage du téléviseur ?

王林
Libérer: 2024-02-22 13:04:14
avant
475 Les gens l'ont consulté

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é !

Contenu de la question

J'ai ajouté ces autorisations au manifeste

<uses-permission android:name="android.permission.receive_boot_completed" />
Copier après la connexion

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>
Copier après la connexion

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);
        }
    }
}
Copier après la connexion

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 ?

Solution

Étape 1 : Code manifeste

Ajouter des autorisations

<uses-permission android:name="android.permission.system_alert_window" />
<uses-permission android:name="android.permission.foreground_service" />
Copier après la connexion

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" />
Copier après la connexion

É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
Copier après la connexion

É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"
    }
}
Copier après la connexion

É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"
    }

}
Copier après la connexion

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!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal