覆盖Android上的硬件按钮

时间:2011-07-01 04:36:57

标签: android

是否可以在机器人上以编程方式覆盖硬件按钮的功能?具体来说,我希望能够以编程方式覆盖手机上的相机按钮。这可能吗?

1 个答案:

答案 0 :(得分:3)

如何处理相机按钮事件

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

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

只要收到广播消息,onReceive方法中的代码就会运行。在这种情况下,我编写了一个程序来启动一个名为myApp的活动。

只要单击硬件摄像头按钮,系统就会启动默认摄像头应用程序。这可能会产生冲突并阻止您的活动。例如,如果您要创建自己的相机应用程序,则可能无法启动,因为默认相机应用程序将使用所有资源。此外,可能还有其他应用程序正在收听同一广播。为了防止这种情况,请调用函数“abortBroadcast()”,this will tell other programs that you are responding to this broadcast

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是在步骤1中创建的类(不要忘记“。”)

<receiver android:name=".HDC" >

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

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