Android实例-红外线操作(XE10.2+小米5)
相关资料:
http://blog.csdn.net/qq_21752153/article/details/50244717
https://developer.xamarin.com/api/type/Android.Hardware.ConsumerIrManager/
https://forums.embarcadero.com/thread.jspa?messageID=876851
结果:
1.在取出来的支持Hz范围不知道为什么出错,哪位大神了解的,可以指点一下。谢了。
2.注意一定要增加红外线权限。
3.发送的信息最多2秒时间。
实例代码:
unit Unit1; interface uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.Controls.Presentation, FMX.StdCtrls,
Androidapi.Helpers,//需要引入
AndroidAPI.jni.OS,//需要引入
Androidapi.JNIBridge,//需要引入
Androidapi.JNI.GraphicsContentViewText,//需要引入
Androidapi.JNI.JavaTypes,//需要引入
FMX.Helpers.Android;//需要引入 type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; //外国大神写的
type
JConsumerIrManager_CarrierFrequencyRange = interface; JConsumerIrManager_CarrierFrequencyRangeClass = interface(JObjectClass)
['{191A7F08-B93B-40D4-9B6E-3D908B37578E}']
{class} function init(min, max: Integer): JConsumerIrManager_CarrierFrequencyRange; cdecl;
end; [JavaSignature('android/hardware/ConsumerIrManager$CarrierFrequencyRange')]
JConsumerIrManager_CarrierFrequencyRange = interface(JObject)
['{5AC0C73D-9DA2-49B0-A072-55EA03FE3B78}']
function getMaxFrequency: Integer; cdecl;
function getMinFrequency: Integer; cdecl;
end;
TJConsumerIrManager_CarrierFrequencyRange = class(TJavaGenericImport<JConsumerIrManager_CarrierFrequencyRangeClass, JConsumerIrManager_CarrierFrequencyRange>) end; JConsumerIrManagerClass = interface(JObjectClass)
['{C8AB7EEA-046F-429C-8585-EF69EBB53718}']
end; [JavaSignature('android/hardware/ConsumerIrManager')]
JConsumerIrManager = interface(JObject)
['{FF469731-5B57-46AB-9C83-4FB51CA6F2BA}']
function getCarrierFrequencies: TJavaArray<JConsumerIrManager_CarrierFrequencyRange>; cdecl;
function hasIrEmitter: Boolean; cdecl;
procedure transmit(carrierFrequency: Integer; pattern: TJavaArray<Integer>); cdecl;
end;
TJConsumerIrManager = class(TJavaGenericImport<JConsumerIrManagerClass, JConsumerIrManager>) end; var
Form1: TForm1; implementation {$R *.fmx} function MakeJavaIntArray(arr: array of Integer): TJavaArray<Integer>;
var
I: Integer;
begin
Result := TJavaArray<Integer>.Create(Length(arr));
for I := Low(arr) to High(arr) do
Result.Items[I] := arr[I];
end; procedure TForm1.Button1Click(Sender: TObject);
var
mCIR: JConsumerIrManager;
mRanges: TJavaArray<JConsumerIrManager_CarrierFrequencyRange>;
mRange: JConsumerIrManager_CarrierFrequencyRange;
I, DesiredFrequency: Integer;
HasDesiredFrequency: Boolean;
begin
//得到红外服务
mCIR := TJConsumerIrManager.Wrap((SharedActivityContext.getSystemService(TJContext.JavaClass.CONSUMER_IR_SERVICE)
as ILocalObject).GetObjectID);
//查看手机是否支持红外功能
if mCIR.hasIrEmitter then
begin
//根据需要使用红外线
DesiredFrequency := ;//一般的遥控板都是38KHz
HasDesiredFrequency := False;
//mRanges := mCIR.getCarrierFrequencies;//获得支持的Hz范围(不知道为什么我得到一个范围,取里面的值时出错了,我只能注掉)
//for I := 0 to mRanges.Length-1 do
//begin
//mRange := mRanges.Items[I];
//if (DesiredFrequency >= mRange.getMinFrequency) and (DesiredFrequency <= mRange.getMaxFrequency) then
//begin
//HasDesiredFrequency := True;
//Break;
//end;
//end;
//
//if HasDesiredFrequency then
//发送红外信号内容
mCIR.transmit(DesiredFrequency, MakeJavaIntArray([,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,])); //pattern values here
end;
end; end.
实例配置:
<?xml version="1.0" encoding="utf-8"?>
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="%package%"
android:versionCode="%versionCode%"
android:versionName="%versionName%"
android:installLocation="%installLocation%"> <!-- This is the platform API where NativeActivity was introduced. -->
<uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" />
<%uses-permission%>
<uses-feature android:glEsVersion="0x00020000" android:required="True"/>
<application android:persistent="%persistent%"
android:restoreAnyVersion="%restoreAnyVersion%"
android:label="%label%"
android:debuggable="%debuggable%"
android:largeHeap="%largeHeap%"
android:icon="%icon%"
android:theme="%theme%"
android:hardwareAccelerated="%hardwareAccelerated%"> <%application-meta-data%>
<%services%>
<!-- Our activity is a subclass of the built-in NativeActivity framework class.
This will take care of integrating with our NDK code. -->
<activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
android:label="%activityLabel%"
android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
android:launchMode="singleTask">
<!-- Tell NativeActivity the name of our .so -->
<meta-data android:name="android.app.lib_name"
android:value="%libNameValue%" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<%activity%>
<%receivers%>
</application>
<uses-permission android:name="android.permission.TRANSMIT_IR" />
<uses-feature android:name="android.hardware.consumerir" android:required="false"/>
</manifest>
<!-- END_INCLUDE(manifest) -->
Android实例-红外线操作(XE10.2+小米5)的更多相关文章
- Android实例-设置消息提醒(XE8+小米2)
相关资料: 1.官网实例:http://docwiki.embarcadero.com/RADStudio/XE5/en/Mobile_Tutorial:_Using_the_Notification ...
- Android实例-读取设备联系人(XE8+小米2)
相关资料: http://www.colabug.com/thread-1071065-1-1.html 结果: 1.将权限打开Read contacts设置为True,不然报图一的错误. 2.搜索空 ...
- Android实例-OrientationSensor方向传感器(XE8+小米2)
相关资料: <修复 XE8 for Android 方向传感器 headingX,Y,Z 不会动的问题>:http://www.cnblogs.com/onechen/p/4497282. ...
- Android实例-TTabControl的使用(XE8+小米2)
结果: 1.如果直接改变Tab的TabIndex,那样是没有动态效果的.如果想要动态效果需要用到ChangeTabAction1; 2.ChangeTabAction1可以直接为按钮指定Action ...
- Android实例-闪光灯的控制(XE8+小米2)
unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Var ...
- Android实例-调用GOOGLE的TTS实现文字转语音(XE7+小米2)(XE10.1+小米5)
相关资料: 注意:在手机上必须选安装文字转语音引擎“google Text To Speech”地址:http://www.shouji56.com/soft/GoogleWenZiZhuanYuYi ...
- Android实例-调用GOOGLE的TTS实现文字转语音(XE7+小米2)(无图)
注意:在手机上必须选安装文字转语音引擎“google Text To Speech”地址:http://www.shouji56.com/soft/GoogleWenZiZhuanYuYinYinQi ...
- Android实例-实现扫描二维码并生成二维码(XE8+小米5)
相关资料: 第三方资料太大没法写在博文上,请下载CSDN的程序包. 程序包下载: http://download.csdn.net/detail/zhujianqiangqq/9657186 注意事项 ...
- 调用GOOGLE的TTS实现文字转语音(XE7+小米2)(XE10.1+小米5)
相关资料: 注意:在手机上必须选安装文字转语音引擎“google Text To Speech”地址:http://www.shouji56.com/soft/GoogleWenZiZhuanYuYi ...
随机推荐
- DB2建库简单例子
--重启数据库 FORCE APPLICATION ALL DB2STOP DB2START --创建数据库 TERRITORY US COLLATE USING SYSTEM ) CONNECT T ...
- pythong 中的 __call__
python __call__ (可调用对象) __call__ Python中有一个有趣的语法,只要定义类型的时候,实现__call__函数,这个类型就成为可调用的. 换句话说,我们可以把这个类型的 ...
- springmvc多视图配置
http://blog.csdn.net/yaerfeng/article/details/23593755
- C# 获取当前打开的文件夹2
这一个则比较投机,准确性不能保证,可以参考: 这个类获取当前进程的句柄: public class MyProcess { private bool haveMainWi ...
- Workflow_将一个消息同时发给通过用户(案例)
2014-06-04 Created By BaoXinjian
- POSIX 消息队列 和 系列函数
一.在前面介绍了system v 消息队列的相关知识,现在来稍微看看posix 消息队列. posix消息队列的一个可能实现如下图: 其实消息队列就是一个可以让进程间交换数据的场所,而两个标准的消息队 ...
- linux下安装nginx和配置
1.系统:centos6.8 2.安装准备: 安装nginx前,我们首先要确保系统安装了g++.gcc.openssl-devel.pcre-devel和zlib-devel软件,可通过如图所示命令进 ...
- Python 字典 in 操作符
描述 Python 字典 in 操作符用于判断键(key)是否存在于字典(D)中,如果键在字典中返回True,否则返回False. 在Python2中还可以使用 has_key() 方法,官方文档推荐 ...
- Java web中listener、 filter、servlet 加载顺序
真正的加载顺序为:context-param -> listener -> filter -> servlet 加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 f ...
- Visual Studio 中突出显示的引用
有时候代码中处理的变量多了,看起代码来就比较的费劲,有时想看一个变量都在哪里用到了,还要一个一个的去仔细分辨. 一.VS2012本身就提供了选中提示功能 但是本身带的这个选中提示功能颜色比较浅,不过这 ...