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秒时间。

 

 

实例代码:

  1 unit Unit1;
  2 
  3 interface
  4 
  5 uses
  6   System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  7   FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  8   FMX.Controls.Presentation, FMX.StdCtrls,
  9   Androidapi.Helpers,//需要引入
 10   AndroidAPI.jni.OS,//需要引入
 11   Androidapi.JNIBridge,//需要引入
 12   Androidapi.JNI.GraphicsContentViewText,//需要引入
 13   Androidapi.JNI.JavaTypes,//需要引入
 14   FMX.Helpers.Android;//需要引入
 15 
 16 type
 17   TForm1 = class(TForm)
 18     Button1: TButton;
 19     procedure Button1Click(Sender: TObject);
 20   private
 21     { Private declarations }
 22   public
 23     { Public declarations }
 24   end;
 25 
 26 //外国大神写的
 27 type
 28   JConsumerIrManager_CarrierFrequencyRange = interface;
 29 
 30   JConsumerIrManager_CarrierFrequencyRangeClass = interface(JObjectClass)
 31     ['{191A7F08-B93B-40D4-9B6E-3D908B37578E}']
 32     {class} function init(min, max: Integer): JConsumerIrManager_CarrierFrequencyRange; cdecl;
 33   end;
 34 
 35   [JavaSignature('android/hardware/ConsumerIrManager$CarrierFrequencyRange')]
 36   JConsumerIrManager_CarrierFrequencyRange = interface(JObject)
 37     ['{5AC0C73D-9DA2-49B0-A072-55EA03FE3B78}']
 38     function getMaxFrequency: Integer; cdecl;
 39     function getMinFrequency: Integer; cdecl;
 40   end;
 41   TJConsumerIrManager_CarrierFrequencyRange = class(TJavaGenericImport<JConsumerIrManager_CarrierFrequencyRangeClass, JConsumerIrManager_CarrierFrequencyRange>) end;
 42 
 43   JConsumerIrManagerClass = interface(JObjectClass)
 44     ['{C8AB7EEA-046F-429C-8585-EF69EBB53718}']
 45   end;
 46 
 47   [JavaSignature('android/hardware/ConsumerIrManager')]
 48   JConsumerIrManager = interface(JObject)
 49     ['{FF469731-5B57-46AB-9C83-4FB51CA6F2BA}']
 50     function getCarrierFrequencies: TJavaArray<JConsumerIrManager_CarrierFrequencyRange>; cdecl;
 51     function hasIrEmitter: Boolean; cdecl;
 52     procedure transmit(carrierFrequency: Integer; pattern: TJavaArray<Integer>); cdecl;
 53   end;
 54   TJConsumerIrManager = class(TJavaGenericImport<JConsumerIrManagerClass, JConsumerIrManager>) end;
 55 
 56 
 57 var
 58   Form1: TForm1;
 59 
 60 implementation
 61 
 62 {$R *.fmx}
 63 
 64 function MakeJavaIntArray(arr: array of Integer): TJavaArray<Integer>;
 65 var
 66   I: Integer;
 67 begin
 68   Result := TJavaArray<Integer>.Create(Length(arr));
 69   for I := Low(arr) to High(arr) do
 70     Result.Items[I] := arr[I];
 71 end;
 72 
 73 
 74 procedure TForm1.Button1Click(Sender: TObject);
 75 var
 76   mCIR: JConsumerIrManager;
 77   mRanges: TJavaArray<JConsumerIrManager_CarrierFrequencyRange>;
 78   mRange: JConsumerIrManager_CarrierFrequencyRange;
 79   I, DesiredFrequency: Integer;
 80   HasDesiredFrequency: Boolean;
 81 begin
 82   //得到红外服务
 83   mCIR := TJConsumerIrManager.Wrap((SharedActivityContext.getSystemService(TJContext.JavaClass.CONSUMER_IR_SERVICE)
 84     as ILocalObject).GetObjectID);
 85   //查看手机是否支持红外功能
 86   if mCIR.hasIrEmitter then
 87   begin
 88     //根据需要使用红外线
 89     DesiredFrequency := 3800;//一般的遥控板都是38KHz
 90     HasDesiredFrequency := False;
 91     //mRanges := mCIR.getCarrierFrequencies;//获得支持的Hz范围(不知道为什么我得到一个范围,取里面的值时出错了,我只能注掉)
 92     //for I := 0 to mRanges.Length-1 do
 93     //begin
 94     //mRange := mRanges.Items[I];
 95     //if (DesiredFrequency >= mRange.getMinFrequency) and (DesiredFrequency <= mRange.getMaxFrequency) then
 96     //begin
 97     //HasDesiredFrequency := True;
 98     //Break;
 99     //end;
100     //end;
101     //
102     //if HasDesiredFrequency then
103     //发送红外信号内容
104     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
105   end;
106 end;
107 
108 end.

 

实例配置:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!-- BEGIN_INCLUDE(manifest) -->
 3 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 4         package="%package%"
 5         android:versionCode="%versionCode%"
 6         android:versionName="%versionName%"
 7         android:installLocation="%installLocation%">
 8 
 9     <!-- This is the platform API where NativeActivity was introduced. -->
10     <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" />
11 <%uses-permission%>
12     <uses-feature android:glEsVersion="0x00020000" android:required="True"/>
13     <application android:persistent="%persistent%" 
14         android:restoreAnyVersion="%restoreAnyVersion%" 
15         android:label="%label%" 
16         android:debuggable="%debuggable%" 
17         android:largeHeap="%largeHeap%"
18         android:icon="%icon%"
19         android:theme="%theme%"
20         android:hardwareAccelerated="%hardwareAccelerated%">
21 
22 <%application-meta-data%>
23         <%services%>
24         <!-- Our activity is a subclass of the built-in NativeActivity framework class.
25              This will take care of integrating with our NDK code. -->
26         <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
27                 android:label="%activityLabel%"
28                 android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
29                 android:launchMode="singleTask">
30             <!-- Tell NativeActivity the name of our .so -->
31             <meta-data android:name="android.app.lib_name"
32                 android:value="%libNameValue%" />
33             <intent-filter>  
34                 <action android:name="android.intent.action.MAIN" />
35                 <category android:name="android.intent.category.LAUNCHER" />
36             </intent-filter> 
37         </activity>
38         <%activity%>
39         <%receivers%>
40     </application>    
41     <uses-permission android:name="android.permission.TRANSMIT_IR" />
42     <uses-feature android:name="android.hardware.consumerir" android:required="false"/>
43 </manifest>
44 <!-- END_INCLUDE(manifest) -->
View Code

 

posted on 2017-07-28 08:54  疯狂delphi  阅读(1901)  评论(0编辑  收藏  举报

导航