java - হোম বাটন মত কাজ করতে ফিরে বোতাম override



android android-button (6)

ব্যাক বাটন টিপুন, আমি চাই আমার অ্যাপ্লিকেশনটি ধ্বংস হওয়া রাষ্ট্রের পরিবর্তে থামানো অবস্থায় যেতে হবে।

অ্যান্ড্রয়েড docs এটি বলে:

... সব ক্রিয়াকলাপে বেক চাপলে তারা ধ্বংস হয়ে যায়। যখন ব্যবহারকারী সঙ্গীত অ্যাপ্লিকেশনটিতে সঙ্গীত বাজানো শুরু করে এবং তারপরে আবার চাপ দেয়, তখন অ্যাপ্লিকেশনটি স্বাভাবিক ব্যাক আচরণকে অগ্রাহ্য করে, প্লেয়ার কার্যকলাপকে ধ্বংস হতে বাধা দেয় এবং সঙ্গীতটি চলতে থাকে, যদিও এর কার্যকলাপ আর দৃশ্যমান হয় না

আমি কিভাবে আমার নিজস্ব অ্যাপ্লিকেশন এই কার্যকারিতা প্রতিলিপি করবেন?

আমি মনে করি তিনটি সম্ভাবনা থাকতে হবে ...

  1. ব্যাক বাটন প্রেসটি ক্যাপচার করুন (নীচের হিসাবে) এবং তারপর হোম বোতামটি যে কোন পদ্ধতি (গুলি) কল করুন।

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
            Log.d(this.getClass().getName(), "back button pressed");
        }
        return super.onKeyDown(keyCode, event);
    }
  2. ফিরে বোতাম টিপুন এবং তারপর একটি হোম বাটন প্রেস spoof।

  3. ব্যাক বোতাম টিপে ক্যাপচার করুন, তারপরে হোম স্ক্রীনের কার্যকলাপ শুরু করুন, কার্যকরভাবে আমার অ্যাপ্লিকেশানের কার্যকলাপটিকে বন্ধ অবস্থায় আটকে দিন।

সম্পাদনা: আমি পরিষেবাদি সম্পর্কে জানি এবং এই সমস্যাটি সম্পর্কিত অ্যাপ্লিকেশনটিতে একটি ব্যবহার করছি। এই প্রশ্নটি ব্যাকটি বোতামে টিপে টিপে থাকা রাষ্ট্রের পরিবর্তে কার্যকলাপটিকে স্থগিত অবস্থায় রেখে দেওয়ার বিষয়ে বিশেষভাবে।

https://ffff65535.com


Android 2.0 পরে ব্যাকপ্রেসড () ওভাররাইড করুন। যেমন

@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

আপনি যদি ব্যাক বাটন ধরতে চান তবে অ্যান্ড্রয়েড বিকাশকারী ব্লগে এই পোস্টটি দেখুন। এটি Android 2.0 এ এটি করার সহজ উপায় এবং 1.x এবং 2.0 তে চালিত অ্যাপ্লিকেশনের জন্য এটি করার সর্বোত্তম উপায় জুড়ে।

যাইহোক, যদি আপনার ক্রিয়াকলাপ বন্ধ করা হয় তবে এটি ডিভাইসে মেমরি প্রাপ্যতার উপর নির্ভর করে এখনও মারা যেতে পারে। যদি আপনি কোন UI এর সাথে কোনও প্রক্রিয়া চালাতে চান তবে আপনাকে একটি Service তৈরি করতে হবে। ডকুমেন্টেশন পরিষেবা সম্পর্কে নিম্নলিখিত বলে:

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

এই আপনার প্রয়োজনীয়তা জন্য উপযুক্ত মনে হয়।


এমনকি ভাল, OnPause() সম্পর্কে কিভাবে:

যখন কার্যকলাপটি ব্যাকগ্রাউন্ডে চলছে তখন ক্রিয়াকলাপ লাইফ সাইকেলটির অংশ হিসাবে বলা হয়, তবে তা এখনো (এখনো) হত্যা করা হয়নি। প্রতিচ্ছবি counterpart ()।

যখন অ্যাক্টিভিশন B অ্যাক্টিভিশন A এর সামনে চালু হয়, এ কলটি এ-পপ () এর পুনরাবৃত্তি না হওয়া পর্যন্ত এ-এ তৈরি করা হবে না, তাই enter code here করতে ভুলবেন না enter code here কিছু নাও।

এই কলব্যাকটি বেশিরভাগ কার্যকলাপকে সম্পাদন করার যে কোনও স্থায়ী অবস্থা সংরক্ষণের জন্য ব্যবহৃত হয় এবং নিশ্চিতভাবেই নিশ্চিত করা হয় যে এটির প্রথমটি না করেই নতুন ক্রিয়াকলাপ শুরু করার জন্য পর্যাপ্ত সংস্থান না থাকলে কিছুই হারিয়ে যায় না।

স্টপ অ্যানিমেশান এবং অন্যান্য জিনিসগুলি যা পরবর্তীতে যত দ্রুত সম্ভব স্যুইচ করার জন্য, বা ক্যামেরা হিসাবে অ্যাক্সেসের জন্য অ্যাক্সেস বন্ধ করার জন্য যথেষ্ট পরিমাণে CPU ব্যবহার করে এমন কিছু করার জন্য এটি একটি ভাল জায়গা।


কাজের উদাহরণ

Super.onBackPressed কল করবেন না নিশ্চিত করুন ();

@Override
public void onBackPressed() {
   Log.d("CDA", "onBackPressed Called");
   Intent setIntent = new Intent(Intent.ACTION_MAIN);
   setIntent.addCategory(Intent.CATEGORY_HOME);
   setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   startActivity(setIntent);
}

এইভাবে আপনার ব্যাক বাটন হোম বোতাম মত কাজ। এটি আপনার ক্রিয়াকলাপ শেষ করে না তবে এটি ব্যাকগ্রাউন্ডে নিয়ে যায়

দ্বিতীয় উপায় হল moveTaskToBack(true); কল হয় moveTaskToBack(true); উপর onBackPressed এবং onBackPressed অপসারণ করতে ভুলবেন না


বেশির ভাগ সময় আপনাকে পটভূমিতে কিছু করার জন্য একটি Service তৈরি করতে হবে এবং আপনার দৃশ্যমান Activity কেবল এই Service নিয়ন্ত্রণ করবে। (আমি নিশ্চিত যে সঙ্গীত প্লেয়ার একই ভাবে কাজ করে, তাই ডক্সগুলিতে উদাহরণটি কিছুটা বিভ্রান্তিকর বলে মনে হয়।) যদি এমন হয় তবে আপনার Activity স্বাভাবিক হিসাবে finish হতে পারে এবং Service এখনও চলবে।

একটি সহজ পদ্ধতি হল Back বোতাম টিপুন এবং moveTaskToBack(true) এটিকে অনুসরণ করুন:

// 2.0 and above
@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

// Before 2.0
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

আমি মনে করি পছন্দসই বিকল্পটি স্বাভাবিকভাবে সম্পন্ন করার জন্য এবং নিজেকে পুনরায় তৈরি করতে সক্ষম হওয়া উচিত, যেমন প্রয়োজন হলে পরিষেবা থেকে বর্তমান অবস্থাটি পড়তে হবে। কিন্তু moveTaskToBack একটি দ্রুত বিকল্প হিসাবে ব্যবহার করা যেতে পারে।

দ্রষ্টব্য : অ্যানড্রইড 2.0 এর নিচে ডেভের নির্দেশ অনুসারে একটি নতুন চালু onBackPressed পদ্ধতি এবং ব্যাক বাটন পরিচালনা করার জন্য এই সুপারিশগুলি প্রবর্তন করে।


যদি এটি অন্য কাউকে সাহায্য করে তবে আমার 2 টি লেআউটের সাথে একটি কার্যকলাপ ছিল যা আমি দৃশ্যমানতার জন্য বন্ধ এবং বন্ধ করে দিয়েছিলাম, পৃষ্ঠা 1> পৃষ্ঠা 2 গঠনকে অনুকরণ করার চেষ্টা করেছিলাম। যদি তারা 2 পৃষ্ঠায় থাকে এবং ফিরে বোতাম টিপতে চায় তবে আমি পৃষ্ঠা 1 এ ফিরে যেতে চাই, যদি তারা 1 পৃষ্ঠায় ফিরে বোতাম টিপতে পারে তবে এটি এখনও স্বাভাবিক হিসাবে কাজ করা উচিত। তার বেশ মৌলিক কিন্তু এটি কাজ করে

@Override
public void onBackPressed() {
// check if page 2 is open
    RelativeLayout page2layout = (RelativeLayout)findViewById(R.id.page2layout);
    if(page2layout.getVisibility() == View.VISIBLE){
        togglePageLayout(); // my method to toggle the views
        return;
    }else{
        super.onBackPressed(); // allows standard use of backbutton for page 1
    }

}

এটা কেউ, cheers সাহায্য আশা করি





back