安卓day25快速入门 目录结构 清单 DDMS adb 危险权限 发短信 点击事件 安卓版本...

一、排坑

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

 

转载于:https://www.cnblogs.com/index42/p/10436661.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值