安卓杂类问题记录

安卓杂项问题记录

`


前言

最近编写安卓测试应用有一些杂项需要记录下,写篇安卓杂项问题记录


提示:以下是本篇文章正文内容,下面案例可供参考

一、如何创建一个线程

    private void mysocketnew(){
        new Thread(){
            @Override
            public void run() {	//run方法里就可以编写需要执行的函数了
                super.run(); //这里是继承线程类的run方法,可以删除
                
            }
        };
    }

二、动态申请权限

1.AndroidMainfest.xml文件中添加权限

<uses-permission android:name="android.car.permission.xxxx"/>

2.java代码动态申请

    private void reqPermission() {
        String mMeter = "android.car.permission.xxxx";
        int permissionCheck = 0;
        permissionCheck = this.checkSelfPermission(mMeter);
        if (permissionCheck
                != PackageManager.PERMISSION_GRANTED) { //判断权限是否已经申请器
            ActivityCompat.requestPermissions(this, new String[]{mMeter}, 1);//申请权限
        }
    }

3.添加密钥

1.在app/key/目录下放进目录
2.在app的build.gradle中添加如下代码:
    signingConfigs {
        releaseConfig {
            keyAlias 'platform'
            keyPassword 'android'
            storeFile file('key/platform.keystore')
            storePassword 'android'
        }

        debug {
            keyAlias 'platform'
            keyPassword 'android'
            storeFile file('key/platform.keystore')
            storePassword 'android'
        }
    }

三、Gson数据处理

1.添加gson相关

1.在app的build.gradle的dependencies中添加如下代码:

implementation 'com.google.code.gson:gson:2.8.5'

2.申明一个类用以接收json数据:

  Myinfo MeterReceiveInfo= new Myinfo();
  Myinfo MeterSendInfo= new Myinfo();
  static class MyInfo {	

        private int ID;

        private int data;

        public int setID(int ID){
            return this.ID = ID;
        }

        public int setdata(int data){
            return  this.data = data;
        }

    }

2.json和对象之间来回转换

MeterReceiveInfo = gson.fromJson(line,MyInfo.class); //将Json数据转换为对象
-------------------------------------------------------------------------
MeterSendInfo.setID(id);
MeterSendInfo.setdata(TRACK_INFO);String TRACK_INFO_Json = gson.toJson(MeterSendInfo); //将对象转换为Json数据

四、Activity与Service的跳转

1.住Activity跳转至Service

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        reqPermission();
        Intent service = new Intent(MainActivity.this, MySocketServer.class); //穿件一个跳转往Service的Intent 
        MainActivity.this.startService(service);  //启动这个Service

 }
    public void onResume() {
        super.onResume();
        finish();
    }
}

2.需要注意的点

1.组件信息(四大组件)是需要注册到AndroidMainfest.xml文件中的:

        <service
            android:name=".MySocketServer"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MySocketServer" />
                <category android:name="android.intent.category.MySocketServer" />
            </intent-filter>
        </service>

备注:我就忘了在AndroidMainfest.xml中添加组件信息导致跳转失败的

五、其他一些记录点:

1.关于修饰符相关:

1.private表示私有的,用在变量或者方法上表示不被类的外部调用
2.final修饰变量表示这个是常量
3.static修饰变量表示类属性,修饰方法表示是类方法,修饰类时表示静态类,在定义类时已经分配的具体空间了,可以通过类点出属性和方法以及类
备注:在申明类的内部类时使用static进行描述,防止外部访问这个内部类时无法访问

2.关于类型定义和实例创建:

private Myinfo myinfo; //创建一个Myinfo类型
private Myinfo myinfo = new Myinfo(); //创建一个Myinfo类型并实例他

备注:没有实例化只是创建类型对象,直接调用就会报空指针,由于自己习惯性写python,刚开始总是忘了这个问题,这里记一下,防止后面忘记

3.创建没有Activity的程序:

在AndroidMainfest.xml中的Activity中添加:
android:theme=“@android:style/Theme.NoDisplay”

<activity
            android:name=".MainActivity"
            android:exported="true"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.NoDisplay">

注:因为AndroidMainfest.xml中用的是Activity,故创建MainActivity 时只能继承自Activity

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        reqPermission();
        Intent service = new Intent(MainActivity.this, MySocketServer.class);
        MainActivity.this.startService(service);

 }

4.Handler实现子线程和主线程的数据通讯

1.创建Hander实例:

代码如下(示例):

    private Handler mhandler = new Handler() {
        @Override
        public void handleMessage(@NonNull Message msg) {
            switch (msg.what){
                case connect_state:
                    System.out.println("connect_state");
                    TextEdit.setText(msg.obj.toString());
                    break;
        }
    };

2.子线程创建Message并且发送给主线程:

代码如下(示例):

                Message message1 = mhandler.obtainMessage();//子线程创建message1 对象
                message1.what = connect_state;		//给message1的what属性赋值,用于判断谁发送的
                message1.obj = "--等待客户端连接--"+"\n"; //传入需要发送方的数据,对象不定
                mhandler.sendMessage(message1);  //发给主线程

备注:主线程和子线程同在一个进程中,所以主线程想要和子进程进行通讯时,可以调用同一个handle进行处理


写在结尾

我是一名车载集成测试开发工程师,希望能和志同道合的朋友一起相互学习进步

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值