Search code examples
javaandroidinfrared

Infrared implementation in android app causes it to crash


If I uncomment any of the code in my method sendIrCode then my app will crash upon button press, the button runs the method sendIrCode. While in this format I can get We have liftoff and Ultra liftoff to print to the screen but like i said before as soon as I uncomment transmit it crashes. I've tried running this code on two different phones and both are ok with the hasiremitter() method and return true like they should, but thats the only feature of ConsumerIrManager that i've gotten to work correctly, any help would be appreciated.

I've also used code bits from this link verbatim and there was no change. https://android.googlesource.com/platform/development/+/master/samples/ApiDemos/src/com/example/android/apis/hardware/ConsumerIr.java

package com.konecnytechsolutions.ledremote;

import android.content.Context;
import android.hardware.ConsumerIrManager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;

import org.w3c.dom.Text;


public class MainActivity extends ActionBarActivity {

ConsumerIrManager mCIR;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mCIR = (ConsumerIrManager)getSystemService("consumer_ir");

    setContentView(R.layout.activity_main);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

public void sendIrCode(View view) {

    int[] pattern = {338,169,21,63,21,63,21,63,21,63,21,63,21,63,21,63,21,63,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,63,21,21,21,63,21,63,21,63,21,63,21,63,21,63,21,21,21,63,21};

    //mCIR.transmit(37500, pattern);
    int button_id = Integer.parseInt(view.getTag().toString());

        //noinspection ResourceType
        mCIR = (ConsumerIrManager) getSystemService(Context.CONSUMER_IR_SERVICE);

        if (mCIR.hasIrEmitter() == true) {
            TextView textView = (TextView) findViewById(R.id.textView);
            textView.setText("WE HAVE LIFTOFF!");

            switch (button_id) {
                case 1:
                    //IRBlaster.transmit(37500, pattern);
                    textView.setText("UltraLiftoff");
                    break;

                default:
                    break;
            }

        }
}
}

Logcat

01-27 01:10:50.336  24709-24709/com.konecnytechsolutions.ledremote I/SELinux﹕ Function: selinux_android_load_priority [0], There is no sepolicy file.
01-27 01:10:50.346  24709-24709/com.konecnytechsolutions.ledremote I/SELinux﹕ Function: selinux_android_load_priority , spota verifySig and checkHash pass. priority version is VE=SEPF_SAMSUNG-SM-G900A_4.4.2_0034
01-27 01:10:50.346  24709-24709/com.konecnytechsolutions.ledremote I/SELinux﹕ selinux_android_seapp_context_reload: seapp_contexts file is loaded from /data/security/spota/seapp_contexts
01-27 01:10:50.346  24709-24709/com.konecnytechsolutions.ledremote E/dalvikvm﹕ >>>>> Normal User
01-27 01:10:50.346  24709-24709/com.konecnytechsolutions.ledremote E/dalvikvm﹕ >>>>> com.konecnytechsolutions.ledremote [ userId:0 | appId:10239 ]
01-27 01:10:50.346  24709-24709/com.konecnytechsolutions.ledremote D/dalvikvm﹕ Late-enabling CheckJNI
01-27 01:10:50.486  24709-24709/com.konecnytechsolutions.ledremote I/System.out﹕ Sending WAIT chunk
01-27 01:10:50.486  24709-24715/com.konecnytechsolutions.ledremote D/dalvikvm﹕ Debugger has detached; object registry had 1 entries
01-27 01:10:50.486  24709-24709/com.konecnytechsolutions.ledremote W/ActivityThread﹕ Application com.konecnytechsolutions.ledremote is waiting for the debugger on port 8100...
01-27 01:10:52.186  24709-24715/com.konecnytechsolutions.ledremote I/dalvikvm﹕ Debugger is active
01-27 01:10:52.286  24709-24709/com.konecnytechsolutions.ledremote I/System.out﹕ Debugger has connected
01-27 01:10:52.286  24709-24709/com.konecnytechsolutions.ledremote I/System.out﹕ waiting for debugger to settle...
01-27 01:10:52.486  24709-24709/com.konecnytechsolutions.ledremote I/System.out﹕ waiting for debugger to settle...
01-27 01:10:52.686  24709-24709/com.konecnytechsolutions.ledremote I/System.out﹕ waiting for debugger to settle...
01-27 01:10:52.886  24709-24709/com.konecnytechsolutions.ledremote I/System.out﹕ waiting for debugger to settle...
01-27 01:10:53.086  24709-24709/com.konecnytechsolutions.ledremote I/System.out﹕ waiting for debugger to settle...
01-27 01:10:53.286  24709-24709/com.konecnytechsolutions.ledremote I/System.out﹕ waiting for debugger to settle...
01-27 01:10:53.486  24709-24709/com.konecnytechsolutions.ledremote I/System.out﹕ waiting for debugger to settle...
01-27 01:10:53.686  24709-24709/com.konecnytechsolutions.ledremote I/System.out﹕ waiting for debugger to settle...
01-27 01:10:53.886  24709-24709/com.konecnytechsolutions.ledremote I/System.out﹕ waiting for debugger to settle...
01-27 01:10:54.086  24709-24709/com.konecnytechsolutions.ledremote I/System.out﹕ waiting for debugger to settle...
01-27 01:10:54.286  24709-24709/com.konecnytechsolutions.ledremote I/System.out﹕ debugger has settled (1302)
01-27 01:10:54.316  24709-24709/com.konecnytechsolutions.ledremote I/PersonaManager﹕ getPersonaService() name persona_policy
01-27 01:10:54.376  24709-24709/com.konecnytechsolutions.ledremote I/PersonaManager﹕ getPersonaService() name persona_policy
01-27 01:10:54.416  24709-24709/com.konecnytechsolutions.ledremote I/dalvikvm﹕ Could not find method android.view.ViewGroup.onNestedScrollAccepted, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.onNestedScrollAccepted
01-27 01:10:54.416  24709-24709/com.konecnytechsolutions.ledremote W/dalvikvm﹕ VFY: unable to resolve virtual method 11347: Landroid/view/ViewGroup;.onNestedScrollAccepted (Landroid/view/View;Landroid/view/View;I)V
01-27 01:10:54.416  24709-24709/com.konecnytechsolutions.ledremote D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x0000
01-27 01:10:54.416  24709-24709/com.konecnytechsolutions.ledremote I/dalvikvm﹕ Could not find method android.view.ViewGroup.onStopNestedScroll, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.onStopNestedScroll
01-27 01:10:54.416  24709-24709/com.konecnytechsolutions.ledremote W/dalvikvm﹕ VFY: unable to resolve virtual method 11353: Landroid/view/ViewGroup;.onStopNestedScroll (Landroid/view/View;)V
01-27 01:10:54.416  24709-24709/com.konecnytechsolutions.ledremote D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x0000
01-27 01:10:54.416  24709-24709/com.konecnytechsolutions.ledremote I/dalvikvm﹕ Could not find method android.support.v7.internal.widget.ActionBarOverlayLayout.stopNestedScroll, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.setHideOnContentScrollEnabled
01-27 01:10:54.416  24709-24709/com.konecnytechsolutions.ledremote W/dalvikvm﹕ VFY: unable to resolve virtual method 9041: Landroid/support/v7/internal/widget/ActionBarOverlayLayout;.stopNestedScroll ()V
01-27 01:10:54.416  24709-24709/com.konecnytechsolutions.ledremote D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x000e
01-27 01:10:54.426  24709-24709/com.konecnytechsolutions.ledremote I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.internal.widget.TintTypedArray.getChangingConfigurations
01-27 01:10:54.426  24709-24709/com.konecnytechsolutions.ledremote W/dalvikvm﹕ VFY: unable to resolve virtual method 364: Landroid/content/res/TypedArray;.getChangingConfigurations ()I
01-27 01:10:54.426  24709-24709/com.konecnytechsolutions.ledremote D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002
01-27 01:10:54.436  24709-24709/com.konecnytechsolutions.ledremote I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.internal.widget.TintTypedArray.getType
01-27 01:10:54.436  24709-24709/com.konecnytechsolutions.ledremote W/dalvikvm﹕ VFY: unable to resolve virtual method 386: Landroid/content/res/TypedArray;.getType (I)I
01-27 01:10:54.436  24709-24709/com.konecnytechsolutions.ledremote D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002
01-27 01:10:54.436  24709-24709/com.konecnytechsolutions.ledremote D/skia﹕ GFXPNG PNG bitmap created width:72 height:72 bitmap id is 270
01-27 01:10:54.446  24709-24709/com.konecnytechsolutions.ledremote D/skia﹕ GFXPNG PNG bitmap created width:42 height:126 bitmap id is 271
01-27 01:10:54.446  24709-24709/com.konecnytechsolutions.ledremote D/skia﹕ GFXPNG PNG bitmap created width:18 height:18 bitmap id is 272
01-27 01:10:54.456  24709-24709/com.konecnytechsolutions.ledremote D/skia﹕ GFXPNG PNG bitmap created width:18 height:18 bitmap id is 273
01-27 01:10:54.456  24709-24709/com.konecnytechsolutions.ledremote D/skia﹕ GFXPNG PNG bitmap created width:18 height:18 bitmap id is 274
01-27 01:10:54.476  24709-24709/com.konecnytechsolutions.ledremote D/skia﹕ GFXPNG PNG bitmap created width:72 height:72 bitmap id is 275
01-27 01:10:54.476  24709-24709/com.konecnytechsolutions.ledremote D/skia﹕ GFXPNG PNG bitmap created width:72 height:72 bitmap id is 276
01-27 01:10:54.516  24709-24709/com.konecnytechsolutions.ledremote D/skia﹕ GFXPNG PNG bitmap created width:48 height:48 bitmap id is 277
01-27 01:10:54.516  24709-24709/com.konecnytechsolutions.ledremote D/skia﹕ GFXPNG PNG bitmap created width:48 height:48 bitmap id is 278
01-27 01:10:54.526  24709-24709/com.konecnytechsolutions.ledremote D/skia﹕ GFXPNG PNG bitmap created width:48 height:48 bitmap id is 279
01-27 01:10:54.526  24709-24709/com.konecnytechsolutions.ledremote D/skia﹕ GFXPNG PNG bitmap created width:48 height:48 bitmap id is 280
01-27 01:10:54.526  24709-24709/com.konecnytechsolutions.ledremote D/skia﹕ GFXPNG PNG bitmap created width:48 height:48 bitmap id is 281
01-27 01:10:54.536  24709-24709/com.konecnytechsolutions.ledremote D/skia﹕ GFXPNG PNG bitmap created width:48 height:48 bitmap id is 282
01-27 01:10:54.536  24709-24709/com.konecnytechsolutions.ledremote D/skia﹕ GFXPNG PNG bitmap created width:48 height:48 bitmap id is 283
01-27 01:10:54.536  24709-24709/com.konecnytechsolutions.ledremote D/skia﹕ GFXPNG PNG bitmap created width:48 height:48 bitmap id is 284
01-27 01:10:54.546  24709-24709/com.konecnytechsolutions.ledremote D/skia﹕ GFXPNG PNG bitmap created width:48 height:48 bitmap id is 285
01-27 01:10:54.546  24709-24709/com.konecnytechsolutions.ledremote D/skia﹕ GFXPNG PNG bitmap created width:48 height:48 bitmap id is 286
01-27 01:10:55.236  24709-24709/com.konecnytechsolutions.ledremote I/Adreno-EGL﹕ <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build:  ()
    OpenGL ES Shader Compiler Version: E031.24.00.08
    Build Date: 02/20/14 Thu
    Local Branch: AU200_patches_ms_memleak_libsc_profiler
    Remote Branch:
    Local Patches:
    Reconstruct Branch:
01-27 01:10:55.276  24709-24709/com.konecnytechsolutions.ledremote D/OpenGLRenderer﹕ Enabling debug mode 0
01-27 01:10:55.316  24709-24709/com.konecnytechsolutions.ledremote D/skia﹕ GFXPNG PNG bitmap created width:72 height:72 bitmap id is 287
01-27 01:11:20.506  24709-24709/com.konecnytechsolutions.ledremote D/AndroidRuntime﹕ Shutting down VM
01-27 01:11:20.506  24709-24709/com.konecnytechsolutions.ledremote W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41712da0)
01-27 01:11:20.536  24709-24709/com.konecnytechsolutions.ledremote E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.konecnytechsolutions.ledremote, PID: 24709
    java.lang.IllegalStateException: Could not execute method of the activity
            at android.view.View$1.onClick(View.java:3969)
            at android.view.View.performClick(View.java:4640)
            at android.view.View$PerformClick.run(View.java:19421)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5579)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at android.view.View$1.onClick(View.java:3964)
            at android.view.View.performClick(View.java:4640)
            at android.view.View$PerformClick.run(View.java:19421)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5579)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.SecurityException: Requires TRANSMIT_IR permission
            at android.os.Parcel.readException(Parcel.java:1465)
            at android.os.Parcel.readException(Parcel.java:1419)
            at android.hardware.IConsumerIrService$Stub$Proxy.transmit(IConsumerIrService.java:120)
            at android.hardware.ConsumerIrManager.transmit(ConsumerIrManager.java:85)
            at com.konecnytechsolutions.ledremote.MainActivity.sendIrCode(MainActivity.java:56)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at android.view.View$1.onClick(View.java:3964)
            at android.view.View.performClick(View.java:4640)
            at android.view.View$PerformClick.run(View.java:19421)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5579)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
            at dalvik.system.NativeStart.main(Native Method)
01-27 01:12:02.346  24709-24709/com.konecnytechsolutions.ledremote I/Process﹕ Sending signal. PID: 24709 SIG: 9

So the API documentation fails to even hint at the fact that you need to ask for Ifrared permission and so by seeting that in my manifest file I was able to solve my problem

http://developer.android.com/reference/android/Manifest.permission.html#TRANSMIT_IR


Solution

  • Your question has the answer in it:

     Caused by: java.lang.SecurityException: Requires TRANSMIT_IR permission
    

    Put the permission in your manifest ;)