Android 10'da Arka Plandan Bir Etkinlik Nasıl Başlatılır?


12

Arka plandan bir etkinlik başlatmam gereken bir android uygulaması geliştiriyorum. Bunu gerçekleştirmek için hizmet genişleten bir ForegroundStarter kullanıyorum. Ön plan hizmetimden çalıştırmam gereken bir Adscreen.class etkinliğim var. Adscreen.class etkinliği, Android 10 dışındaki tüm Android sürümlerinde iyi çalışır (arka plandan başlar).

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

    }
}

Android 10'da arka plandan etkinlikler başlatma konusunda bazı kısıtlamalar olduğunu okudum. Bu kod artık çalışmıyor gibi görünüyor. 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);

Android 10'da arka plandan bir etkinlik başlatmak için herhangi bir geçici çözüm var mı?


Uygun bir çözüm var mı?
Vishal Patel

Bir şey mi buldun?
WorieN

bir çözüm buldun mu?
Hamza Ezzaydia

Yanıtlar:


4

Bu şekilde yapmanın doğru olup olmadığından emin değilim, ancak yeterli zamanım olmadı (uygulama yalnızca şirket içi kullanım içindir).

İzinleri kullandım:

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

ve sonra her kullanıcının "- uygulamanın diğerlerine göre göster" işlevi için gelişmiş ayarlardaki uygulamanın -> izinlerine ve onay kutusuna gitmesi gerekir.

İngilizcem için üzgünüm ya da tam olarak doğru çözüm değil, ama işe yaradı, benim için çok iyi bir düzeltme.

Pixel 4'te şöyle görünecek: resim açıklamasını buraya girin


3

Bahsettiğiniz gibi Faaliyetleri arka plandan başlatmaya ilişkin kısıtlamalar

Belirtildi ki

Android 10 (API düzey 29) ve uygulamaların arka planda çalışırken uygulamaların ne zaman faaliyete başlayabileceği konusunda daha yüksek yer kısıtlamaları.

Ayrıca notlarında da bahsetmişlerdir.

Not: Etkinlik başlatma amacıyla, ön plan hizmeti çalıştıran bir uygulamanın "arka planda" olduğu kabul edilir

Bu, bir Etkinliği başlatmak için bir ön plan hizmeti kullanıyorsanız, Uygulamanın hala arka planda olduğunu ve bir uygulama Etkinliği başlatmayacağını düşündüğü anlamına gelir.

Çözüm: Öncelikle, Android 10'dan (API düzey 29) ve daha yüksek bir sürümden arka planda çalışıyorsa uygulamayı başlatamazsınız. Bunlar yerine uygulamayı çağıran bir gösterebilir ki bu davranışı aşmak için yeni bir yol sağladı yüksek öncelikli bildirimi bir ile tam ekran niyet .

Tam Ekran Hedefi, cihazınızın ekranının Kapalı olup olmadığı gibi davranır. İstediğiniz uygulama Etkinliğini başlatır. ancak uygulamanız arka planda ve ekran açıksa yalnızca bir bildirim gösterir. Bildirimi tıklarsanız, uygulamanız açılır.

Yüksek Öncelikli Bildirim ve Tam Ekran Amacı hakkında daha fazla bilgi için buradan kontrol edebilirsiniz. Zamana duyarlı bildirimleri görüntüle


2

İznin altında AndroidManifest.xml dosyasına eklemelisiniz.

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

ben de bu sorunla karşı karşıyayım ama bu çözüm benim için çalışmıyor
Rohit Sharma

@RohitSharma bu soruna henüz bir çözüm bulamadı mı? veya hala herhangi bir mucize bekliyorum.
asadullah

Hala bu sorunla karşı karşıya, bunun için mükemmel bir çözüm alamadım.
Rohit Sharma

bir çözüm buldun mu?
Hamza Ezzaydia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.