【Android基础】一

一、打电话
1)声明权限:

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

2)隐式跳转到打电话

        Intent intent = new Intent();
        intent.setAction("android.intent.action.CALL");
        intent.setData(Uri.parse("tel:" + number));
        startActivity(intent);

二、发短信
1)声明权限

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

2)使用SmsManager分割短信,发送短信

SmsManager sm = SmsManager.getDefault();
List<String> smss = sm.divideMessage(message);
for (String sms : smss) {
         sm.sendTextMessage(number, null, sms, null, null);        }

3)在Android5.0以后,只有默认短信应用具有发送短信的权限
代码修改默认短信设置

Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);     intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME,myPackageName);
startActivity(intent);

三、布局

  • 线性布局:vertical排列时,内容垂直居中无效,horizonal排列时,内容水平居中无效
  • 表格布局:在根节点声明stretchColumns属性拉伸列;layout_column属性修改列号,layout_span属性指定所占列数
    四、在内存和外存中读写文件
    内部存储空间:
    路径:data/data/packageName
  • RAM内存:运行内存,相当于电脑的内存;
  • ROM内存:存储内存,相当于电脑的硬盘;
  • getFileDir,默认路径data/data/packageName/files
    通常不会通过File类的方式直接读写,而是利用一些封装过的类或函数来操作,比如Context.openFileOutput或Context.openFileInput
  • getCacheDir,默认路径data/data/packageName/cache
        String str = etContent.getText().toString();
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(file);
            fos.write(str.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
if (file.exists()) {
            FileInputStream fis = null;
            try {
                fis = new FileInputStream(file);
                BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
                String str = reader.readLine();
                Toast.makeText(InnerStorage.this, "存储的数据是:" + str, Toast.LENGTH_SHORT).show();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

外部存储空间:
路径:storage/sdcard或者sdcard
SD卡或手机自带存储结构:相当于电脑的移动硬盘
使用API获得存储路径:Environment.getExternalStorageDirectory()
检测sd卡状态:Environment.getExternalStorageState();
Context.getExternalCacheDir()或Environment.getExternalStorageAppCacheDirectory获得基于扩展存储器的应用缓存目录,用于存储运行时产生的大尺寸临时文件,默认路径:/mnt/sdcard/Android/应用包名/data/cache,会随着应用的卸载一并移除
外部存储上的系统规定的图片存储目录:Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
sd卡的几种状态:
- Environment.MEDIA_MOUNTED:sd卡已挂载,可用
- Environment.MEDIA_CHECKING:sd卡准备中
- Environment.MEDIA_UNMOUNTED:sd卡存在但是没有挂载
- Environment.MEDIA_UNKNOWN:sd卡不能识别
- Environment.MEDIA_REMOVED:sd卡不存在
查看sd卡剩余空间大小:

        File path = Environment.getExternalStorageDirectory();
        StatFs statFs = new StatFs(path.getPath());
        long blockSize;
        long totalBlocks;
        long availableBlocks;
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2){
            blockSize = statFs.getBlockSizeLong();
            totalBlocks = statFs.getBlockCountLong();
            availableBlocks = statFs.getAvailableBlocksLong();
        }else {
            blockSize = statFs.getBlockSize();
            totalBlocks = statFs.getBlockCount();
            availableBlocks = statFs.getAvailableBlocks();
        }
        String size = android.text.format.Formatter.formatFileSize(this, availableBlocks * blockSize);

读取asserts文件:getResources().getAsserts().open(“”);
读取raw文件:getResources().openRawResource(“”);
五、文件访问权限
用10个字母表示
d表示文件夹,-表示文件
第一组rwx表示的是文件拥有者对文件的访问权限,
第二组rwx表示的是跟文件拥有者属于同一用户组的用户对文件的权限
第三组rwx表示的是其它用户对文件的权限

FileOutputStream fos = openFileOutput(“info.txt”,MODE_PRIVATE);
//路径已默认为data/data/packageName/files文件夹
六、使用SharedPreference保存数据

默认路径data/data/packageName/shared_prefs

SharedPreferences sp = getSharedPreferences(“info”,MODE_PRIVATE);
Editor editor = sp.edit();
editor.putString(“name”,name);
Editor.commit();

SharedPreferences sp = getSharedPreferences(“info”,MODE_PRIVATE);
String name = sp.getString(“name”);

七、xml文件
使用序列化生成器生成xml文件

    //1.拿到序列化生成器对象
    XmlSerializer xs = Xml.newSerializer();
    //2.初始化
    File file  = new File("sdcard/message.xml");
    try {
        FileOutputStream fos = new FileOutputStream(file);
        xs.setOutput(fos,"utf-8");//指定用什么编码生成xml文件
        //3.开始生成xml文件
        xs.startDocument("utf-8",true);//指定头结点中的encoding属性
        xs.startTag(null,"message");
        for(Message message:messages){
            xs.startTag(null,"body");
            xs.text(message.getBody());
            xs.endTag(null,"body");

            xs.startTag(null,"date");
            xs.text(message.getDate());
            xs.endTag(null,"date");

            xs.startTag(null,"type");
            xs.text(message.getType());
            xs.endTag(null,"type");

            xs.startTag(null,"address");
            xs.text(message.getAddress());
            xs.endTag(null,"address");

        }
        xs.endTag(null,"message");

        xs.endDocument();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

使用Pull解析器解析xml文件

List<City> cityList = null;
InputStream is = getClassLoader().getResourceAsStream("weather.xml");//获取src文件夹下的资源文件
XmlPullParser xp = Xml.newPullParser();
try {
    xp.setInput(is, "utf-8");
    int type = xp.getEventType();//获取当前节点的事件类型
    City city = null;
    while(type != XmlPullParser.END_DOCUMENT) {
        switch (type) {
            case XmlPullParser.START_TAG:
                if("weather".equals(xp.getName())){
                    cityList = new ArrayList<>();
                }else if("city".equals(xp.getName())){
                    city = new City();
                }else if("name".equals(xp.getName())){
                    city.setName(xp.nextText());
                }else if("temp".equals(xp.getName())){
                    city.setTemp(xp.nextText());
                }else if("pm".equals(xp.getName())){
                    city.setPm(xp.nextText());
                }
                break;
            case XmlPullParser.END_TAG:
                if("city".equals(xp.getName())){
                    cityList.add(city);
                }
                break;
        }
    type = xp.next();
    }
} catch (Exception e) {
    e.printStackTrace();
}

八、SQLite数据库
创建数据库需要SQLiteOpenHelper类
在onCreate方法中创建数据表

@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table student(_id integer primary key autoincrement,name char(10))");
    }

getWritableDatabase(),如果数据表不存在,创建表,获取可读可写的数据表,如果表已存在,直接打开

 MyOpenHelper openHelper = new MyOpenHelper(MainActivity.this,"people.db",null,1);
        SQLiteDatabase database = openHelper.getWritableDatabase();
  • 使用executeSQL()方法执行增删改操作;使用rawQuery()方法执行查询操作,返回Cursor对象
  • 使用insert(table,null,contentValues)执行插入操作;delete(table,whereClause,whereArgs)执行删除操作;update(table,contentValues,whereClause,whereArgs)执行更新操作;query(table,columns,selection,selectionArgs,groupBy,having,orderBy,limit)执行查询操作

    事务:
    开启事务: db.beginTransaction();
    设置事务成功:db.setTransactionSuccessful();
    关闭事务,提交事务:db.endTransaction();
    九、对话框
    使用AlertDialog内部类Builder类,进行一系列设置,生成AlertDialog对象并显示。

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(android.R.drawable.btn_default);
builder.setTitle("这是对话框标题");
builder.setMessage("这是对话内容");
//设置确定按钮
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
           Toast.makeText(getApplicationContext(),"点击了确定按钮",Toast.LENGTH_SHORT).show();
          }
   });
//设置取消按钮
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
     @Override
    public void onClick(DialogInterface dialog, int which) {
      Toast.makeText(getApplicationContext(),"点击了取消按钮",Toast.LENGTH_SHORT).show();
            }
        });
//使用创建器生成一个AlertDialog对象
AlertDialog dialog = builder.create();
dialog.show();

单选对话框

final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(android.R.drawable.btn_default);
builder.setTitle("请选择性别");
final String items[] = new String[]{"男","女"};
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(getApplicationContext(),"您的性别是:"+items[which],Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        });
builder.show();

多选对话框

final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setIcon(android.R.drawable.btn_default);
        builder.setTitle("请选择(多选)");
        final String items[] = new String[]{"QQ", "微信", "知乎", "简书"};
        final boolean checkItems[] = new boolean[]{true, true, false, false};
        builder.setMultiChoiceItems(items, checkItems, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                checkItems[which] = isChecked;
            }
        });
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String text = "";
                for (int i = 0; i < 4; i++) {
                    text += checkItems[i] ? items[i] + "." : "";
                }
                Toast.makeText(getApplicationContext(),text,Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        });
        builder.show();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值