delphi Android实例-红外线操作(XE10.2+小米5)  
官方Delphi 学习QQ群: 682628230(三千人)\n
频道

delphi 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) 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; cdecl;
    function hasIrEmitter: Boolean; cdecl;
    procedure transmit(carrierFrequency: Integer; pattern: TJavaArray); cdecl;
  end;
  TJConsumerIrManager = class(TJavaGenericImport) end;


var
  Form1: TForm1;

implementation

{$R *.fmx}

function MakeJavaIntArray(arr: array of Integer): TJavaArray;
var
  I: Integer;
begin
  Result := TJavaArray.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;
  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.

配置文件:
        package="%package%"
        android:versionCode="%versionCode%"
        android:versionName="%versionName%"
        android:installLocation="%installLocation%">

   
   
<%uses-permission%>
   
   
        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%>
       
       
                android:label="%activityLabel%"
                android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
                android:launchMode="singleTask">
           
           
                android:value="%libNameValue%" />
              
               
               
             
       
        <%activity%>
        <%receivers%>
        
   
   

来源:https://www.cnblogs.com/FKdelphi/p/7248301.html


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.056668043136597 seconds