Bagaimana Cara Memulai Aktivitas Dari Latar Belakang di Android 10?

12

Saya sedang membangun aplikasi android di mana saya harus memulai kegiatan dari latar belakang. Saya menggunakan ForegroundStarter yang memperluas Layanan untuk mencapai ini. Saya memiliki Adscreen.class aktivitas yang harus saya jalankan dari layanan Foreground saya. Aktivitas Adscreen.class berfungsi dengan baik (dimulai dari latar belakang) di semua versi Android kecuali Android 10.

ForeGroundStarter.class

public class ForeGroundStarter extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }



    @Override
    public void onCreate() {
        super.onCreate();
        Log.d("sK", "Inside Foreground");

    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d("sK", "Inside Foreground onStartCommand");
        Intent notificationIntent = new Intent(this, Adscreen.class);
        PendingIntent pendingIntent =
                PendingIntent.getActivity(this, 0, notificationIntent, 0);


        Notification notification =
                null;

        //Launching Foreground Services From API 26+

        notificationIntent = new Intent(this, Adscreen.class);
        pendingIntent =
                PendingIntent.getActivity(this, 0, notificationIntent, 0);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            String NOTIFICATION_CHANNEL_ID = "com.currency.usdtoinr";
            String channelName = "My Background Service";
            NotificationChannel chan = null;
            chan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, channelName, NotificationManager.IMPORTANCE_NONE);
            chan.setLightColor(Color.BLUE);
            chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
            NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            assert manager != null;
            manager.createNotificationChannel(chan);

            NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
            notification = notificationBuilder.setOngoing(true)
                    .setSmallIcon(R.drawable.nicon)
                    .setContentTitle("")
                    .setPriority(NotificationManager.IMPORTANCE_MIN)
                    .setCategory(Notification.CATEGORY_SERVICE)
                    .build();
            startForeground(2, notification);


            Intent dialogIntent = new Intent(this, Adscreen.class);
            dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(dialogIntent);
            Log.d("sk", "After startforeground executed");

        }



        else //API 26 and lower
            {
                notificationIntent = new Intent(this, Adscreen.class);
                pendingIntent =
                        PendingIntent.getActivity(this, 0, notificationIntent, 0);

                notification =
                        new Notification.Builder(this)
                                .setContentTitle("")
                                .setContentText("")
                                .setSmallIcon(R.drawable.nicon)
                                .setContentIntent(pendingIntent)
                                .setTicker("")
                                .build();

                startForeground(2, notification);
                Intent dialogIntent = new Intent(this, Adscreen.class);
                dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(dialogIntent);
            }




        return super.onStartCommand(intent, flags, startId);

    }
}

Saya membaca bahwa ada beberapa batasan untuk memulai aktivitas dari latar belakang Android 10. Kode ini sepertinya tidak berfungsi lagi. https://developer.android.com/guide/components/activities/background-starts

Intent dialogIntent = new Intent(this, Adscreen.class);
            dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(dialogIntent);

Adakah solusi untuk memulai aktivitas dari latar belakang di Android 10?

SK707
sumber
Ada solusi yang tepat?
Vishal Patel
Temukan sesuatu?
WorieN
Apakah Anda menemukan solusinya?
Hamza Ezzaydia

Jawaban:

4

Tidak yakin apakah benar melakukannya dengan cara ini, tapi saya tidak punya cukup waktu (aplikasi hanya untuk penggunaan internal perusahaan).

Saya menggunakan izin:

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

dan kemudian setiap pengguna harus pergi ke pengaturan -> izin aplikasi dan kemudian centang kotak di pengaturan lanjutan untuk fungsi "tampilkan aplikasi lebih dari yang lain"

Maaf untuk bahasa Inggris saya atau bukan solusi yang tepat, tetapi berhasil, perbaikan terbaru yang bagus untuk saya.

Pada Pixel 4 akan terlihat seperti ini: masukkan deskripsi gambar di sini

kamest
sumber
3

Seperti yang Anda sebutkan Pembatasan memulai aktivitas dari latar belakang

Dinyatakan bahwa

Android 10 (API level 29) dan pembatasan tempat yang lebih tinggi tentang kapan aplikasi dapat memulai aktivitas saat aplikasi berjalan di latar belakang.

Mereka juga menyebutkan dalam catatan mereka itu.

Catatan: Untuk tujuan memulai kegiatan, aplikasi yang menjalankan layanan latar depan masih dianggap "di latar belakang"

Ini berarti jika Anda menggunakan layanan latar depan untuk memulai suatu Kegiatan, ia masih menganggap bahwa Aplikasi itu ada di latar belakang dan tidak akan meluncurkan Aktivitas aplikasi.

Solusi: Pertama, Anda tidak dapat memulai aplikasi jika berjalan di latar belakang dari Android 10 (API level 29) dan lebih tinggi. Mereka telah menyediakan cara baru untuk mengatasi perilaku ini yaitu bahwa alih-alih memanggil aplikasi, Anda dapat menampilkan pemberitahuan prioritas tinggi dengan maksud layar penuh .

Niat Layar Penuh berperilaku seperti jika layar perangkat Anda Tidak Aktif. Ini akan meluncurkan Aktivitas aplikasi Anda yang Anda inginkan. tetapi jika aplikasi Anda di latar belakang dan layar menyala maka itu hanya akan menampilkan pemberitahuan. Jika Anda mengklik notifikasi maka itu akan membuka aplikasi Anda.

Untuk informasi lebih lanjut tentang Pemberitahuan Prioritas Tinggi dan Niat Layar Penuh, Anda dapat memeriksanya di sini. Tampilkan pemberitahuan sensitif waktu

Muhammad Farhan
sumber
2

Anda harus memasukkan ke AndroidManifest.xml di bawah izin.

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
mimu120
sumber
saya juga menghadapi masalah ini tetapi solusi ini tidak bekerja untuk saya
Rohit Sharma
@RohitSharma belum menemukan solusi untuk masalah ini? atau masih menunggu keajaiban.
asadullah
Masih menghadapi masalah ini, saya tidak mendapatkan solusi yang sempurna untuk itu.
Rohit Sharma
Apakah Anda menemukan solusinya?
Hamza Ezzaydia