实现自己的HAL-13 控制led(控制led 的app),从app 到 hal 到底层内核kernel层的驱动 的实现(五)

控制led 的app

  • MainActivity.java 代码
package com.example.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.app.HelloWorldServiceManger;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {

    private boolean isInit;
    public static final String TAG = "hello_world_activity";
    private HelloWorldServiceManger service;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        service = (HelloWorldServiceManger) getSystemService(getString(R.string.server_name));
        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                isInit = service.init();
                if (isInit) {
                    Log.d(TAG, "onClick: init成功");
                } else {
                    Log.d(TAG, "onClick: init失败");
                }
            }
        });
        findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                boolean close = service.ledClose();
                if (close) {
                    Log.d(TAG, "onClick: close成功");
                } else {
                    Log.d(TAG, "onClick: close失败");
                }
            }
        });

        findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean open = false;
                open = service.ledOpen();
                if (open) {
                    Log.d(TAG, "onClick: open成功");
                } else {
                    Log.d(TAG, "onClick: open失败");
                }
            }
        });


        findViewById(R.id.btn3).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean  openDevice = false;
                openDevice = service.openLedDevice();
                if (openDevice) {
                    Log.d(TAG, "onClick: openLedDevice成功");
                } else {
                    Log.d(TAG, "onClick: openLedDevice失败");
                }
            }
        });

        findViewById(R.id.btn4).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean  closeDevice = false;
                closeDevice = service.closeLedDevice();
                if (closeDevice) {
                    Log.d(TAG, "onClick: closeLedDevice成功");
                } else {
                    Log.d(TAG, "onClick: closeLedDevice失败");
                }
            }
        });


    }
}
  • strings.xml
<resources>
    <string name="app_name">My Application</string>
    <string name="action_settings">Settings</string>
    <!-- Strings used for fragments for navigation -->
    <string name="first_fragment_label">First Fragment</string>
    <string name="second_fragment_label">Second Fragment</string>
    <string name="next">Next</string>
    <string name="previous">Previous</string>

    <string name="hello_first_fragment">Hello first fragment</string>
    <string name="hello_second_fragment">Hello second fragment. Arg: %1$s</string>
    <string name="close">关闭led</string>
    <string name="server_name">helloworldservice</string>
    <string name="init">初始化</string>
    <string name="open">打开led</string>
    <string name="open_led_device">打开led设备</string>
    <string name="close_led_device">关闭led设备</string>
</resources>
  • 编译 生成apk

mmm packages/apps/HelloWorld/

  • 打包system.img 镜像

make snod


显示my Application app 说明成功

具体操作请看 系统编译自己的app

注意

  • 操作时需要给节点, 用户的访问读写权限

chmod 0666 /dev/hello_led

  • 需要关闭selinux 否者不可以获取到系统服务

getenforce


说明selinux 开启状态,获取不到系统helloworld服务
  • 关闭selinux
## 打开selinux 
setenforce 1
## 关闭selinux
setenforce 0

setenforce 0
getenforce


说明selinux 关闭状态,可以获取到系统helloworld服务
[app 源码](https://download.csdn.net/download/yangbinbingA/19897531)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值