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