一、排坑
AndroidStudio非法字符: '\ufeff'
将文件格式改为以UTF-8无BOM格式编码
Sublime Text 保存时 CodeFormatter file is scratch
ctrl+shift+p打开命令面板,remove package
Android Studio内中文乱码
一、sublime打开并保存
二、
选择UTF-8
二、目录结构
- Activity:应用被打开时显示的界面
- src:项目代码
- R.java:项目中所有资源文件的资源id
- Android.jar:Android的jar包,导入此包方可使用Android的api
- libs:导入第三方jar包
- assets:存放资源文件,比方说mp3、视频文件
- bin:存放编译打包后的文件
- res:存放资源文件,存放在此文件夹下的所有资源文件都会生成资源id
- drawable:存放图片资源
- layout:存放布局文件,把布局文件通过资源id指定给activity,界面就会显示出该布局文件定义的布局
- menu:定义菜单的样式
- Strings.xml:存放字符串资源,每个资源都会有一个资源id
三、AndroidManifest.xml
-
指定应用的包名
package="com.itheima.helloworld"
- data/data/com.itheima.helloworld(上面代码指定的包名)
- 应用生成的文件都会存放在此路径下
-
Android的四大组件在使用前全部需要在清单文件中配置
- Application的配置对整个应用生效
- activity的配置对该activity生效
四、DDMS
- Dalvik debug monitor service
- Dalvik调试监控服务
五、常用的adb指令
Android debug bridge:安卓调试桥
- adb start-server:启动adb进程
- adb kill-server:杀死adb进程
- adb devices:查看当前与开发环境连接的设备,此命令也可以启动adb进程
- adb install XXX.apk:往模拟器安装apk
- adb uninstall 包名:删除模拟器中的应用
- adb shell:进入linux命令行
- ps:查看运行进程
- ls:查看当前目录下的文件结构
- netstat -ano:查看占用端口的进程
六、运行时权限
AndroidManifest.xml文件
<uses-permission android:name="android.permission.CALL_PHONE"/>
发短信案例
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button bt=(Button)findViewById(R.id.send); bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.SEND_SMS)!= PackageManager.PERMISSION_GRANTED){ //申请权限 ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.SEND_SMS},1); }else { //把动作告诉系统 send(); } } }); } public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode){ case 1: //发短信权限回调 if (grantResults[0]==PackageManager.PERMISSION_GRANTED){ send(); }else { //提示用户权限未被授予 Log.d("MainActivity","未授予发短信权限"); } break; } } public void send(){ //拿到用户输入的号码和内容 EditText et_phone = (EditText) findViewById(R.id.et_phone); EditText et_content = (EditText) findViewById(R.id.et_content); String phone = et_phone.getText().toString(); String content = et_content.getText().toString(); //1.获取短信管理器 SmsManager sm = SmsManager.getDefault(); //2.切割短信,把长短信分成若干个小短信 ArrayList<String> smss = sm.divideMessage(content); //3.for循环把集合中所有短信全部发出去 for (String string : smss) { sm.sendTextMessage(phone, null, string, null, null); } }
危险权限
表格中每个危险权限都属于一个权限组,我们在进行运行时权限处理时使用的是权限名,但是用户一旦同意授权了,那么该权限所对应的权限组中所有其他的权限也会同时被授权。
权限组名 | 权限名称 |
---|---|
CALENDAR(日历) | READ_CALENDAR |
WRITE_CALENDAR | |
CAMERA(相机) | CAMERA |
CONTACTS(联系人) | READ_CONTACTS |
WRITE_CONTACTS | |
GET_ACCOUNTS | |
LOCATION(位置) | ACCESS_FINE_LOCATION |
ACCESS_COARSE_LOCATION | |
MICROPHONE(麦克风) | RECORD_AUDIO |
PHONE(手机) | READ_PHONE_STATE |
CALL_PHONE | |
ERAD_CALL_LOG | |
WRITE_CALL_LOG | |
ADD_VOICEMAIL | |
USE_SIP | |
PROCESS_OUTGOING_CALLS | |
SENSORS(传感器) | BODY_SENSORS |
SMS(短信) | SEND_SMS |
RECEIVE_SMS | |
READ_SMS | |
RECEIVE_WAP_PUSH | |
RECEIVE_MMS | |
STORAGE(存储卡) | READ_EXTERNAL_STORAGE |
WRITE_EXTERNAL_STORAGE |
七、点击事件的四种写法
第一种
-
定义一个MyListener实现onClickListener接口
Button bt1 = (Button) findViewById(R.id.bt1); bt1.setOnClickListener(new MyListener());
第二种
-
定义一个匿名内部类实现onClickListener接口
Button bt2 = (Button) findViewById(R.id.bt2); bt2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { System.out.println("第二种"); } });
第三种
-
让当前activity实现onClickListener接口
Button bt3 = (Button) findViewById(R.id.bt3); bt3.setOnClickListener(this);
第四种
-
给Button节点设置onClick属性,
android:onClick="click"
-
然后在activity中定义跟该属性值同名的方法
public void click(View v){ System.out.println("第四种"); }
八、安卓版本
API等级1:Android 1.0
API等级2:Android 1.1 Petit Four
API等级3:Android 1.5 Cupcake
API等级4:Android 1.6 Donut
API等级5:Android 2.0 Éclair
API等级6:Android 2.0.1 Éclair
API等级7:Android 2.1 Éclair
API等级8:Android 2.2 - 2.2.3 Froyo
API等级9:Android 2.3 - 2.3.2 Gingerbread
API等级10:Android 2.3.3-2.3.7 Gingerbread
API等级11:Android 3.0 Honeycomb
API等级12:Android 3.1 Honeycomb
API等级13:Android 3.2 Honeycomb
API等级14:Android 4.0 - 4.0.2 Ice Cream Sandwich
API等级15:Android 4.0.3 - 4.0.4 Ice Cream Sandwich
API等级16:Android 4.1 Jelly Bean
API等级17:Android 4.2 Jelly Bean
API等级18:Android 4.3 Jelly Bean
API等级19:Android 4.4 KitKat
API等级20:Android 4.4W
API等级21:Android 5.0 Lollipop
API等级22:Android 5.1 Lollipop
API等级23:Android 6.0 Marshmallow
API等级24:Android 7.0 Nougat
API等级25:Android 7.1 Nougat
API等级26:Android 8.0 Oreo
API等级27:Android 8.1 Oreo
API等级28:Android 9.0 Pie
参考链接:https://www.jianshu.com/p/b9665348a694