seleccionar que numero interruptores interruptor celular android

android - numero - que es interruptor en el celular



¿Puedo anular el botón ''Inicio'' en mi aplicación? (7)

Quiero crear mi propia pantalla de inicio en mi Android, y quiero llamar a esa pantalla de inicio desde mi aplicación.

¿Cómo puedo anular el botón ''Inicio'' para que cuando se presione la aplicación se redirija a mi pantalla de inicio en lugar de la pantalla de inicio predeterminada? ¿Es posible anular el botón de inicio?


Anula el método a continuación.

@Override public void onAttachedToWindow() { Log.i("TESTE", "onAttachedToWindow"); this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); }

Con este método, el botón INICIO deja de funcionar en esta actividad (solo esta actividad). Luego, simplemente se vuelve a implementar como un evento de botón normal (el botón de retroceso, por ejemplo).

public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_HOME) { Log.i("TESTE", "BOTAO HOME"); return true; } return super.onKeyDown(keyCode, event); }


En AndroidManifest.xml

<activity ... android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> .... </intent-filter> </activity>

Necesita launchMode="singleTask" para que la intención se entregue a la aplicación que ya se está ejecutando en lugar de crear una nueva instancia.

En la actividad:

@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (Intent.ACTION_MAIN.equals(intent.getAction())) { Log.i("MyLauncher", "onNewIntent: HOME Key"); } }

No consigues un evento clave.


Esta respuesta ya no funcionará, no desde Android 4.0.

La solución correcta es crear una aplicación que pueda interceptar la intención del Hogar, según la respuesta de @ bara a continuación .

Puede anular el botón de inicio como cualquier otro botón:

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_HOME)) { Toast.makeText(this, "You pressed the home button!", Toast.LENGTH_LONG).show(); return true; } return super.onKeyDown(keyCode, event); }


No, no podemos anular el botón de inicio, pero financio una solución para esto ...:

public boolean isApplicationSentToBackground(final Context context) { ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1); if (!tasks.isEmpty()) { ComponentName topActivity = tasks.get(0).topActivity; if (!topActivity.getPackageName().equals(context.getPackageName())) { return true; } } return false; } @Override public void onStop() { if (isApplicationSentToBackground(this)){ //put your code here what u want to do } super.onStop(); }

hacer cambios en el archivo de manifiestos

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


Prueba esto en actividad

@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); break; default: return super.onOptionsItemSelected(item); } return false; }


Se supone que el botón de inicio debe hacer una cosa y una sola y de manera consistente. Devuelve al usuario a la pantalla de INICIO. Incluso si pudiera anular su comportamiento, sería algo extremadamente hostil para el usuario. ¡Así que no lo hagas y resuelve tu problema de manera diferente!


Si alguien necesita detectar y anular el comportamiento del botón INICIO, utilice este enfoque en KOTLIN

import android.content.Intent import android.content.BroadcastReceiver import android.content.Context import android.content.IntentFilter import android.util.Log class HomeWatcher(context: Context) { val TAG = "hg" private var mContext: Context? = null private var mFilter: IntentFilter? = null private var mListener: OnHomePressedListener? = null private var mRecevier: InnerRecevier? = null // initializer block init { mContext = context mFilter = IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS) } fun setOnHomePressedListener(listener: OnHomePressedListener) { mListener = listener mRecevier = InnerRecevier() } fun startWatch() { if (mRecevier != null) { this.mContext!!.registerReceiver(mRecevier, mFilter) } } fun stopWatch() { if (mRecevier != null) { this.mContext!!.unregisterReceiver(mRecevier) } } internal inner class InnerRecevier : BroadcastReceiver() { val SYSTEM_DIALOG_REASON_KEY = "reason" val SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions" val SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps" val SYSTEM_DIALOG_REASON_HOME_KEY = "homekey" override fun onReceive(context: Context, intent: Intent) { val action = intent.action if (action == Intent.ACTION_CLOSE_SYSTEM_DIALOGS) { val reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY) if (reason != null) { Log.e(TAG, "action:$action,reason:$reason") if (mListener != null) { if (reason == SYSTEM_DIALOG_REASON_HOME_KEY) { mListener!!.onHomePressed() } else if (reason == SYSTEM_DIALOG_REASON_RECENT_APPS) { mListener!!.onHomeLongPressed() } } } } } } }

Actividad principal

class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { private var launchers = ArrayList<AppLauncher>() private var mStoredPrimaryColor = 0 private var mStoredTextColor = 0 private var mStoredUseEnglish = false private var receiver: BroadcastReceiver? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) HomeButtonWatcher() } fun HomeButtonWatcher() { val mHomeWatcher = HomeWatcher(applicationContext) mHomeWatcher.setOnHomePressedListener(object : OnHomePressedListener { override fun onHomePressed() { // do something here... Toast.makeText(applicationContext, "onHomePressed", Toast.LENGTH_LONG).show() } override fun onHomeLongPressed() { // do something here... Toast.makeText(applicationContext, "onHomeLongPressed", Toast.LENGTH_LONG).show() } }) mHomeWatcher.startWatch() } // Other code }