我制作了一个带有6个按钮的遥控应用程序,可与三星电视配合使用。对于kitkat,我使用了新的api ConsumerIRmanager,但我希望该应用程序能够与软糖一起工作,因此该应用程序适用于kitkat版本,但它不会开始在软糖上这里是代码:
public class MainActivity extends Activity {
Object irdaService;
Method irWrite;
SparseArray<String> irData;
TextView mFreqsText;
ConsumerIrManager mCIR;
ImageButton power;
SeekBar sBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
// Be sure to call the super class.
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout);
power = (ImageButton) findViewById(R.id.powerBtn);
power.setVisibility(View.GONE);
irData = new SparseArray<String>();
irData.put(
R.id.toggleButton1,
hex2dec("0000 006d 0022 0003 00a9 00a8 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0015 0015 003f 0015 003f 0015 003f 0015 003f 0015 003f 0015 003f 0015 0702 00a9 00a8 0015 0015 0015 0e6e"));
irData.put(
R.id.upProg,
hex2dec("0000 006d 0022 0003 00a9 00a8 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 0015 0015 0015 0015 003f 0015 0015 0015 0015 0015 0015 0015 003f 0015 0015 0015 003f 0015 003f 0015 0015 0015 0040 0015 003f 0015 003f 0015 0702 00a9 00a8 0015 0015 0015 0e6e"));
irData.put(
R.id.downBtn,
hex2dec("0000 006d 0022 0003 00a9 00a8 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 0015 0015 0015 0015 0015 0015 003f 0015 003f 0015 003f 0015 003f 0015 0015 0015 003f 0015 003f 0015 003f 0015 0702 00a9 00a8 0015 0015 0015 0e6e"));
irData.put(
R.id.minusBtn,
hex2dec("0000 006d 0022 0003 00a9 00a8 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 003f 0015 0015 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 0015 0015 003f 0015 003f 0015 003f 0015 003f 0015 0702 00a9 00a8 0015 0015 0015 0e6e"));
irData.put(
R.id.plusBtn,
hex2dec("0000 006d 0022 0003 00a9 00a8 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 003f 0015 003f 0015 003f 0015 003f 0015 0702 00a9 00a8 0015 0015 0015 0e6e"));
irData.put(
R.id.muteBtn,
hex2dec("0000 006c 0022 0003 00ab 00aa 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 0015 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 003f 0015 0015 0015 003f 0015 0015 0015 0015 0015 003f 0015 003f 0015 003f 0015 0714 00ab 00aa 0015 0015 0015 0e91"));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
irInit4KitKat();
} else {
irInit4JellyBean();
}
}
@TargetApi(Build.VERSION_CODES.KITKAT)
public void irInit4KitKat() {
// Get a reference to the ConsumerIrManager
mCIR = (ConsumerIrManager) getSystemService(Context.CONSUMER_IR_SERVICE);
}
public void irInit4JellyBean() {
Object irService = this.getSystemService("irda");
//irService.getClass();
Class irClass = irService.getClass();
Class params[] = new Class[1];
params[0] = String.class;
try {
irWrite = irClass.getMethod("write_irsend", params);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
public void irSend(View view) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
irSend4Kitkat(view);
} else {
irSend4JellyBean(view);
}
}
@TargetApi(Build.VERSION_CODES.KITKAT)
private void irSend4Kitkat(View view) {
String data = irData.get(view.getId());
if (data != null) {
String values[] = data.split(",");
int[] pattern = new int[values.length - 1];
for (int i = 0; i < pattern.length; i++) {
pattern[i] = Integer.parseInt(values[i + 1]);
}
mCIR.transmit(Integer.parseInt(values[0]), pattern);
}
}
private void irSend4JellyBean(View view) {
String data = irData.get(view.getId());
if (data != null) {
try {
irWrite.invoke(irdaService, data);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
protected String hex2dec(String irData) {
List<String> list = new ArrayList<String>(Arrays.asList(irData
.split(" ")));
list.remove(0); // dummy
int frequency = Integer.parseInt(list.remove(0), 16); // frequency
list.remove(0); // seq1
list.remove(0); // seq2
for (int i = 0; i < list.size(); i++) {
list.set(i, Integer.toString(Integer.parseInt(list.get(i), 16)));
}
frequency = (int) (1000000 / (frequency * 0.241246));
list.add(0, Integer.toString(frequency));
irData = "";
for (String s : list) {
irData += s + ",";
}
return irData;
}
}
mainfest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.irtest"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.TRANSMIT_IR"
android:required="false" />
<uses-feature android:name="android.hardware.consumerir" />
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:screenOrientation="portrait"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我无法启动活动ComponentInfo com.example.irtest / com.irtest.MainActivity:java.lang.NullPointerException 我在这一行上遇到问题类irClass = irService.getClass();
答案 0 :(得分:2)
“irda”服务仅适用于KitKat之前的三星设备。在KitKat及以上版本中,所有IR命令都在Consumer IR API中处理。
答案 1 :(得分:1)
您发布的相同代码对我有用,但它有一个简单而微小的错误......
在方法irInit4JellyBean()中,您可以使用Object irService getSystemService(“irda”)仅适用于三星设备,我已阅读
然后,在那之后,你使用irSend4JellyBean()和你做irWrite.invoke(irdaService,data);变量irdaService不等于irService,所以它意味着irdaService根本没有得到任何值,所以我通过irService在类irdaService的顶部重命名并运行它,并在三星Galaxy S4和三星Galaxy Tab中工作3 10'1。
我也有LG电视的代码
就是这样:
private String power_on =“0000 006d 0022 0002 0157 00ac 0015 0016 0015 0016 0015 0041 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0041 0015 0041 0015 0016 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0016 0015 0016 0015 0041 0015 0016 0015 0016 0015 0016 0015 0041 0015 0041 0015 0041 0015 0041 0015 0016 0015 0041 0015 0041 0015 0041 0015 0016 0015 0016 0015 0689 0157 0056 0015 0e94“;
private String power_off =“0000 006d 0022 0002 0157 00ac 0015 0016 0015 0016 0015 0041 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0041 0015 0041 0015 0016 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0016 0015 0041 0015 0016 0015 0016 0015 0016 0015 0041 0015 0041 0015 0016 0015 0041 0015 0016 0015 0041 0015 0041 0015 0041 0015 0016 0015 0016 0015 0689 0157 0056 0015 0e94“;
private String channel_next =“0000 006D 0022 0002 0157 00AC 0015 0016 0015 0016 0015 0041 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0041 0015 0041 0015 0016 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0689 0157 0056 0015 0E94“;
private String channel_prev =“0000 006D 0022 0002 0157 00AC 0015 0016 0015 0016 0015 0041 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0041 0015 0041 0015 0016 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0689 0157 0056 0015 0E94“;
private String vol_up =“0000 006D 0022 0002 0157 00AC 0015 0016 0015 0016 0015 0041 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0041 0015 0041 0015 0016 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0016 0015 0041 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0041 0015 0016 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0689 0157 0056 0015 0E94“;
private String vol_down =“0000 006D 0022 0002 0157 00AC 0015 0016 0015 0016 0015 0041 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0041 0015 0041 0015 0016 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0041 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0041 0015 0689 0157 0056 0015 0E94“;
答案 2 :(得分:-1)
我试过这段代码,效果很好!
final ConsumerIrManager mCIR;
mCIR = (ConsumerIrManager) getSystemService(Context.CONSUMER_IR_SERVICE);
int[] pattern_off = {8918 ,4446, 572, 546 ,572 ,546 ,572, 1638, 572, 546, 572, 546,
572 ,546 ,572 ,546 ,572 ,546 ,572 ,1638 ,572 ,1638 ,572 ,546 ,572 ,1638 ,572 ,
1638, 572 ,1638 ,572 ,1638 ,572 ,1638 ,572 ,1638 ,572 ,546 ,572 ,1638 ,572,
546, 572 ,546, 572 ,546, 572, 1638, 572, 1638, 572, 546, 572, 1638, 572 ,546,
572, 1638, 572, 1638, 572, 1638, 572, 546, 572, 546, 572, 39598, 8892, 2210, 572, 95186};
mCIR.transmit(38000,pattern_off);
如何发送此类型十六进制代码(例如:0x000000000000847B)??
begin remote
bits 16
flags SPACE_ENC|CONST_LENGTH
eps 30
aeps 100
header 9042 4558
one 555 1682
zero 555 570
ptrail 544
repeat 9041 2296
pre_data_bits 16
pre_data 0x213C
gap 108556
min_repeat 0
toggle_bit 0
begin codes
KEY_POWER 0x000000000000847B # Was: power
KEY_1 0x0000000000000CF3 # Was: 1
KEY_2 0x000000000000946B # Was: 2
KEY_3 0x0000000000009C63 # Was: 3
KEY_4 0x00000000000014EB # Was: 4
KEY_5 0x00000000000004FB # Was: 5
KEY_6 0x0000000000001CE3 # Was: 6
KEY_7 0x0000000000004CB3 # Was: 7
KEY_8 0x00000000000054AB # Was: 8
KEY_9 0x00000000000044BB # Was: 9
KEY_EXIT 0x0000000000008C73 # Was: exit
KEY_0 0x000000000000CC33 # Was: 0
KEY_0 0x000000000000F40B # Was: 10
KEY_MUTE 0x000000000000A45B # Was: mute
KEY_ENTER 0x0000000000005CA3 # Was: return
KEY_VOLUMEUP 0x000000000000649B # Was: vol+
KEY_VOLUMEDOWN 0x000000000000E41B # Was: vol-
KEY_CHANNELUP 0x000000000000AC53 # Was: channel+
KEY_CHANNELDOWN 0x000000000000EC13 # Was: channel-
KEY_INFO 0x000000000000748B # Was: guide
mosaic 0x0000000000006C93
yes 0x000000000000C43B
KEY_UP 0x000000000000D42B # Was: up
KEY_DOWN 0x00000000000024DB # Was: down
KEY_LEFT 0x0000000000002CD3 # Was: left
KEY_RIGHT 0x000000000000DC23 # Was: right
? 0x00000000000034CB
KEY_KPPLUS 0x0000000000003CC3 # Was: +
orange 0x0000000000007C83
KEY_GREEN 0x000000000000B44B # Was: green
KEY_YELLOW 0x000000000000BC43 # Was: yellow
KEY_BLUE 0x000000000000FC03 # Was: blue
envelope 0x000000000000C23D
KEY_B 0x00000000000042BD # Was: B
KEY_A 0x000000000000827D # Was: A
KEY_I 0x00000000000002FD # Was: i
end codes
end remote