Heim  >  Artikel  >  Wie starte ich automatisch eine Android-App, wenn ich den Fernseher einschalte?

Wie starte ich automatisch eine Android-App, wenn ich den Fernseher einschalte?

王林
王林nach vorne
2024-02-22 13:04:14455Durchsuche

Der PHP-Editor Xinyi bietet Ihnen Java-Fragen und Antworten zum automatischen Starten von Android-Anwendungen beim Einschalten des Fernsehers. In der tatsächlichen Entwicklung ist es manchmal erforderlich, eine solche Funktion zu implementieren. In diesem Artikel finden Sie eine Lösung, mit der Sie diese Anforderung problemlos realisieren können. Aufgrund der kontinuierlichen Weiterentwicklung der Technologie müssen Entwickler ständig neues Wissen erlernen und ihr technisches Niveau verbessern. Werfen wir einen Blick darauf, wie diese Funktion implementiert wird!

Frageninhalt

Ich habe diese Berechtigungen zum Manifest hinzugefügt

<uses-permission android:name="android.permission.receive_boot_completed" />

Ich habe bootreceiver zur Liste hinzugefügt:

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

Ich habe bootreceiver in meinem Projekt erstellt:

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

Meine Frage ist, wenn Sie mir helfen können, wie kann ich es mit dem Emulator in Android Studio testen?

Ich habe einen Haltepunkt in die Onreceive-Methode eingefügt, aber wenn ich die App starte, wird sie nicht erreicht Ich habe es auch mit einem Kaltstart versucht, aber nichts hat funktioniert und ich wollte testen, ob es tatsächlich funktioniert, oder stimmt vielleicht etwas mit meinem Code nicht?

Lösung

Schritt 1: Code manifestieren

Berechtigungen hinzufügen

<uses-permission android:name="android.permission.system_alert_window" />
<uses-permission android:name="android.permission.foreground_service" />

Insider-Anwendungskurs

<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" />

Schritt 2: Erhalten Sie die vom Benutzer erteilte Overlay-Berechtigung oder

adb shell pm grant com.example.appstart android.permission.system_alert_window

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

Schritt 4: Servicecode

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

}

In meinem Fall empfängt die Bootreceiver-Klasse die Boot-Abschlussoperationen. Also, arbeite für mich! Stellen Sie sicher, dass die Boot-Abschlussaktion auf einem bestimmten Gerät funktioniert.

Das obige ist der detaillierte Inhalt vonWie starte ich automatisch eine Android-App, wenn ich den Fernseher einschalte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen