অ্যান্ড্রয়েডে হোম বোতাম টিপুন সনাক্ত করুন


94

এটি এখন কিছুক্ষণের জন্য আমাকে বাদাম চালাচ্ছে।

হোম বোতামটি কোনও অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে চাপ দেওয়া হয়েছে কি নির্ভরযোগ্যতার সাথে সনাক্ত করার কোনও উপায় আছে?

এটি ব্যর্থ হওয়ায়, কী কী কারণে কোনও কার্যকলাপ অনপেজ এ গিয়েছিল তা বলার শক্ত উপায় আছে? অর্থাত্‍ এটি সনাক্ত করতে পারি যে এটি কোনও নতুন ক্রিয়াকলাপের সূচনা করে বা পিছনে / বাড়িতে টিপে তৈরি হয়েছে।

আমি যে পরামর্শটি দেখেছি তা হ'ল অনপজ () ও কলটি আইফিনিশিং () কল করুন তবে এটি হোম বোতামটি টিপানোর সময় ঠিক মিথ্যা হিসাবে ফিরে আসবে ঠিক যেমন কোনও নতুন কার্যক্রম শুরু হচ্ছে সুতরাং এটি উভয়ের মধ্যে পার্থক্য করতে ব্যর্থ হয়।

যে কোনও সহায়তা অনেক প্রশংসিত।

** আপডেট **: এই লিঙ্কটির জন্য @ অ্যান্ড্রয়েড-ক্ষুধার্তকে ধন্যবাদ: https://nishandroid.blogspot.com/

নিম্নলিখিত পদ্ধতিটি অতিক্রম করে:

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);           
}

তারপরে নিম্নলিখিত ইভেন্টটি হোম বোতাম টিপুনগুলির জন্য বরখাস্ত হবে:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {     

    if(keyCode == KeyEvent.KEYCODE_HOME)
    {
       //The Code Want to Perform. 
    }
});

এই লাইনটির সাথে কোনও পার্শ্ব প্রতিক্রিয়া আছে কিনা তা আমি নিশ্চিত নই:

this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);   

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

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

আপডেট : অনুমান করা যায় যে এই হ্যাকটি আর অ্যান্ড্রয়েড 4.0.০ এর পরে কাজ করে না


আমার সমস্যাটি পিছনে এবং বাড়ির-কিয়ের মধ্যে ছদ্মবেশ তৈরি করার জন্য নয় তবে আমি উভয় ক্ষেত্রেই আবেদন শেষ করতে চেয়েছিলাম। যা আমি ব্যবহার করেছিলাম Activity.onUserLeaveHint()

কেবলমাত্র সমস্যাটি অন ইউজারলিভ হিন্ট () এও জ্বালিয়ে দেবে যখন আমি যখন বলা কার্যকলাপ থেকে কোনও ক্রিয়াকলাপ শুরু করি তখন আমি কেবল জানতে চাই যে পিছনে বা বাড়িতে চাপ দেওয়া হয়েছে কিনা pres যদিও পরামর্শের জন্য ধন্যবাদ
ডিন ওয়াইল্ড

এটি সত্য, তবে দুর্ভাগ্যক্রমে, যতদূর আমি জানি, হোম-কি ব্যবহারের কোনও তথ্য পাওয়ার একমাত্র জায়গা। অনেকের মধ্যে থেকে মিথ্যা-সম্ভাবনাময়গুলি সংগ্রহ করতে আরও বেশি সমস্যা তৈরি করা সহজেই স্বীকৃত হতে পারে তবে এখনও সহজ শব্দ শোনার কাজটি বরং জটিল করে তোলে।
16:36

4
@ ডিনওয়াইল্ড: আপনি কি এটি পড়েছেন: নিশা113a5.blogspot.com
প্রতীক ভাট

4
TYPE_KEYGUARD ধ্রুবকটি অ্যান্ড্রয়েড 5.0 -র লেআউটপ্যারামগুলি থেকে সরানো হয়েছিল
theb1uro

উত্তর:


136

নিম্নলিখিত কোডটি আমার জন্য কাজ করে :)

HomeWatcher mHomeWatcher = new HomeWatcher(this);
mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() {
    @Override
    public void onHomePressed() {
        // do something here...
    }
    @Override
    public void onHomeLongPressed() {
    }
});
mHomeWatcher.startWatch();
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;

public class HomeWatcher {

    static final String TAG = "hg";
    private Context mContext;
    private IntentFilter mFilter;
    private OnHomePressedListener mListener;
    private InnerReceiver mReceiver;

    public HomeWatcher(Context context) {
        mContext = context;
        mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
    }

    public void setOnHomePressedListener(OnHomePressedListener listener) {
        mListener = listener;
        mReceiver = new InnerReceiver();
    }

    public void startWatch() {
        if (mReceiver != null) {
            mContext.registerReceiver(mReceiver, mFilter);
        }
    }

    public void stopWatch() {
        if (mReceiver != null) {
            mContext.unregisterReceiver(mReceiver);
        }
    }

    class InnerReceiver extends BroadcastReceiver {
        final String SYSTEM_DIALOG_REASON_KEY = "reason";
        final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
        final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
        final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";

        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
                String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
                if (reason != null) {
                    Log.e(TAG, "action:" + action + ",reason:" + reason);
                    if (mListener != null) {
                        if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
                            mListener.onHomePressed();
                        } else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
                            mListener.onHomeLongPressed();
                        }
                    }
                }
            }
        }
    }
}
public interface OnHomePressedListener {
    void onHomePressed();
    void onHomeLongPressed();
}

4
আপনার onHomeLongPressedপ্রকৃতপক্ষে "সাম্প্রতিক" সিস্টেম ক্রিয়াকলাপ খোলার সাথে সম্পর্কিত বলে মনে হচ্ছে। আমার ফোনে, এটি হোম বোতামের পাশের রিসেন্টস বোতামটি টিপে ট্রিগার করেছে, সুতরাং এটি আপনার বাড়ির দীর্ঘ প্রেস হওয়া সম্পর্কে কোডের ধারণা সর্বদা সঠিক নয়।
স্যাম

কেন এটি আমার পক্ষে কাজ করে না, আমি ম্যানিফেস্টের মাধ্যমে সম্প্রচারিত রেজিস্ট্রেশন বাদে ঠিক একই কাজ করেছি।
ফারহান

অ্যাপ্লিকেশন ক্লাসে নিবন্ধিত, এখনও অবধি কাজ করছে .. +1, আমি কী আশ্চর্য হয়েছি? মানে, আমরা কোন আসল
কেসটি

4
কখনও কখনও ইন্টেন্ট.জেটস্ট্রিংএক্সট্রা (SYSTEM_DIALOG_REASON_KEY); নাল ফিরে। আমি জানতে চাই এটি কি ঘটছে ??
ফখের

4
দীর্ঘ প্রেস কারণ এখন বলা হয়final String SYSTEM_DIALOG_REASON_LONG_PRESS = "assist"
JWqvist

49

এটি একটি পুরানো প্রশ্ন তবে এটি কারও সহায়ক হতে পারে।

@Override
protected void onUserLeaveHint()
{
    Log.d("onUserLeaveHint","Home button pressed");
    super.onUserLeaveHint();
}

ডকুমেন্টেশন অনুসারে, ব্যবহারকারী যখন হোম বোতামটি ক্লিক করেন বা যখন কোনও কিছু আপনার অ্যাপ্লিকেশনটিকে বাধা দেয় (আগত ফোন কলের মতো) তখন অনউসারলিভহিন্ট () পদ্ধতিটি কল করা হয়।

এটি আমার জন্য কাজ করে .. :)


26
সঠিক না !!! এটি হোম বোতাম টিপে কাজ করা হয় তবে ইন্টেন্টের সাথে ক্রিয়াকলাপ স্যুইচ করার সময় এটিও কাজ করা হয় !!
নিকুঞ্জ পরাদ্বা

এটি সর্বদা অনটপ () ব্যবহারের আগে কার্যকর করা হবে, এমনকি অন্য ক্রিয়াকলাপ শীর্ষে আসে বা ব্যবহারকারী জোর করে কার্যকলাপটি ছেড়ে দেয় বা হোম বোতামটি ক্লিক করে ...
নাভাস পিকে

7

অ্যান্ড্রয়েড অ্যাপের মধ্যে থেকে হোম বোতামটি সনাক্ত করা এবং / বা আটকানো অসম্ভব। এটি দূষিত অ্যাপ্লিকেশনগুলি থেকে বেরিয়ে আসা যায় না এমন প্রতিরোধ করার জন্য এটি সিস্টেমে নির্মিত।


গৃহীত উত্তর চেক করুন, এটা সম্ভব। যদিও এখনও অনেক ডিভাইসে পরীক্ষিত হয়নি।
ডিন ওয়াইল্ড

হ্যাঁ ... খনিতে ক্রাশ হওয়া অ্যাপ
জেরেমি লোগান

লঞ্চার / হোম রিপ্লেসমেন্ট অ্যাপসের কী হবে? আমি একটি তৈরি করছি এবং ব্যবহারকারীরা ঘরে ক্লিক করলে আমি প্রথম স্ক্রিনে যেতে চাই
lisovaccaro

লঞ্চারদের জন্য এটি ব্যবহার করুন: @ ওভাররাইড সুরক্ষিত শূন্যতা অন-নিউইন্টেন্ট (ইনটেন্ট ইন্টেন্ট) {সুপার.অনউইউভেন্ট (উদ্দেশ্য); / * আপনি যা চান তা করুন * /}
টন

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

7

প্রথম ক্রিয়াকলাপটি খোলে এবং বন্ধ হয়ে যায় বা হোম ক্রিয়াকলাপের দ্বারা যখন কোনও ক্রিয়াকলাপ বিরতি দেওয়া হয় এবং তারপরে টাস্ক ম্যানেজার থেকে পুনরায় শুরু করা হয় তখন আমার অ্যাপ্লিকেশনটিতে পটভূমি সংগীত শুরু / থামানো দরকার। খাঁটি প্লেব্যাকটি থামাতে / আবার শুরু করতে Activity.onPause()এবং Activity.onResume()কিছুক্ষণের জন্য সঙ্গীতকে বাধাগ্রস্থ করে, তাই আমাকে নিম্নলিখিত কোডটি লিখতে হয়েছিল:

@Override
public void onResume() {
  super.onResume();

  // start playback here (if not playing already)
}

@Override
public void onPause() {
  super.onPause();

  ActivityManager manager = (ActivityManager) this.getSystemService(Activity.ACTIVITY_SERVICE);
  List<ActivityManager.RunningTaskInfo> tasks = manager.getRunningTasks(Integer.MAX_VALUE);
  boolean is_finishing = this.isFinishing();
  boolean is_last = false;
  boolean is_topmost = false;
  for (ActivityManager.RunningTaskInfo task : tasks) {
    if (task.topActivity.getPackageName().startsWith("cz.matelier.skolasmyku")) {
      is_last = task.numRunning == 1;
      is_topmost = task.topActivity.equals(this.getComponentName());
      break;
    }
  }

  if ((is_finishing && is_last) || (!is_finishing && is_topmost && !mIsStarting)) {
    mIsStarting = false;
    // stop playback here
  }
}

যা কেবলমাত্র অ্যাপ্লিকেশন (তার সমস্ত ক্রিয়াকলাপ) বন্ধ থাকলে বা হোম বোতাম টিপে থাকাকালীন প্লেব্যাককে বাধা দেয়। দুর্ভাগ্যক্রমে আমি onPause()আরম্ভের ক্রিয়াকলাপের পদ্ধতিগুলির কলগুলির ক্রম পরিবর্তন করতে ও পরিচালনা করতে পারি নিonResume() অ্যাকটিভিটি যখনActivity.startActivity() (বা onPause()এই ক্রিয়াকলাপটিতে অন্য কোনও ক্রিয়াকলাপটি অন্যভাবে চালু করা হচ্ছে) সুতরাং এই কেসটি বিশেষভাবে পরিচালনা করতে হবে:

private boolean mIsStarting;

@Override
public void startActivity(Intent intent) {
  mIsStarting = true;
  super.startActivity(intent);
}

আর একটি অপূর্ণতা এটির প্রয়োজন this GET_TASKS যুক্ত অনুমতিAndroidManifest.xml :

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

এই কোডটি পরিবর্তন করে যে এটি কেবল হোম বোতাম টিপে প্রতিক্রিয়া জানায় তা সোজা is


4

onUserLeaveHint()ক্রিয়াকলাপে ওভাররাইড করুন । যখন কোনও নতুন ক্রিয়াকলাপ এটির উপরে আসে বা ব্যবহারকারীরা প্রেস চাপ দেয় তখন ক্রিয়াকলাপে কোনও কলব্যাক আসবে না।


4
অ্যাপ্লিকেশনটির মধ্যে একটি ক্রিয়াকলাপ থেকে অন্য ক্রিয়াকলাপে যাওয়ার সময় এটিও বলা হয়
আমির উয়াল

3

onUserLeaveHint ();

এই ক্রিয়াকলাপ শ্রেণীর পদ্ধতিটি ওভাররাইড করুন his এটি হোম কী ক্লিকটি সনাক্ত করবে। এই পদ্ধতিটি ক্রিয়াকলাপের অন-পজ () কলব্যাকের ঠিক আগে বলা হয় B তবে কোনও কল যখন কোনও কল-ইন ক্রিয়াকলাপটি অগ্রভাগে আসে তার আগে কল করা হবে না that বাধাগুলি বাদ দিয়ে যখন ব্যবহারকারী ক্লিক করে হোম কীতে ক্লিক করবে।

@Override
protected void onUserLeaveHint() {
    super.onUserLeaveHint();
    Log.d(TAG, "home key clicked");
}

2

প্রতিটি স্ক্রিনের জন্য একটি কাউন্টার তৈরি করার চেষ্টা করুন। ব্যবহারকারী যদি হোমকে স্পর্শ করে তবে কাউন্টারটি শূন্য হবে।

public void onStart() {
  super.onStart();
  counter++;
}

public void onStop() {
  super.onStop();
  counter--;    
  if (counter == 0) {
      // Do..
  }
}

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

2

অ্যান্ড্রয়েডে ওয়ার্কিং কিওস্ক মোডটি কীভাবে তৈরি করা যায় তার পোস্টে আপনি আন্দ্রেস শ্রেডের একটি সমাধান বিবেচনা করতে পারেন । এটি কিছুটা হ্যাকিং, তবে হোম বাটনটি বাধা দেওয়ার কারণগুলির কারণে এটি হওয়া দরকার;)


1

আমার এই সমস্যাটি হয়েছিল এবং যেহেতু অনকেইডাউন () পদ্ধতিটি ওভাররাইড করা অন্তর্নিহিত অ্যান্ড্রয়েড সিস্টেমের কারণে এই পদ্ধতিটিকে কল করেনি তাই আমি কিছুই সম্পাদন করতে পারি নি, আমি অনব্যাকপ্রেসড () -কে ওভাররাইড করে সমাধান করেছি, এবং আমার সেখানে বুলিয়ান মানটি মিথ্যা হিসাবে সেট করা হয়েছে , কারণ আমি পিছনে চাপ দিয়েছি, কোডে আমি কী বোঝাতে চাইছি তা আপনাকে দেখায়:

import android.util.Log;
public class HomeButtonActivity extends Activity {
    boolean homePressed = false;
    // override onCreate() here.

    @Override
    public void onBackPressed() {
        homePressed = false; // simply set homePressed to false
    }

    @Overide
    public void onResume() {
        super.onResume();
        homePressed = true; // default: other wise onBackPressed will set it to false
    }

    @Override
    public void onPause() {
        super.onPause();
        if(homePressed) { Log.i("homePressed", "yay"); }
    }

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


আসলে যখন অন্য কার্যকলাপে যান এ, onpause পদ্ধতি বলা হয়
Fakher

এ কারণেই আমি স্পষ্টভাবে বলেছি যে এটি কেবল তখনই কাজ করবে যদি আপনার অ্যাপ্লিকেশনটি কেবল একটি একক কার্যকলাপ অন্তর্ভুক্ত করে!
মোশে রাবায়েভ

এবং যদি একসাথে একাধিক সম্পর্কযুক্ত অ্যাক্টিভিটি একই সাথে চলতে থাকে এবং ব্যবহারকারী কেবল তাদের মধ্যে স্যুইচ করে চলেছে? আধুনিক অ্যান্ড্রয়েড ডিভাইসগুলি মাল্টি টাস্কিং সমর্থন করে। এই কোডটি দিয়ে, দেখে মনে হচ্ছে আপনার অ্যাপে ফিরে যাওয়া homePressedসত্য হয়ে যায় এবং অন্য অ্যাপ্লিকেশনটিতে স্যুইচ করার পরে মনে হয় হোমটি আসলে চাপানো হয়নি it
রেমি Lebeau

1

এপিআই 14 যেহেতু আপনি ফাংশনটি ব্যবহার করতে পারেন onTrimMemory()এবং পতাকাটির জন্য পরীক্ষা করতে পারেন TRIM_MEMORY_UI_HIDDEN। এটি আপনাকে বলবে যে আপনার অ্যাপ্লিকেশনটি পটভূমিতে যাচ্ছে।

সুতরাং আপনার কাস্টম অ্যাপ্লিকেশন শ্রেণিতে আপনি এমন কিছু লিখতে পারেন:

override fun onTrimMemory(level: Int) {
    if (level == TRIM_MEMORY_UI_HIDDEN) {
        // Application going to background, do something
    }
}

: এই একটি ইন-গভীরতা অধ্যয়ন জন্য, আমি এই নিবন্ধটি পড়তে করার জন্য আপনাকে আমন্ত্রণ http://www.developerphil.com/no-you-can-not-override-the-home-button-but-you-dont-have -প্রতি/


4
ভাল নিবন্ধ - দরকারী বিকল্প যা সম্ভবত বেশিরভাগ মানুষের প্রয়োজন অনুসারে করে
ডিন ওয়াইল্ড

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

0

আপনার অ্যাপ্লিকেশনটির জন্য একটি বিকল্প হ'ল অ্যান্ড্রয়েড আইনেট.এক.ক্যাটগরিটি.হোম ইন্টেন্ট ব্যবহার করে একটি প্রতিস্থাপন হোম স্ক্রিন লিখুন। আমি বিশ্বাস করি এই ধরণের অভিপ্রায়টি আপনি হোম বোতামটি দেখতে পারেন।

আরো বিস্তারিত:

http://developer.android.com/guide/topics/intents/intents-filters.html#imatch


4
আকর্ষণীয় ধারণা তবে কিছুটা দীর্ঘ বাতাস চলা এবং মার্জিত হিসাবে আমি আশা করব না
ডিন ওয়াইল্ড

0

যেহেতু আপনি কেবল অ্যাপ্লিকেশন চালু হওয়ার সময় মূল ক্রিয়াকলাপটি পুনঃনির্মাণ করতে চান, তাই আপনি ম্যানিফেস্টে লঞ্চ মোড ইত্যাদি পরিবর্তন করে এই আচরণটি পেতে পারেন?

উদাহরণস্বরূপ, আপনি কি অ্যান্ড্রয়েড: ক্লিয়ারটাস্কঅনলানচ = "সত্য" বৈশিষ্ট্যটি আপনার লঞ্চ ক্রিয়াকলাপটিতে প্রয়োগ করার চেষ্টা করেছেন , সম্ভবত অ্যান্ড্রয়েডের সাথে মিল রেখে: লঞ্চমোড = "এককইনস্ট্যান্স" ?

এই ধরণের আচরণকে সূক্ষ্ম করে তোলার জন্য কার্য এবং পিছনের স্ট্যাক একটি দুর্দান্ত উত্স।


এটি সবচেয়ে মার্জিত সমাধানের মতো মনে হবে তবে আমি এটি বেশ অবিশ্বাস্য বলে মনে করেছি। কয়েকটি খোলা / বন্ধ / বিরতি চক্রের পরে অ্যাপ্লিকেশন পুরোপুরি পুনরায় আরম্ভ করার চেয়ে কেবল পুনরায় শুরু হবে
ডিন ওয়াইল্ড

0

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

আমি আশেপাশের যে কোনও কাজের অবাঞ্ছিত পার্শ্ব প্রতিক্রিয়া দেখাব।


4
আপনি একেবারে দাগী কিন্তু কিছু ক্লায়েন্ট উত্তর দেওয়ার জন্য কোনও গ্রহণ করবেন না এবং কেন নির্দেশিকা ভঙ্গ করবেন না তা বুঝতে পারবেন না।
ডিন ওয়াইল্ড

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

0

সম্প্রতি আমি হোম প্রেস বোতামটি সনাক্ত করার চেষ্টা করছিলাম, কারণ " অনব্যাকপ্রেসড () " পদ্ধতির মতোই এটি করা আমার প্রয়োজন ছিল । এটি করার জন্য, আমাকে " অন ​​সাপোর্টনাভিগেটআপ () " পদ্ধতিটি এইভাবে ওভাররাইড করতে হয়েছিল :

override fun onSupportNavigateUp(): Boolean {
    onBackPressed()
    return true
}

এটি পুরোপুরি কাজ করেছে। =)


0

জ্যাকের উত্তর clickইভেন্টের জন্য পুরোপুরি কাজ করছে যখন longClickবিবেচনা করা হচ্ছেmenu বাটন ক্লিক ।

যাইহোক, যদি কেউ কোটলিনের মাধ্যমে কীভাবে ভাবছেন তা ভাবছেন,

class HomeButtonReceiver(private var context: Context,private var listener: OnHomeButtonClickListener) {
    private val mFilter: IntentFilter = IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)
    private var mReceiver: InnerReceiver = InnerReceiver()

    fun startWatch() {
        context.registerReceiver(mReceiver, mFilter)
    }

    fun stopWatch() {
        context.unregisterReceiver(mReceiver)
    }

    inner class InnerReceiver: BroadcastReceiver() {
        private val systemDialogReasonKey = "reason"
        private val systemDialogReasonHomeKey = "homekey"
        override fun onReceive(context: Context?, intent: Intent?) {
            val action = intent?.action
            if (action == Intent.ACTION_CLOSE_SYSTEM_DIALOGS) {
                val reason = intent.getStringExtra(systemDialogReasonKey)
                if (reason != null && reason == systemDialogReasonHomeKey) {
                    listener.onHomeButtonClick()
                }
            }
        }
    } 
}

0

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


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