为了账号安全,请及时绑定邮箱和手机立即绑定

Android攻城狮的第二门课(第3季)

难度初级
时长 6小时 0分
学习人数
综合评分9.57
162人评价 查看评价
9.9 内容实用
9.5 简洁易懂
9.3 逻辑清晰
  • 有序广播 @class BC1 abortBroadcast();//拦截广播继续传播 Bundle bundle=new Bundle(); bundle.putString("test", "广播处理的数据"); setResultExtras(bundle); @class BC2 Bundle bundle=getResultExtras(true); String s2=bundle.getString("test"); Log.i("TAG", "处理后的数据:"+s2); @doClick() case R.id.button2: Intent intent2=new Intent(); intent2.putExtra("msg", "这是一条有序广播!"); intent2.setAction("BC_One"); sendOrderedBroadcast(intent2, null);//第二个参数:权限 break; 传递数据:Bundle VS Intent @Bundle 存储: Bundle bundle=new Bundle(); bundle.putString("代号1", "传递数据1"); setResultExtras(bundle); 读取: String s1=bundle.getString("代号1"); @Intent 存储: Intent intent2=new Intent(); intent2.putExtra("代号2", "传递数据2"); //省略准备传递的代码... 读取: String s2=intent.getStringExtra("代号2");
    查看全部
  • 普通广播 @发送广播: public void doClick(View v){ switch (v.getId()) { case R.id.button1: Intent intent=new Intent(); intent.putExtra("msg", "这是一条普通广播!"); intent.setAction("BC_One");//一般设置为包名 sendBroadcast(intent); break; } } @接收广播: public class BC1 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String s=intent.getStringExtra("msg"); Log.i("TAG", "R1收到消息:"+s); } } @动态注册(Java代码注册)(弊端:程序不启动就相当于动态注册作废): onCreate{ IntentFilter intentFilter=new IntentFilter("BC_One"); intentFilter.setPriority(100); BC2 bc2=new BC2(); registerReceiver(bc2, intentFilter); } @静态注册(AndroidManifest.xml) <application... <receiver android:name="com.example.demobroadcastreceiver.BC1"> <intent-filter android:priority="200"> <action android:name="BC_One"></action> </intent-filter> </receiver> </application> 注意:动态优先于静态,priority值越大越优先(若A为动态且priority==1,B为静动态且priority==2;则还是A优先)
    查看全部
  • @Broadcast和BroadcastReceiver 1. 概念: 1)Broadcast一种广泛运用的在应用程序之间传输信息的机制 2)BroadcastReceiver,对发送出来的广播进行过滤接收并响应的一类组件,它可以用来接收来自系统和应用中的广播 3)用途 开机完成后系统会产生一条广播 网络状态改变时系统会产生一条广播 电量改变时系统产生一条广播 2. 为什么要设计广播 大大减少开发工作量和周期(程序员不需要关注底层如何实现,只需要掌握BroadcastReceiver就行了) 3. 使用方法: 1)发送: 将信息装入一个Intent对象,通过调用相应的方法将Intent对象以广播方式发送出去 sendBroadcast()\sendOrderBroadcast()\sendStickyBroadcast() 2)接收: 当Intent发送之后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,匹配成功的话就会调用BroadcastReceiver的onReceive()方法。 所以定义一个BroadcastReceiver的时候都需要实现onReceive()方法 4. 生命周期 生命周期只有10s左右,每次广播来的时候都会创建BroadcastReceiver对象,并调用onReceive()方法。 所以不能在onReceive()做一些耗时操作,可以通过发送Intent给service,由service完成耗时操作。 注意子线程也不行 5. 广播的种类 注意有序广播是可以终止的,且接收者可以篡改内容。
    查看全部
  • //根据联系人的ID查询联系人的邮箱地址 Cursor c2=cr.query(Email.CONTENT_URI, new String[]{Email.DATA,Email.TYPE}, Email.CONTACT_ID+"="+id, null, null); if(c2!=null){ while(c2.moveToNext()){ int type=c2.getInt(c2.getColumnIndex(Email.TYPE)); String data=c2.getString(c2.getColumnIndex(Email.DATA)); if(type==Email.TYPE_WORK){ Log.i("TAG", "工作邮箱:"+data); } } c2.close(); } } c.close(); } } <uses-permission android:name="android.permission.READ_CONTACTS"/>
    查看全部
  • @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ContentResolver cr=getContentResolver(); //向联系人中插入一行数据 ContentValues values=new ContentValues(); Uri uri=cr.insert(RawContacts.CONTENT_URI, values); Long raw_contact_id=ContentUris.parseId(uri); //插入人名 values.put(StructuredName.RAW_CONTACT_ID, raw_contact_id); values.put(StructuredName.DISPLAY_NAME, "慕课网"); values.put(StructuredName.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); uri=cr.insert(Data.CONTENT_URI, values); //插入电话信息 values.clear(); values.put(Phone.RAW_CONTACT_ID, raw_contact_id); values.put(Phone.NUMBER, "15555221010"); values.put(Phone.MIMETYPE, Phone.CONTENT_ITEM_TYPE); uri=cr.insert(Data.CONTENT_URI, values); }
    查看全部
  • SharedPreferences: (1)轻型数据存储方式 (2)本质基于XML文件存储key-value键值对数据 (3)通常用来存储一些简单的配置信息
    查看全部
  • Android 工程师 数据篇----SharedPreferences Android的四种数据存储方式: (1)SharedPreferences (2)SQLite (3)Content Provider (4)File
    查看全部
  • SQLite数据类型
    查看全部
  • SQLite
    查看全部
  • onCreate(){ ContentResolver cr = getContentResolver(); Cursor c=cr.query(Contacts.CONTENT_URI, new String[]{Contacts._ID,Contacts.DISPLAY_NAME}, null, null, null); if(c!=null){ while(c.moveToNext()){ int id=c.getInt(c.getColumnIndex("_id")); String name=c.getString(c.getColumnIndex("display_name")); Log.i("TAG", "_id:"+id); Log.i("TAG", "name:"+name); Cursor c1 = cr.query(Phone.CONTENT_URI, new String[] {Phone.NUMBER, Phone.TYPE },Phone.CONTACT_ID + "=" + id, null, null); // 根据联系人ID查询出联系人的电话号码 if (c1 != null) { while (c1.moveToNext()) { int type = c1.getInt(c1.getColumnIndex(Phone.TYPE)); if (type == Phone.TYPE_HOME) { Log.i("info","家庭电话:"+ c1.getString(c1.getColumnIndex(Phone.NUMBER))); } else if (type == Phone.TYPE_MOBILE) { Log.i("info","手机:"+ c1.getString(c1.getColumnIndex(Phone.NUMBER))); } } c1.close(); }
    查看全部
  • 使用ContentResolver操作ContentProvide中的数据 --当外部引用需要对ContentProvide中的数据进行增删改查时,可以使用ContentResolver类来完成 ContentReslover类提供了与ContentProvide类相同签名的四个方法
    查看全部
  • public class MyContentProvider extends ContentProvider { public MyContentProvider() { // TODO 自动生成的构造函数存根 } @Override//在ContentProvider创建后被调用 public boolean onCreate() { // TODO 自动生成的方法存根 return false; } @Override//根据Uri查询selection指定的条件所匹配的全部记录;并且可以指定查询哪些列以什么方式(order)排序 public Cursor query(...) { // TODO 自动生成的方法存根 return null; } /** *返回当前Uri的MIME类型。 *如果该Uri对应的数据包括多条记录,则MIME类型字符串以“vnd.android.dir/开头”; *如果该Uri对应的数据只有一条记录,则MIME类型字符串以“vnd.android.cursor.item/开头”。 */ @Override public String getType(Uri uri) { // TODO 自动生成的方法存根 return null; } @Override//根据Uri插入Values对应的数据 public Uri insert(...) { // TODO 自动生成的方法存根 return null; } @Override//根据Uri删除selection指定的条件所匹配的全部记录 public int delete(...) { // TODO 自动生成的方法存根 return 0; } @Override//根据Uri修改selection指定的条件所匹配的全部记录 public int update(...) { // TODO 自动生成的方法存根 return 0; } }
    查看全部
  • btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { writeFile(et.getText().toString()); tv.setText(readFile()); } }); } //写入文件内容 public void writeFile(String content){ try { FileOutputStream fos = openFileOutput("temp.txt", MODE_PRIVATE);//若文件不存在,自动创建 fos.write(content.getBytes()); fos.close(); } catch (FileNotFoundException e) { ... } } //读取文件内容 public String readFile(){ String content=""; try { FileInputStream fis=openFileInput("temp.txt"); ByteArrayOutputStream baos=new ByteArrayOutputStream();//可以捕获内存缓冲区的数据,转换成字节数组 byte[] buffer=new byte[1024]; int len=0; while((len=fis.read(buffer))!=-1){ baos.write(buffer,0,len); } content=baos.toString(); fis.close(); baos.close(); } catch (FileNotFoundException e) { ... } return content; }
    查看全部
    0 采集 收起 来源:文件操作案例

    2018-03-22

  • File几种操作权限 MODE_PRIVATE--私有数据,只能被应用本身访问,在该模式下写入的内容会覆盖源文件的内容 MODE_APPEND--检测文件是否存在,如果有就网文件的追加数据,否则就创建新文件 MODE_WORLD_READABLE--该文件可以被其他应用读取 MODE_WORLD_WRITEABLE--该文件可以被其他应用写入
    查看全部
    0 采集 收起 来源:File类方法介绍

    2016-03-15

  • onCreate(){ /*File file=new File("/mnt/sdcard/test"); if(!file.exists()){ try { file.createNewFile(); Toast...; } catch (IOException e) { e.printStackTrace(); } }else{ Toast...; }*/ //file.delete(); //File file; //这个目录是当前APP默认的数据存储目录 //file=this.getFilesDir(); //这个目录是当前APP默认的缓存文件的存放位置。把一些不是很重要的文件在此处创建、使用;如果手机内存不足时,系统会自动删除APP的cache目录的数据 //file=this.getCacheDir(); // /data/data/<包名>/app_自定义名,如:app_imooc //file=this.getDir("imooc", MODE_PRIVATE); //可以得到外部的存储位置,该位置的数据跟内置的使用是一样的;如果APP卸载了,这里面的数据也会自动清除掉 //file=this.getExternalFilesDir(String type); //file=this.getExternalCacheDir(); //如果开发者不遵守这样的规则,不把数据放入“/data/data/<包名>”或“/mnt/sdcard/Android/data/<包名>”;则APP卸载之后,数据将不会自动清楚掉,将会造成所谓的数据垃圾; //对于残留垃圾而言,但是如果觉得数据很重要,下次安装可以保留,则可以不遵守这样的规则。 //Log.i("TAG", file.toString()); }
    查看全部
    0 采集 收起 来源:File类方法介绍

    2018-03-22

举报

0/150
提交
取消
课程须知
本课程是Android开发课程的中后期部分,学习之前要求对一些知识点有一定的了解: 1、已经掌握了Java基础 2、已经熟悉或者了解Android中的监听事件原理 3、已经熟悉或者了解一种以上的数据库,并掌握基本的SQL语句
老师告诉你能学到什么?
1、初步掌握Android手势识别的原理以及实际使用 2、初步掌握Android的数据存储方式 3、深度了解Android中的组件 4、熟悉了解Android常用的系统服务并对服务的使用有新的认识

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!