অ্যান্ড্রয়েড পরিষেবা থেকে ক্রিয়াকলাপ শুরু করে


151

অ্যান্ড্রয়েড:

public class LocationService extends Service {

@Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        startActivity(new Intent(this, activity.class));
    }
}

আমি এই পরিষেবাটি চালু করেছি Activity

ইন Activityযদি শর্ত সন্তুষ্ট শুরু

startService(new Intent(WozzonActivity.this, LocationService.class));

আমার LocationServiceউল্লিখিত থেকে শুরু করা যায়নি Activity, আমি কীভাবে Activityপরিষেবা ক্লাসে চলমান প্রসঙ্গটি পেতে পারি ?

উত্তর:


344

পরিষেবা শ্রেণীর ভিতরে থেকে:

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

17
কেবল FLAG_ACTIVITY_NEW_TASK প্রয়োজন কারণ কেবলমাত্র কার্যক্রমগুলি এগুলি ছাড়া কার্যক্রম শুরু করতে পারে। 'এটি' getBaseContext এর জায়গায় ব্যবহার করা যেতে পারে এবং পরিষেবাটির নিজস্ব প্রসঙ্গ থাকার কারণে get অ্যাপ্লিকেশন পাওয়া যায়।
— সোমবার

1
সাম্প্রতিক স্ক্রিন তালিকা থেকে প্রোগ্রামটিকে কীভাবে সেই ক্রিয়াকলাপ সরানো যায়?
— প্রশান্ত দেববাদ্বর

2
পরিষেবাটি পটভূমিতে থাকলে কাজ করে না। এটার জন্য কোন ফিক্স?
— রিক রয়ড আবান

4
ব্যাকগ্রাউন্ড পরিষেবা থেকে আমার কাছে ফায়ারবেস (এফসিএম) পরিষেবাটি উন্মুক্ত অ্যাপ্লিকেশনটির জন্য সহায়তা করুন। আমি আমার অ্যাপ থেকে আমার কলিং ইউআই স্ক্রিনটি খুলতে চাই তাই দয়া করে আমাকে
— এটির

2
অ্যাপটি পটভূমিতে থাকাকালীন আমি আমার কোডটির ভিতরে আপনার কোডটি লিখেছি এবং আমি দেখতে পাচ্ছি যে পরিষেবাটি শাওমি মাই এ 2 তে কাজ করেছে, তবে শাওমি রেডমি নোট 7 এ কাজ করছে না, আপনি কেন আমাকে সাহায্য করতে পারেন কেন এটি একটি ডিভাইস কাজ করছে এবং একটিটি নয়?
— আমজাদ ওমারি

18

আমারও একই সমস্যা ছিল এবং আপনাকে জানাতে চাই যে উপরের কোনওটিই আমার পক্ষে কাজ করেনি। আমার জন্য যা কাজ করেছিল তা হ'ল:

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

এবং আমার সাবক্ল্যাসে একটিতে, পৃথক ফাইলে সঞ্চিত ছিল আমার:

public static Service myService;

myService = this;

new SubService(myService);

Intent dialogIntent = new Intent(myService, myActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
myService.startActivity(dialogIntent);

অন্যান্য সমস্ত উত্তর আমাকে একটি nullpointerexception।


5
আপনি স্থিতিশীল ক্ষেত্রে পরিষেবাটি সংরক্ষণ করছেন যা মেমরি ফুটো হতে পারে
— মার্মেল

1
স্টার্টঅ্যাক্টিভিটি একই। স্টার্টএটিভিটি! আপনি আপনার পরিষেবা থেকে একটি অকেজো উদাহরণ তৈরি করে সমান সাধারণ স্টার্টঅ্যাক্টিভিটি, কেন?
— আমির হোসাইন ঘাসেমি

8

উল্লেখ করার মতো আরেকটি বিষয়: যখন আমাদের কাজটি পটভূমিতে থাকে তখন উপরের উত্তরটি ঠিক ঠিক কাজ করে, তবে আমাদের কাজটি (পরিষেবাটি তৈরি করা + কিছু ক্রিয়াকলাপ) অগ্রভাগে উপস্থিত থাকলে কেবলমাত্র আমি এটিকে কাজ করতে পারি (যেমন আমাদের কার্যকলাপগুলির মধ্যে একটি দৃশ্যমান ব্যবহারকারীর কাছে) এটি ছিল:

    Intent intent = new Intent(storedActivity, MyActivity.class);
    intent.setAction(Intent.ACTION_VIEW);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    storedActivity.startActivity(intent);

আমি জানি না যে এখানে অ্যাকশন_উইউওউজ বা এফএলজি_এসিটিভিটি_এনইউউডিওয়াস্কের আসল ব্যবহার রয়েছে কিনা। সাফল্যের মূল চাবিকাঠি ছিল

storedActivity.startActivity(intent);

এবং অবশ্যই ক্রিয়াকলাপটি আবার তাত্ক্ষণিকভাবে না চালানোর জন্য FLAG_ACTIVITY_REORDER_TO_FRONT। ভাগ্য সুপ্রসন্ন হোক!


1
এটা কাজ করে না. এগুলি আমাকে একটি ত্রুটি দেয় যা "কার্যকলাপ প্রসঙ্গে বাইরে থেকে কলিং স্টার্টিভিটি () কল করার জন্য FLAG_ACTIVITY_NEW_TASK পতাকা প্রয়োজন requires আপনি কি সত্যিই এটি চান?"
— সেরিন

2
এটি কারণ সেটএফ্ল্যাগগুলিতে দ্বিতীয় কলটি প্রথমটিকে ওভাররাইড করে। এই সমাধানটিতে অ্যাডফ্ল্যাগগুলি বা ইন্টেন্টটি পাস করে এমন ফ্ল্যাগ সেট করতে একটি একক কল ব্যবহার করা উচিত F
— ফারগুস্যাক

8
আপনি পতাকাগুলি && এর সাথে একত্রিত করতে চান না; আপনি ব্যবহার করতে চান | (বিটওয়াইসের জন্য একটি একক বার)
— জন ওয়াট

অভিপ্রায় উদ্দেশ্য = নতুন উদ্দীপনা (storeActivity, MyActivity.class); intent.setAction (Intent.ACTION_VIEW); intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags (Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); storedActivity.startActivity (অভিপ্রায়);
— প্রখর 1001

1

এক ব্যবহার করতে পারবেন না Contextএর Service; Contextএকইভাবে (প্যাকেজ) পেতে সক্ষম হয়েছিল:

Intent intent = new Intent(getApplicationContext(), SomeActivity.class);

আমি মনে করি এটি কেবল FLAG_ACTIVITY_NEW_TASKপতাকা
— নিয়েই

0

অথবা,

আপনি আপনার নিজের অ্যাপ্লিকেশন শ্রেণিটি ব্যবহার করতে পারেন এবং যেখানেই আপনার প্রয়োজন (বিশেষত অ-ক্রিয়াকলাপ) থেকে কল করতে পারেন।

public class App extends Application {

    protected static Context context = null;

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
    }

    public static Context getContext() {
        return context;
    }

}

এবং আপনার আবেদন শ্রেণি নিবন্ধন করুন:

<application android:name="yourpackage.App" ...

তারপরে কল করুন:

App.getContext();

2
প্রসঙ্গে স্ট্যাটিক উদাহরণটি ব্যবহারের যত্ন নিন, এটি বেশ কয়েকটি স্মৃতিচিহ্ন ফাঁস হতে পারে
— ক্রগারিডোস

1
পুনঃটুইট এটি হ'ল অ্যাপ্লিকেশন প্রসঙ্গ যা তার প্রকৃতি অনুসারে সিঙ্গলটন এবং এটি মেমরি ফাঁসের দিকে নিয়ে যাবে না
— GV_FiQst

1
আমি লাইনে পরিবর্তন হবে context = getApplicationContext();থেকেcontext = this;
— GV_FiQst

-1

আপনার পরিষেবা থেকে আপনার যদি ব্যাকগ্রাউন্ডে থাকা কোনও ক্রিয়াকলাপ পুনরুদ্ধার করতে হয় তবে আমি নীচের লিঙ্কটি প্রস্তাব করছি। উদ্দেশ্য.এফএলএজি_এসিটিভিটি_নিউউ_ওয়াতাস্ক সমাধান নয়।

https://stackoverflow.com/a/8759867/1127429

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