-
@有序广播 @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");查看全部
-
广播的用法一:<br> (1)在按钮的监听事件处理方法中创建Intent对象,用Intent对象的putExtra("msg","这是一条普通广播");向Intent对象中加入消息字符串,并用setAction("BC_One")指定广播名。<br> (2)用sendBroadcast(Intent)发送广播消息Intent对象<br> (3)编写java文件,实现BroadcastReceiver抽象类的onReceive() (4)在AndroidManifest.xml文件中注册广播接收者,名字为setAction("BC_One")方法指定的广播名查看全部
-
(1)SQLite数据库简介: SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎,它支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行。 -----支持高达2TB大小的数据库 -----以单个文件的形式存在 -----以B-Tree的数据结构形式存储在磁盘 (2)SQLite特点主要包括: 1.轻量级 一个动态库、单文件 2.独立性 没有依赖、无须安装 3.隔离性 全部在一个文件夹中 4.跨平台 支持众多操作系统 5.多语言接口 支持众多编程语言 6.安全性 事务 (3)关于事务处理的安全性: -通过数据库上的独占性和共享锁来实现独立事务处理 -多个进程可以同一时间从同一个数据库读取数据,但只有一个可以写入数据。 (4)SQLite的数据类型: -SQLite支持NULL、INTEGER、REAL、TEXT、BLOB数据类型 -依次代表:空值、整型值,浮点值,字符串值,二进制对象 (5)动态数据类型(弱引用) 当某个值插入到数据库时,SQLite会检查他的数据类型,如果该类型与关联的列类型不匹配,SQLite就会尝试将该值转换成该列的类型,如果不能转换,该值将作为本身的类型存储。 (6)使用须知: 1.由于资源占用少、性能良好和零管理成本,嵌入式数据库有了他的用武之地。例如Android、IOS 2.没有可用于SQLite的网络服务器、只能通过网络共享可能存在文件锁定或者性能问题。 3.只提供数据库级的锁定。 4.没有用户账户概念,而是根据文件系统确定所有数据库的权限查看全部
-
发送广播: Intent intent = new Intent() intent.putExtra("msg","这是普通广播") Intent.setAction("BC_One");//确保Intent的唯一性 sendBroadcast(intent) //发送广播 接收广播: 1.继承BroadcastReceiver,实现其方法onReceiver() String s=intent.getStringExtra("msg"); System.out.println("接收到消息"+s); abortBroadcast();//截断广播的方法,普通广播无法截断 清单文件(静态注册): <receiver android:name="包名加类名"> <intent-filter android:proprity="100"> //设置广播优先级,值为-1000~1000 <action android:name="包名.类名"/> </intent-filter> </receiver> 动态注册方法: IntentFilter intentfilter=new IntentFilter("Broadcast_one");//设置过滤 MyBroadcastReceiver2 receiver2 = new MyBroadcastReceiver2(); registerReceiver(receiver2, intentFilter); 注意: 1)动态注册的BroadcastReceiver优先级要比静态注册的高 2)动态注册有个弊端:如果当前java的程序结束了,动态注册的接收者将不再能收到广播。所以类似于短信拦截的BroadcastReceiver不能用动态注册。查看全部
-
getFileDir() 这个目录是当前应用程序默认的数据存储目录 getCacheDir() 这个目录是当前应用程序默认的缓存文件存放位置 getExternalFileDir() 外部缓存存储目录 该位置数据跟内置使用一样 如果app卸载了,里面数据也会自动清除查看全部
-
values.put("sex","女"); db.update("studb",values,"_id>?",new String[]{"3"});//将id>3的人的性别改为女 db.delete("studb","name like ?",new String[]{"%丰%"});//删除名字中带有“丰”的人 Cursor c =db.query("studb",null,"_id>?",new String[]{"0"},null,null,"name"); if(c!=null){ String[] columns=c.getColumnNames(); while(c.moveToNext()){ for(String columnName:columns){ log.i("info",c.getString(c.getColumnIndex(ColumnName))); } } c.close(); } db.close();查看全部
-
广播接收器如何接收广播:<br> (1)Intent发送出去以后,注册了的BroadcastReceiver会检查IntentFilter是否与Intent匹配<br> (2)匹配则调用BroadcastReceiver的onReceive()方法来对广播信息Intent做出处理 广播如何发送: (1)把信息装入一个Intent对象(如Action、Category) (2)调用相应方法(如sendBroadcast()、sendOrderBroadcast()、sendStickyBroadcast())将Intent对象以广播方式发送出去查看全部
-
使用方法: 1.发送: -把信息装入一个Intent对象(如Action,Category) -通过调用相应的方法将Intent对象以广播方式发送出去 sendBroadcast() sendOrderBroadcast() sendStickyBroadcast() 2.接收: 当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配就会调用BroadcastReceiver的onReceive()方法,所以当我们定义一个BroadcastReceiver的时候,都需要实现onReceive()的方法 注意: BroadcastReceiver需要注册: 静态注册和代码注册,BroadcastReceiver生命周期只有10秒钟左右 在BroadcastReceiver里不能做一些比较耗时的操作 应该通过发送Intent给Service,由Service来完成 不能使用子线程查看全部
-
1.Broadcast广播 广泛运用在应用程序之间传输信息的机制 2.BroadcastReceiver广播接收者 对广播进行过滤接收并响应的一类组件,就是用来接收来自系统和应用中的广播 3.用途 开机完成后系统会产生广播 网络状态改变时系统会产生广播 电池电量改变时,系统会产生广播 Android为什么要这样设计? 大大减少开发工作量和开发周期 作为应用开发者只需要掌握BroadcastReceiver 使用方法: 发送: 把信息装入一个Intent对象(如Action,Category) 通过调用相应的方法将Intent对象以广播方式发送 sendBroadcast() sendOrderBroadcast() sendStickyBroadcast() 接收: 当Intent发送后,所有已经注册的BroadcastReceiver会检查注册时IntentFilter是否与发送的Intent相匹配,匹配成功就会调用BroadcastReceiver的onReceive()方法。 所以定义一个BroadcastReceiver时都需要实现onReceive()方法 注意: BroadcastReceiver需要注册 静态注册 代码注册 注意!! BroadcastReceiver生命周期只有10秒左右 在BroadcastReceiver里不能做耗时操作 应该通过发送Intent给Service,由Service来完成 不能使用子线程 广播的种类: 普通广播Normal broadcasts -所有监听该广播的广播接受者都可以间听到该广播 有序广播Oraered broadcasts -按照接受者的优先级顺序接收广播,优先级别在intent-filter中的priority中声明,-1000到1000间,值越大优先级越高.可终止光比意图的继续传播,接收者可以篡改内容. 异步广播(滞留广播) -不能将处理结果传给下一个接受者,无法终止广播 普通广播贴点: 同级别接收先后是随机的(无序) 级别低的后收到广播 接收器不能截断广播继续传播也不能处理广播 同级别动态注册高于静态注册 有序广播特点: 同级别接收顺序时随机 能截断广播的继续传播,高级别广播接收器收到该广播后,可以决定把该广播是否截断 接收器能截断广播的继续传播,也能处理广播 同级别动态注册高于静态注册查看全部
-
查电话号码,需要先查出人名和对应的id,然后才能根据人的id把所有人的号码查出来再得到一个游标对象进行处理(游标套游标),例子如下:下面的id就是联系人的id,查询联系人的id是查询的联系人的那个表。而查询电话号码是另一个表了,但是通过联系人id和联系人表连在一起的。 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(); }查看全部
-
何为Uri? Uri是指通用资源标识符 UriMatcher类: UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); UriMatcher.NO_MATCH表示不匹配任何路径的返回码 matcher.addURI("com.example.app.provider","table",1); 往UriMatcher类里添加一个拼凑的Uri UriMatcher为一个Uri的容器,容器里面包含着我们即将可以能要操作的Uri 如果通过match()方法匹配成功就返回code值 matcher.match(uri) 首先与找通过addURI()方法添加进来的Uri匹配 匹配成功则返回设置的code值,反之,返回一个UriMatcher.NO_MATCH常量(-1)查看全部
-
何为Uri? -Uri是指通用资源标志符 content://com.imooc.provider/music/# content://---前缀表明数据受控于一个内容提供者.它从不修改,也就是schema com.imooc.provider---是指在AndroidMainfest.xml中我们注册的provider中的authorities属性所对应的唯一的 /music---具体操作于哪个条目 /#---具体指定到哪个条目下的那条记录(#标识通配符) UriMatcher类 UriMatcher matcher=new UriMatcher(UriMatcher.NO_MATCH); UriMatcher.NO_MATCH 表示不匹配任何路径的返回码 matcher.addURI("com.imooc.provider","music",1); 往UriMatcher类里面添加一个拼凑的Uri UriMatcher为一个Uri的容器,容器里面包含着我们即将可能要操作的Uri 如果通过match()方法匹配成功就返回code值 matcher.match(uri) 受限与通过addURI()方法添加进来的Uri匹配 匹配成功则返回设置的code值,反之,返回一个UriMatcher.NO_MATCH常量(-1) ContentResolver: -使用ContentResolver操作ContentProvider中的数据: 当外部应用需要对ContentProvider中的数据进行添加,删除,修改和查询操作时,可以使用ContentResolver类来完成 使用Activity提供的getContentResolver()方法获取ContentResolver对象 ContentResolver类提供了与ContentProvider类相同签名的四个方法查看全部
-
创建一个类继承抽象类contentprovider oncreat(在创建后被调用) delet(根据uri删除selection指定的条件所匹配全部记录) insert(根据uri插入values对应的数据) update(根据uri修改selection指定的条件所匹配的全部记录) query(更加uri查询出selection指定的条件所匹配的全部记录,并且可以指定查询哪些列以什么方式排序) getType(返回当前uri的MIME类型,如果uri对应数据包括多条记录那么MIME类型字符串就是以vnd.android.dir/开头 如果只对应一条记录就是vnd.android.cursor.item/开头)查看全部
-
数据储存方式: -Shared Preferences -文件储存 -SQLite -其他还有网络存储等 以上不可完成的任务 -都只能在单独的一个应用程序之中达到一个数据的共享 如何理解ContentProvider? 数据ContentProvider<-----增,删,改,查(通过Uri访问)其他程序等等 如何实现ContentProvider? 1继承抽象类ContentProvider实现一系列针对数据的增,删,改,查等方法; 2需在AndroidMainfest.xml中完成对ContentProvider的注册. <provider android:name="com.imooc.MusicProvider" android:authorities="com.provider.music"> </provider> 注:注册authorities属性值时全局唯一的查看全部
-
当应用程序在安装时系统就会分配给它一个userid,当该应用取访问其他资源比如文件的时候,就需要userid匹配.默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data/<包名>/files),其他程序无法访问.除非在创建时指定了MODE_WORLD_WRITEABLE或者MODE_WORLD_READABLE查看全部
举报
0/150
提交
取消