在安卓系统中覆盖硬件按键

4

在安卓系统上,是否可以通过编程来覆盖硬件按钮的功能?具体地说,我想通过编程来覆盖我的手机上的相机按钮。这种操作是否可行?

1个回答

3

如何处理相机按钮事件

一旦相机按钮按下,就会向所有监听它的应用程序发送广播消息。您需要使用广播接收器和abortBroadcast()函数。

1)创建一个扩展BroadcastReceiver的类并实现onReceive方法。

当接收到广播消息时,onReceive方法内的代码将运行。在本例中,我编写了一个程序来启动名为myApp的activity。

每当点击硬件相机按钮时,系统都会启动默认的相机应用程序。这可能会创建冲突并阻止您的活动。例如,如果您正在创建自己的相机应用程序,则可能无法启动,因为默认相机应用程序将使用所有资源。此外,可能还有其他应用程序正在监听相同的广播。为了防止这种情况,请调用函数“abortBroadcast()”,这将告诉其他程序您正在响应此广播。

public class HDC extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
// Prevent other apps from launching
     abortBroadcast();
// Your Program
     Intent startActivity = new Intent();
        startActivity.setClass(context, myApp.class);
        startActivity.setAction(myApp.class.getName());
        startActivity.setFlags(
        Intent.FLAG_ACTIVITY_NEW_TASK
        | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
        context.startActivity(startActivity);
        }
    }
}

2) Add below lines to your android manifest file.

<receiver android:name=".HDC" >
    <intent-filter android:priority="10000">         
        <action android:name="android.intent.action.CAMERA_BUTTON" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>            
</receiver>

以上这些代码行被添加到你的清单文件中,以告知系统你的程序已准备好接收广播消息。

这行代码被添加以便在硬件按钮被点击时接收提示。

<action android:name="android.intent.action.CAMERA_BUTTON" />

HDC是第一步创建的类(不要忘记“。”)

<receiver android:name=".HDC" >

"abortBroadcast()"函数被调用以防止其他应用响应广播。但如果您的应用程序是最后一个接收到消息的呢?为了避免这种情况,必须设置一些优先级,以确保您的应用程序在任何其他程序之前接收该广播。要设置优先级,请添加此行代码。当前优先级为10000,非常高,您可以根据自己的要求进行更改。

<intent-filter android:priority="10000">

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