安卓 - Home键发出的意图是什么?

10

我想了解设备的主页按钮执行的确切操作是什么?即当您点击主页按钮时,发出的意图、意图类别和操作是什么,将其带回空白主页屏幕。我想知道在单击自己的自定义按钮时实现此操作需要涉及哪些内容。谢谢(注:我知道这不是标准做法,但我的设备也不是标准的)。

4个回答

14

如果你想显示主屏幕,你可以通过以下方式实现:

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);

更新:请检查此示例应用程序:http://developer.android.com/resources/samples/Home/index.html


这会对发出它的应用程序产生什么影响?它会进入后台吗? - Androider
是的,它不会关闭应用程序,只会将主屏幕置于前台。 - Aleadam
点击主页按钮会产生相同的效果吗? - Androider
据我所知,是的。请记住,在事件传递给框架(如果我没记错,应该是services.jar)之前,任何应用程序都可以捕获按键事件并对其进行处理。 - Aleadam
@Aleadam “它不关闭应用程序”在安卓系统中不存在“关闭应用程序”这样的东西。 - Marian Paździoch

0

这是 XML 中的意图,如果您正在寻找它:

    <activity
        android:name=".MainActivity"
        android:launchMode="singleTask"
        android:excludeFromRecents="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <!-- The following two intent-filters are the key to set homescreen -->
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />

        </intent-filter>
    </activity>

0
请参考这里
另外,你应该能够通过使用logcat调试选项从adb点击Home按钮后看到发生的情况,例如:
adb logcat *:W

-1

你可以参考以下代码:

Button btnHome;
btnHome = (Button) findViewById(R.id.Home);
btnHome.setOnClickListener(new OnClickListener() {  

    @Override
    public void onClick(View v) {
        // sendKey(KeyEvent.KEYCODE_HOME);
        myHandler.sendEmptyMessage(Home);
    }
});

class myRunnable implements Runnable {

    public myRunnable(int key) {
        this.keycode = key;
    }

    int keycode;

    @Override
    public void run() {
        sendKey(keycode);
    }

    public void sendKey(int keyCode) {
        System.out.println("Judy--------------------->sendkey " + keyCode);
        long now = SystemClock.uptimeMillis();
        long n = System.currentTimeMillis();
        try {
            KeyEvent down = new KeyEvent(now, now, KeyEvent.ACTION_DOWN,
                    keyCode, 0);
            KeyEvent up = new KeyEvent(now, now, KeyEvent.ACTION_UP,keyCode, 0);
            IWindowManager wm = IWindowManager.Stub.asInterface(ServiceManager
                    .getService("window"));
            wm.injectKeyEvent(down, false);
            wm.injectKeyEvent(up, false);
        } catch (RemoteException e) {}
    }
}

不好意思,myHandler是什么? - Mr_and_Mrs_D
@Mr_and_Mrs_D,myHandler是一个处理程序。 - Judy
真的吗?你能解释一下你的代码吗?你的代码中没有myHandler的定义 - 请编辑你的答案解释它如何回答这个问题,并让我知道。 - Mr_and_Mrs_D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接