অ্যান্ড্রয়েড 10 এ ব্যাকগ্রাউন্ড থেকে কীভাবে কোনও কার্যকলাপ শুরু করবেন?


12

আমি একটি অ্যান্ড্রয়েড অ্যাপ তৈরি করছি যেখানে আমার পটভূমি থেকে কোনও ক্রিয়াকলাপ শুরু করতে হবে। আমি একটি ফোরগ্রাউন্ড স্টার্টার ব্যবহার করছি যা এটি সম্পাদন করার জন্য পরিষেবাকে প্রসারিত করে। আমার একটি ক্রিয়াকলাপ অ্যাডস্ক্রিন.ক্লাস রয়েছে যা আমার ফোরগ্রাউন্ড পরিষেবা থেকে চালানো দরকার। ক্রিয়াকলাপ অ্যাডস্ক্রিন.ক্লাস অ্যান্ড্রয়েড 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

অনুমতির নীচে আপনার অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল অন্তর্ভুক্ত করা উচিত।

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

আমিও এই সমস্যার মুখোমুখি হয়েছি তবে এই সমাধানটি আমার পক্ষে কাজ করছে না
রোহিত শর্মা

@ রোহিতশর্মা এখনও এই সমস্যার কোনও সমাধান খুঁজে পেয়েছেন? বা এখনও কোন অলৌকিক জন্য অপেক্ষা।
আসাদুল্লাহ

এখনও এই সমস্যার মুখোমুখি, আমি এর জন্য কোনও নিখুঁত সমাধান পাইনি।
রোহিত শর্মা

আপনি কি সমাধান খুঁজে পেয়েছেন?
হামজা এজ্জেদিয়া
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.