本文整理自网络,侵删。
相关资料:http://blog.csdn.net/qq_21752153/article/details/50244717https://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 := 3800;//一般的遥控板都是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([8950,4350,650,500,600,500,550,600,550,550,600,500,550,550,600,550,600,500,550,1650,600,1600,650,1600,550,1700,600,1600,600,1600,600,1650,600,1600,650,1600,550,1650,650,1600,600,550,550,550,550,550,550,550,600,500,600,550,550,550,550,550,550,1650,650,1600,600,1600,600,1650,600,1600,600])); //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) -->
来源:https://www.cnblogs.com/FKdelphi/p/7248301.html
相关阅读 >>
Delphi stringtowidestring widestringtostring
更多相关阅读请进入《Delphi》频道 >>