相关资料:

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)的更多相关文章

  1. Android实例-设置消息提醒(XE8+小米2)

    相关资料: 1.官网实例:http://docwiki.embarcadero.com/RADStudio/XE5/en/Mobile_Tutorial:_Using_the_Notification ...

  2. Android实例-读取设备联系人(XE8+小米2)

    相关资料: http://www.colabug.com/thread-1071065-1-1.html 结果: 1.将权限打开Read contacts设置为True,不然报图一的错误. 2.搜索空 ...

  3. Android实例-OrientationSensor方向传感器(XE8+小米2)

    相关资料: <修复 XE8 for Android 方向传感器 headingX,Y,Z 不会动的问题>:http://www.cnblogs.com/onechen/p/4497282. ...

  4. Android实例-TTabControl的使用(XE8+小米2)

    结果:  1.如果直接改变Tab的TabIndex,那样是没有动态效果的.如果想要动态效果需要用到ChangeTabAction1; 2.ChangeTabAction1可以直接为按钮指定Action ...

  5. Android实例-闪光灯的控制(XE8+小米2)

    unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Var ...

  6. Android实例-调用GOOGLE的TTS实现文字转语音(XE7+小米2)(XE10.1+小米5)

    相关资料: 注意:在手机上必须选安装文字转语音引擎“google Text To Speech”地址:http://www.shouji56.com/soft/GoogleWenZiZhuanYuYi ...

  7. Android实例-调用GOOGLE的TTS实现文字转语音(XE7+小米2)(无图)

    注意:在手机上必须选安装文字转语音引擎“google Text To Speech”地址:http://www.shouji56.com/soft/GoogleWenZiZhuanYuYinYinQi ...

  8. Android实例-实现扫描二维码并生成二维码(XE8+小米5)

    相关资料: 第三方资料太大没法写在博文上,请下载CSDN的程序包. 程序包下载: http://download.csdn.net/detail/zhujianqiangqq/9657186 注意事项 ...

  9. 调用GOOGLE的TTS实现文字转语音(XE7+小米2)(XE10.1+小米5)

    相关资料: 注意:在手机上必须选安装文字转语音引擎“google Text To Speech”地址:http://www.shouji56.com/soft/GoogleWenZiZhuanYuYi ...

随机推荐

  1. apacheBench对网站进行压力测试

    apacheBench对网站进行压力测试 分类: 学习 2014-02-19 10:35 4154人阅读 评论(1) 收藏 举报 apacheBench压力测试 Apache Benchmark下载 ...

  2. Centos5, 6, 以及Ubuntu18.04下更改系统时间和时区

    http://www.namhuy.net/2435/how-to-change-date-time-timezone-on-centos-6.html 查看日期(使用 -R 参数会以数字显示时区) ...

  3. Android 华为U8818真机调试 无法打印Logcat

    摘抄至:http://blog.csdn.net/studyalllife/article/details/8558258 在我们使用真机进行Android应用调试时,无法获得调试信息,错误提演示样例 ...

  4. TP3.2设置URL伪静态满足更好的SEO效果

    URL伪静态通常是为了满足更好的SEO效果,ThinkPHP支持伪静态URL设置,可以通过设置URL_HTML_SUFFIX参数随意在URL的最后增加你想要的静态后缀,而不会影响当前操作的正常执行. ...

  5. Android WebDriver 浏览器自动测试工具介绍

    Selenium WebDriver 是浏览器自动测试工具,提供轻量级和优雅的方式来测试web应用.Selenium WebDriver作为Android SDK extra,支持Android 2. ...

  6. matplotlib热图

    1.基础知识点回顾 1.plot(x, y, marker='D')表示绘制折线图,marker设置样式菱形. 2.scatter(x, y, marker='s', color='r')绘制散点图, ...

  7. OAF_OAF增删改-修改的实现(案例)

    2014-06-02 Created By BaoXinjian

  8. Python 爬虫 数据提取

    一下子运行 七八十个  select 将会是什么样的体验呢? 业务部门提供了一个需要,要求从爬虫数据中提取出88家的数据, 并且也提供了一个excel表格,如下图: 这个时候我们可以通过拍卖行,拍卖时 ...

  9. Dockerfile最佳实践(一)

    1.使用缓存  Dockerfile的每条指令都会将结果提交为新的镜像,下一跳指令将会基于上一步指令的镜像的基础上构建,如果一个镜像存在相同的父镜像和指令(除了ADD),Docker将会使用镜像而不是 ...

  10. Modelsim编译Xilinx器件库的另一种方法

    由 xooo 于 星期五, 09/18/2015 - 15:35 发表 以前在用modelsim对Xilinx进行器件库编译时,我用的比较多的是直接在ISE中编译器件库,感觉很方便简单,就是编译时间有 ...