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 ...
随机推荐
- java手动加载jar
@RequestMapping("/testJar") public @ResponseBody String exteriorJar(int ys, int csd,int jg ...
- bash: fork: Resource temporarily unavailable
Last login: Wed Jul 26 09:19:11 2017 from ... -bash: fork: Resource temporarily unavailable -bash-3. ...
- Scala进阶之App特质
App特质的作用 App特质的作用那就是延迟初始化,从代码上看它继承自DelayedInit,里面有个delayedInit方法 trait App extends DelayedInit Delay ...
- iOS-高仿微信摇一摇动画效果加震动音效
概述 摇一摇动画效果 (加震动音效) 详细 代码下载:http://www.demodashi.com/demo/10707.html 众所周知, 微信中的摇一摇功能: 搜索人/歌曲/电视,同样在一些 ...
- Android应用程序结构总结
Android应用程序结构分析 由于是初学者,对于Android应用程序的结构的认识是一穷二白的,对于开发Android应用程序,必须先了解其程序的结构和作用.一下就用一个简单的例子来解剖: 从上图的 ...
- Android开发学习之浅谈显示Intent和隐式Intent
Intent寻找目标组件的两种方式: 显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的. 隐式Intent:通过Intent ...
- 常用JS技巧[转]
作者:72妃 事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); even ...
- 最简易的PHP Storm调试模式开启方式
使用的是xdebug调试工具. 其实真的很想吐槽php语言开启调试模式真的好麻烦. 据说xdebug调试工具不支持php7.0以下版本,我同事的php5.6就不支持噗嗤.. 正文: 1.先用phpSt ...
- Python练习笔记——通讯录查询V1.0
作业: 编写一个代码,实现手机通讯录管理 实现功能:增.删.改.查 字典,列表 [扩展]不要求一定做出来 实现拼音首字母查找 phone = {} while True: num = input(&q ...
- Android利用广播监听设备网络连接(断网)的变化情况
http://www.open-open.com/lib/view/open1379302453943.html