安卓杂项问题记录
`
文章目录
前言
最近编写安卓测试应用有一些杂项需要记录下,写篇安卓杂项问题记录
提示:以下是本篇文章正文内容,下面案例可供参考
一、如何创建一个线程
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进行处理
写在结尾
我是一名车载集成测试开发工程师,希望能和志同道合的朋友一起相互学习进步