是否可以在机器人上以编程方式覆盖硬件按钮的功能?具体来说,我希望能够以编程方式覆盖手机上的相机按钮。这可能吗?
答案 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">