Rumah  >  Artikel  >  Bagaimana untuk melancarkan apl Android secara automatik apabila menghidupkan TV?

Bagaimana untuk melancarkan apl Android secara automatik apabila menghidupkan TV?

王林
王林ke hadapan
2024-02-22 13:04:14406semak imbas

Editor PHP Xinyi membawakan anda Soal Jawab java tentang pelancaran aplikasi Android secara automatik apabila menghidupkan TV. Dalam pembangunan sebenar, kadangkala perlu untuk melaksanakan fungsi sedemikian Artikel ini akan berkongsi penyelesaian untuk membantu anda merealisasikan keperluan ini dengan mudah. Dengan perkembangan teknologi yang berterusan, pembangun perlu sentiasa mempelajari pengetahuan baharu dan meningkatkan tahap teknikal mereka. Mari lihat cara melaksanakan ciri ini!

Kandungan soalan

Saya menambahkan kebenaran ini pada manifes

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

Saya menambah bootreceiver ke senarai:

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

Saya mencipta bootreceiver dalam projek saya:

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

Soalan saya ialah, jika anda boleh membantu saya, bagaimana saya boleh mengujinya menggunakan emulator dalam studio android?

Saya meletakkan titik putus dalam kaedah onreceive tetapi apabila saya melancarkan aplikasi ia tidak mengenainya Saya juga telah mencuba menggunakan mula semula sejuk tetapi tiada apa yang berjaya dan saya ingin menguji sama ada ia benar-benar berfungsi atau mungkin ada yang salah dengan kod saya?

Penyelesaian

Langkah 1: Kod Manifes

Tambah kebenaran

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

Di dalam kelas permohonan

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

Langkah 2: Dapatkan kebenaran tindanan yang diberikan oleh pengguna atau

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

Langkah 3: penerima but

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

Langkah 4: Kod Perkhidmatan

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

}

Dalam kes saya, kelas penerima but menerima operasi penyiapan but. Jadi, bekerja untuk saya! Pastikan tindakan penyiapan but berfungsi pada peranti tertentu.

Atas ialah kandungan terperinci Bagaimana untuk melancarkan apl Android secara automatik apabila menghidupkan TV?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Dapatkan fail json dalam bukkitArtikel seterusnya:Dapatkan fail json dalam bukkit