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


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.