Android 10의 백그라운드에서 활동을 시작하는 방법은 무엇입니까?


12

백그라운드에서 활동을 시작 해야하는 Android 앱을 만들고 있습니다. 이를 위해 서비스를 확장하는 ForegroundStarter를 사용하고 있습니다. Foreground 서비스에서 실행해야하는 Adscreen.class 활동이 있습니다. 활동 Adscreen.class는 Android 10을 제외한 모든 Android 버전에서 제대로 작동합니다 (배경에서 시작).

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의 백그라운드에서 활동을 시작하는 데 약간의 제한이 있음을 읽었습니다.이 코드는 더 이상 작동하지 않는 것 같습니다. 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의 백그라운드에서 활동을 시작하는 해결 방법이 있습니까?


적절한 해결책이 있습니까?
Vishal Patel

무언가를 찾으십니까?
WorieN

해결책을 찾았습니까?
Hamza Ezzaydia

답변:


4

이 방법으로 할 수 있는지 확실하지 않지만 시간이 충분하지 않습니다 (앱은 회사 내부 전용입니다).

나는 권한을 사용했다 :

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

모든 사용자는 앱의 설정-> 권한으로 이동 한 다음 고급 설정의 '다른 사용자에게 앱 표시'기능 확인란을 선택해야합니다.

내 영어에 대한 미안하거나 정확한 해결책은 아니지만 효과적이었습니다.

Pixel 4에서는 다음과 같이 보입니다. 여기에 이미지 설명을 입력하십시오


3

배경에서 활동 시작에 대한 제한 사항 을 언급했듯이

그것은 언급된다

앱이 백그라운드에서 실행될 때 앱이 활동을 시작할 수있는시기에 대한 Android 10 (API 레벨 29) 및 상위 장소 제한.

그들은 또한 그들의 메모에서 언급했다.

참고 : 활동을 시작하기 위해 포 그라운드 서비스를 실행하는 앱은 여전히 ​​"백그라운드"로 간주됩니다

즉, 포 그라운드 서비스를 사용하여 활동을 시작하는 경우 여전히 앱이 백그라운드에 있고 앱 활동을 시작하지 않는다고 간주합니다.

해결 방법 : 첫째, Android 10 (API 레벨 29) 이상에서 백그라운드에서 실행중인 앱은 시작할 수 없습니다. 그들은이 동작을 극복하는 새로운 방법을 제공했습니다. 즉, 앱을 호출하는 대신 전체 화면 의도높은 우선 순위 알림 을 표시 할 수 있습니다 .

장치 화면이 꺼져있는 경우와 같이 전체 화면 의도가 작동합니다. 원하는 앱 활동이 시작됩니다. 그러나 앱이 백그라운드에 있고 화면이 켜져 있으면 알림 만 표시됩니다. 알림을 클릭하면 앱이 열립니다.

우선 순위가 높은 알림 및 전체 화면 의도에 대한 자세한 내용은 여기를 참조 하십시오. 시간에 민감한 알림 표시


2

아래 권한을 AndroidManifest.xml에 포함시켜야합니다.

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

나는 또한이 문제에 직면하고 있지만이 솔루션은 나를 위해 작동하지 않습니다
Rohit Sharma

@RohitSharma이 문제에 대한 해결책을 찾았습니까? 또는 여전히 기적을 기다리고 있습니다.
asadullah

여전히이 문제에 직면하여 완벽한 해결책을 얻지 못했습니다.
Rohit Sharma

해결책을 찾았습니까?
Hamza Ezzaydia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.