एंड्रॉइड 10 में पृष्ठभूमि से एक गतिविधि कैसे शुरू करें?


12

मैं एक एंड्रॉइड ऐप बना रहा हूं जहां मुझे पृष्ठभूमि से एक गतिविधि शुरू करने की आवश्यकता है। मैं एक फोरग्राउंडस्टार का उपयोग कर रहा हूं जो इसे पूरा करने के लिए सेवा का विस्तार करता है। मेरे पास एक गतिविधि Adscreen.class है जिसे मुझे अपनी फ़ोरग्राउंड सेवा से चलाने की आवश्यकता है। गतिविधि Adscreen.class एंड्रॉइड 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);

    }
}

मैंने पढ़ा कि एंड्रॉइड 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);

एंड्रॉइड 10 पर पृष्ठभूमि से एक गतिविधि शुरू करने के लिए कोई भी वर्कअराउंड?


कोई उचित समाधान?
विशाल पटेल

कुछ पता करो?
वॉर्निएन

क्या आपको एक समाधान मिला?
हमजा एज़ेदिया

जवाबों:


4

यकीन नहीं है कि यह इस तरह से करना सही है, लेकिन मेरे पास पर्याप्त समय नहीं था (ऐप केवल कंपनी के आंतरिक उपयोग के लिए है)।

मैंने अनुमति का उपयोग किया:

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

और फिर हर उपयोगकर्ता को सेटिंग में जाना होगा -> ऐप की अनुमति और फिर फ़ंक्शन के लिए उन्नत सेटिंग्स में चेक बॉक्स "दूसरों के लिए ऐप दिखाएं"

मेरी अंग्रेजी के लिए क्षमा करें या बिल्कुल सही समाधान नहीं है, लेकिन यह मेरे लिए बहुत अच्छा है।

पिक्सेल 4 पर यह इस तरह दिख रहा होगा: यहां छवि विवरण दर्ज करें


3

जैसा कि आपने पृष्ठभूमि से गतिविधियों को शुरू करने पर प्रतिबंध का उल्लेख किया है

यह कहा गया है

एंड्रॉइड 10 (एपीआई स्तर 29) और जब एप्लिकेशन पृष्ठभूमि में चल रहा होता है, तो ऐप गतिविधियों को शुरू कर सकता है।

उन्होंने अपने नोट में यह भी उल्लेख किया है कि

नोट: गतिविधियों को शुरू करने के प्रयोजनों के लिए, अग्रभूमि सेवा चलाने वाले ऐप को अभी भी "पृष्ठभूमि में" माना जाता है

इसका मतलब है कि यदि आप एक गतिविधि शुरू करने के लिए अग्रभूमि सेवा का उपयोग कर रहे हैं, तो यह अभी भी समझता है कि ऐप पृष्ठभूमि में है और ऐप गतिविधि को लॉन्च नहीं करेगा।

समाधान: सबसे पहले, यदि आप एंड्रॉइड 10 (एपीआई स्तर 29) और उच्चतर से पृष्ठभूमि में चल रहे हैं तो आप ऐप शुरू नहीं कर सकते। उन्होंने इस व्यवहार को दूर करने के लिए एक नया तरीका प्रदान किया है जो यह है कि कॉलिंग ऐप के बजाय आप फ़ुल-स्क्रीन इरादे के साथ एक उच्च-प्राथमिकता वाली अधिसूचना दिखा सकते हैं ।

फुल-स्क्रीन इंटेंट ऐसे व्यवहार करता है जैसे कि आपकी डिवाइस स्क्रीन ऑफ़ है यह आपकी ऐप गतिविधि को लॉन्च करेगा जिसे आप चाहते थे। लेकिन अगर आपका ऐप बैकग्राउंड में है और स्क्रीन ऑन है तो यह सिर्फ एक नोटिफिकेशन दिखाएगा। अगर आप नोटिफिकेशन पर क्लिक करेंगे तो यह आपका ऐप खोल देगा।

हाई-प्रायोरिटी नोटिफिकेशन और फुल-स्क्रीन इंटेंट पर अधिक जानकारी के लिए आप इसे यहाँ देख सकते हैं समय-संवेदनशील सूचनाएँ प्रदर्शित करें


2

आपको अनुमति के नीचे AndroidManifest.xml शामिल करना चाहिए।

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

मैं भी इस मुद्दे का सामना कर रहा हूं, लेकिन यह समाधान मेरे लिए काम नहीं कर रहा है
रोहित शर्मा

@RohitSharma को इस समस्या का कोई समाधान अभी तक नहीं मिला है? या अभी भी किसी चमत्कार की प्रतीक्षा कर रहा है।
असदुल्लाह

इस मुद्दे का सामना करते हुए भी, मुझे उसके लिए कोई सही समाधान नहीं मिला।
रोहित शर्मा

क्या आपको एक समाधान मिला?
हमज़ा एज़्ज़ेदिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.