অগ্রভাগে কীভাবে একটি ক্রিয়াকলাপ আনবেন (স্ট্যাকের শীর্ষে)?


91

অ্যান্ড্রয়েডে, আমি একটি ক্রিয়াকলাপ উদাহরণসক্রিয়া সংজ্ঞায়িত করেছি।

যখন আমার অ্যাপ্লিকেশন চালু হয়েছিল, এই এ-ক্রিয়াকলাপের একটি উদাহরণ তৈরি হয়েছিল, বলুন এটি A। যখন ব্যবহারকারী একটি বোতাম টিপে ক্লিক করেন A, তখন বি-ক্রিয়াকলাপের আরেকটি উদাহরণ, বি তৈরি করা হয়েছিল। এখন টাস্ক স্ট্যাকটি বিএ, শীর্ষে বি সহ। তারপরে, ব্যবহারকারী বি-তে একটি বোতাম ক্লিক করলেন, সি-ক্রিয়াকলাপের আরেকটি উদাহরণ এবং সি তৈরি হয়েছিল। এখন টাস্ক স্ট্যাক সিবিএ, শীর্ষে সি সহ।

এখন, যখন ব্যবহারকারী সি-এর একটি বোতাম টিপুন, আমি অ্যাপ্লিকেশনটি এটিকে অগ্রভাগে আনতে চাই, অর্থাৎ এটিকে টাস্ক স্ট্যাকের শীর্ষে রাখতে চাই, এসিবি।

কীভাবে কোডটি লিখতে পারি তা ঘটানোর জন্য?

উত্তর:


109

আপনি এটি চেষ্টা করে দেখতে পারেন FLAG_ACTIVITY_REORDER_TO_FRONT(নথিটি আপনি যা চান ঠিক তা বর্ণনা করে)


4
আমি মনে করি এটি FLAG_ACTIVITY_SINGLE_TOP হওয়া উচিত ।

26
@ user942821 FLAG_ACTIVITY_SINGLE_TOPএখানে সাহায্য করবে না। যখন অ্যাক্টিভিটিসি স্ট্যাকের শীর্ষে থাকে এবং এটি startActivity()অ্যাক্টিভিটিএ চালু করার জন্য কল করে, আপনি সেট FLAG_ACTIVITY_SINGLE_TOPকরে থাকলেও এটি ক্রিয়াকলাপের একটি নতুন উদাহরণ তৈরি করে । যদি আপনি ইতিমধ্যে স্ট্যাকের শীর্ষে থাকা কোনও ক্রিয়াকলাপ চালু করার চেষ্টা করছেন তবেFLAG_ACTIVITY_SINGLE_TOP কেবলমাত্র একটি নতুন উদাহরণ তৈরি করা বাধা দেয় । এই ক্ষেত্রে, ক্রিয়াকলাপ স্ট্যাকের শীর্ষে নেই, সুতরাং অ্যান্ড্রয়েড একটি নতুন উদাহরণ তৈরি করে।
ডেভিড ওয়াসার

6
অসাধারণ! (Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_CLEAR_TOP)প্রদত্তের পরে কোনও ইতিহাস সাফ করতে ব্যবহৃত হয় Activity
shkschneider

10
আপনি যদি FLAG_ACTIVITY_CLEAR_TOP এছাড়াও নির্দিষ্ট করে থাকেন তবে FLAG_ACTIVITY_REORDER_TO_FRONT এড়ানো হবে। ডকুমেন্টেশন চেক করুন।
ক্রিস সুব্রামনিয়ান

4
ইন্টেন্ট.এডিডিএফ্ল্যাগস (ইনটেন্ট.এফএলজি_এসিটিভিটি_সর্ডারএফএফআরন্ট | ইনটেন্ট.এফএলএজি_এসিটিভিটি_সিংল_টপ); যদি আপনি ইতিমধ্যে ব্যাকস্ট্যাকের শীর্ষে থাকলেও সম্মুখভাগে না থাকেন তবে আপনি যদি আপনার ক্রিয়াকলাপটি ব্যবহারকারী সেশনের সাথে সামনে আনতে চান তবে এটি কাজ করবে work
হাসান জামিল

64

এটি করার সবচেয়ে ভাল উপায়টি হ'ল অ্যান্ড্রয়েড হোম স্ক্রিন যেমন ব্যবহার করে তেমন অভিপ্রায় ব্যবহার করা - অ্যাপ্লিকেশন লঞ্চার।

উদাহরণ স্বরূপ:

Intent i = new Intent(this, MyMainActivity.class);
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);

এইভাবে, আমার প্যাকেজটিতে যে কোনও ক্রিয়াকলাপ ব্যবহারকারী সম্প্রতি ব্যবহার করেছিলেন সেটিকে আবার সামনে এনে দেওয়া হয়েছে। আমি ব্যবহারকারীকে আমার অ্যাপ্লিকেশনটিতে ফিরে পেতে আমার পরিষেবাটির পেন্ডিং ইন্টেন্ট ব্যবহার করতে এটি দরকারী বলে মনে করেছি।


4
এই টুকরা কোডটির জন্য অনেক অনেক ধন্যবাদ। সঠিকভাবে কাজ করার জন্য আমি কয়েক ঘন্টা নষ্ট করেছি।
পাকিতোভি

4
বা ComponentName এবং setComponent ছাড়া, কিন্তু নতুন ইন্টেন্ট (এই, MyMainActivity.class) সঙ্গে
Tima

4
অদ্ভুত যেহেতু এটিই আমার পক্ষে কাজ করেছিল; পতাকা নির্ধারণ কাজ করে না এবং সর্বদা ক্রিয়াকলাপটি পুনরায় তৈরি করে।
স্টিভেন হুয়াং

4
আমি যখন এই উত্তর এবং মন্তব্যগুলি পড়ি তখন এটি স্পষ্ট হয় যে আমাদের একটি ভুল বোঝাবুঝি হয়েছে। মূল প্রশ্নটি কীভাবে Activityটাস্ক স্ট্যাকের মধ্যে একটি পুনরায় সাজানো যায় সে সম্পর্কে জিজ্ঞাসা করছে । ওপি স্পষ্টভাবে জানিয়েছে যে তিনি ActivityAস্ট্যাকের নীচ থেকে স্ট্যাকের শীর্ষে যেতে চান (অর্থাত: তিনি ক্রিয়াকলাপটিকে টাস্ক স্ট্যাকের সামনের দিকে পুনরায় অর্ডার করতে চান )। এই উত্তরটি তা করবে না। এই উত্তরটি "আমি কীভাবে আমার অ্যাপ্লিকেশন (টাস্ক স্ট্যাক )টিকে পটভূমি থেকে অগ্রভূমিতে আনতে পারি?" এই প্রশ্নের উত্তর ? এটি ওপির মূল প্রশ্ন থেকে সম্পূর্ণ আলাদা প্রশ্ন।
ডেভিড ওয়াসার

4
এছাড়াও আপভোট বোতামটি "এই উত্তরটি সহায়ক" নয় "এই উত্তরটি অপের পক্ষে সহায়ক" - এই পরিস্থিতিতে তার ইতিমধ্যে "গ্রহণযোগ্য চিহ্ন" রয়েছে। স্পষ্টতই আমি অপের পক্ষে সহায়ক কী তা জানি না এবং আইএমএইচও ওভারের উত্তরগুলি কীভাবে অনুমান করা যায় যে আমার অনুমানের উপর ভিত্তি করে অপের জন্য কী সহায়ক তা ভুল।
বরিস ট্রুখভ

28

আপনি কীভাবে এটি করতে পারেন তার একটি কোড-উদাহরণ এখানে দেওয়া হয়েছে:

Intent intent = getIntent(getApplicationContext(), A.class)

এটি নিশ্চিত করবে যে আপনার কাছে স্ট্যাকের কোনও ক্রিয়াকলাপের কেবল একটি উদাহরণ রয়েছে।

private static Intent getIntent(Context context, Class<?> cls) {
    Intent intent = new Intent(context, cls);
    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    return intent;
}

11

FLAG_ACTIVITY_REORDER_TO_FRONT : যদি Context.startActivity () তে কোনও উদ্দেশ্য প্রবেশ করানো হয়, তবে এই পতাকাটি চালু করা কার্যকলাপটিকে যদি ইতিমধ্যে এটি চলমান থাকে তবে তার কার্যকারিতার ইতিহাস স্ট্যাকের সামনে আনতে হবে।

Intent i = new Intent(context, AActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);

4

আমি মনে করি Intentপতাকাগুলির সংমিশ্রণটি কৌশলটি করা উচিত। বিশেষত, Intent.FLAG_ACTIVITY_CLEAR_TOPএবং Intent.FLAG_ACTIVITY_NEW_TASK

কল করার আগে এই ফ্ল্যাগগুলি আপনার উদ্দেশ্যতে যুক্ত করুন startActvity


2

i.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);

দ্রষ্টব্য আপনার হোমঅ্যাক্টিভিটি লঞ্চমোডটি একক_ টাস্ক হওয়া উচিত


1

সাধারণভাবে আমি মনে করি ক্রিয়াকলাপ পরিচালনার এই পদ্ধতির প্রস্তাব দেওয়া হয় না। স্ট্যাকের দুটি ধাপ নিচে কোনও ক্রিয়াকলাপ পুনরায় সক্রিয় করার সমস্যাটি হ'ল এই ক্রিয়াকলাপটি সম্ভবত মারা গিয়েছিল। আপনার ক্রিয়াকলাপের স্থিতি স্মরণ করে সেগুলির সাথে আরম্ভ করার জন্য আমার পরামর্শstartActivity ()

আমি নিশ্চিত যে আপনি এই পৃষ্ঠাটি দেখেছেন তবে আপনার সুবিধার জন্য এই লিঙ্কটি


0

কোনও বিজ্ঞপ্তি ক্লিক করার সময় আপনি যদি স্ট্যাকের শীর্ষে কোনও ক্রিয়াকলাপ আনতে চান তবে FLAG_ACTIVITY_REORDER_TO_FRONT কাজ করার জন্য আপনাকে নিম্নলিখিত কাজগুলি করতে হবে:

আমার জন্য সমাধানটি হ'ল এমন একটি সম্প্রচার রিসিভার তৈরি করা যা প্রজ্ঞাপনটি ট্রিগার করে এমন সম্প্রচার ক্রিয়া শোনায়। সুতরাং মূলত:

  1. বিজ্ঞপ্তি প্রবর্তনের ক্রিয়াকলাপের অতিরিক্ত নামের সাথে একটি সম্প্রচার ক্রিয়াকে ট্রিগার করে।

  2. বিজ্ঞপ্তিটি ক্লিক করা হলে ব্রডকাস্ট রিসিভার এটিকে ধরবে, তারপরে FLAG_ACTIVITY_REORDER_TO_FRONT পতাকা ব্যবহার করে সেই ক্রিয়াকলাপটি চালু করার উদ্দেশ্যে তৈরি করে

  3. ক্রিয়াকলাপটি কার্যকলাপের স্ট্যাকের শীর্ষে আনা হয়, কোনও নকল নেই d


-2

আপনি যদি "গুগল ক্লাউড বার্তা" ব্যবহার করে "পেন্ডিং ইন্টেন্ট" শ্রেণীর সাথে পুশ বিজ্ঞপ্তিগুলি গ্রহণ করেন তবে নিম্নলিখিত কোডটি কেবলমাত্র অ্যাকশন বারে বিজ্ঞপ্তি প্রদর্শন করে।

বিজ্ঞপ্তিটি ক্লিক করে কোনও ক্রিয়াকলাপ তৈরি করা হবে না, শেষ সক্রিয় ক্রিয়াকলাপ সমস্যা ছাড়াই বর্তমান অবস্থা ধরে রেখে পুনরুদ্ধার করা হবে।

Intent notificationIntent = new Intent(this, ActBase.class); **notificationIntent.setAction(Intent.ACTION_MAIN); notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);** PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("Localtaxi") .setVibrate(vibrate) .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) .setAutoCancel(true) .setOnlyAlertOnce(true) .setContentText(msg);

mBuilder.setContentIntent(contentIntent);

NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());

চিয়াও!

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