自定义broadcastReceiver广播基础demo介绍

当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。
创建步骤:
    1)创建类继承ContentProvider父类;
    2)定义public static final的Uri类型的类常量,为其指定一个唯一的字符串值,最好是以类的全名称。如:
public static final Uri CONTENT_URI =         Uri.parse( "content://com.google.android.MyContentProvider");
    3)定义要返回给客户端的数据列名。如果使用Android数据库,必须定义_id的列,用来表示每条记录的唯一性。
    4)创建数据存储系统。大多数Content Provider使用Android文件系统或SQLite数据库来保持数据。
    5)声明public static String型的变量,指定要从游标处返回的数据列。
    6)使用ContentResover().notifyChange()方法来通知监听器关于数据更新的信息。
    7)在AndroidManifest.xml使用<provider>对该ContentProvider进行配置。

新建项目

新建layout布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity2" >

<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/main2_bt1"
        android:text="保存" />
    
      <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/main2_bt2"
        android:text="取出" />

</LinearLayout>

新建java类的Util

package com.example.android_lession8_4;

import android.net.Uri;
import android.provider.BaseColumns;

//该工具包用于指明用户自定义的cp 的uri和对应字段的名称
public class MyUtil {

// 根地址
    public  final static String AUTHORITY="com.zyy.test.MyContentProvider";
    
    
    //BaseColumns默认指明了两个字段_ID _Count  其中id表示标识符,count表示行数
    public static final class User implements BaseColumns{
        
        //指明了cp的uri地址
        public static final Uri CONTENT_URI=Uri.parse("content://"+AUTHORITY);
        
        //cp中的数据项
        public static final String USER_NAME="USER_NAME";
        public static final String USER_PWD="USER_PWD";
        
    }
    
    
}
创建自定义content provider 为了多个app数据共享

package com.example.android_lession8_4;

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.util.Log;

public class MyContentProvider extends ContentProvider {

private  SQLiteDatabase sqlDB;// 数据库库对象
    private   static final String DATABASE_NAME="user.db"; //声明数据库名称
    private   static final  int  DATABASE_VERSION=1; //声明数据库版本号
    private  static final String DATABASE_TABLE="t_User"; //存储的表名
    private MyDataBaseHelper dbhelper;   //数据库帮助类,用来创建数据库并获取相关读写权限

//搭建sqlite操作环境
     private static class MyDataBaseHelper extends SQLiteOpenHelper{

public MyDataBaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            // TODO Auto-generated constructor stub
        }

@Override
        public void onCreate(SQLiteDatabase db) {
        //创建用于存储数据的表
            db.execSQL("Create table "+DATABASE_TABLE+" (_id integer primary key autoincrement,USER_NAME text,USER_PWD text);");    
        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists "+DATABASE_TABLE);
        onCreate(db);
            
        }
     }

@Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        // TODO Auto-generated method stub
        return 0;
    }

@Override
    public String getType(Uri uri) {
        // TODO Auto-generated method stub
        return null;
    }

//保存
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        sqlDB=dbhelper.getWritableDatabase();//获取数据库写对象
        
        //返回受影响行id
        long rowid=sqlDB.insert(DATABASE_TABLE, null, values);
        if(rowid>0){
            //创建对应"表的uri"
         Uri rowUri=ContentUris.appendId(MyUtil.User.CONTENT_URI.buildUpon(), rowid).build();
         Log.d("zyy", "rowuri:"+rowUri.getPath());    
         //通知cp监听器更新(增删改通用)
         getContext().getContentResolver().notifyChange(rowUri, null);
 
         return rowUri;
        }
        throw new SQLException("cp 插入数据失败:"+uri);
        
        
        
    
    }

@Override
    public boolean onCreate() {
    
        //实例化数据库帮助类对象,由他来创建数据库存储表
        dbhelper=new MyDataBaseHelper(getContext());
        return dbhelper==null?false:true;
    }

//取
    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {
        // 获取数据库读对象
        sqlDB=dbhelper.getReadableDatabase();
        //设置sql查询创建者
        SQLiteQueryBuilder sq=new SQLiteQueryBuilder();
        //设置查询表
        sq.setTables(DATABASE_TABLE);
        
        //获取对应的cp在sqlite中查询结果集
       Cursor cursor=sq.query(sqlDB, projection, selection, selectionArgs, null, null, sortOrder);
        
       //后台检测数据变化,如果有变化,则返回变化后的cursor
       cursor.setNotificationUri(getContext().getContentResolver(), uri);
        
        return cursor;
    }

@Override
    public int update(Uri uri, ContentValues values, String selection,
            String[] selectionArgs) {
        // TODO Auto-generated method stub
        return 0;
    }

}
创建activity活动java类

package com.example.android_lession8_4;

import android.os.Bundle;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity2 extends Activity implements OnClickListener{
    private Button bt1,bt2;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_activity2);
        bt1=(Button) findViewById(R.id.main2_bt1);
        bt2=(Button) findViewById(R.id.main2_bt2);
        bt1.setOnClickListener(this);
        bt2.setOnClickListener(this);
        
        
        
    }

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main_activity2, menu);
        return true;
    }

@Override
    public void onClick(View v) {
    switch (v.getId()) {
        case R.id.main2_bt1:
        //存数据
            ContentValues cv=new ContentValues();
            cv.put(MyUtil.User.USER_NAME, "zyy");
            cv.put(MyUtil.User.USER_PWD, "123");
            getApplicationContext().getContentResolver().insert(MyUtil.User.CONTENT_URI, cv);
            Toast.makeText(getApplicationContext(), "添加成功", Toast.LENGTH_LONG).show();
        break;

case R.id.main2_bt2:
             //取数据
             String colums[] =new String[]{MyUtil.User._ID,MyUtil.User.USER_NAME,MyUtil.User.USER_PWD};
             Cursor c=getApplicationContext().getContentResolver().query(MyUtil.User.CONTENT_URI, colums, null, null, null);
             int a=10;
             int id=-1;
             String username=null;
             String userpwd=null;
             
             
             while(c.moveToNext()){
                 id=c.getInt(c.getColumnIndex(MyUtil.User._ID));
                 username=c.getString(c.getColumnIndex(MyUtil.User.USER_NAME));
                 userpwd=c.getString(c.getColumnIndex(MyUtil.User.USER_PWD));
             }
             
             
             Toast.makeText(getApplicationContext(), "id:"+id+" 姓名:"+username+" 密码:"+userpwd, Toast.LENGTH_LONG).show();
             
             
        
        break;
    }
        
        
    }

}

时间: 2024-08-15 21:21:33

自定义broadcastReceiver广播基础demo介绍的相关文章

broadcastReceiver广播基础demo介绍

andriod的BroadcastReceiver介绍 编辑删除 作者:一座城一颗努力的心2016-07-12 00:24分类:默认分类标签: 科技 IT软件 broadcastReceiver开发步骤: 1  创建需要启动的BroadcastReceiver的Intent 2  调用context中的sendBroadcast或者sendOrderedBroadcast()方法来启动指定的广播接受者(BroadcastReceiver) 需要注意的是:当应用程序发出一个boradcastRec

BroadcastReceiver广播接收器基础

BroadcastReceiver 广播接收器 广播接收器,主要是用于app注册一些指定事件的广播接收器,系统在这些事件被触发的时候,会通知到注册的广播接收器,然后广播接收器在onReceive函数中对接收到的通知进行处理:广播接收器的两种注册方式:静态注册:<receiver android:name=".SMSBroadcastReceiver" > <intent-filter> <action android:name="android.

Android组件系列----BroadcastReceiver广播接收器

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3960623.html 联系方式:[email protected] [正文] 一.广播的功能和特征 广播的生命周期很短,经过调用对象-->实现onReceive-->结束,整个过程就结束了.从实现的复杂度和代码量来看,广播无疑是最迷你的Android 组件,实现往往只需几行代码.广播对象被构造出

Android中如何做到自定义的广播只能有指定的app接收

今天没吊事,又去面试了,具体哪家公司就不说了,因为我在之前的blog中注明了那些家公司的名字,结果人家给我私信说我泄露他们的题目,好吧,我错了...其实当我们已经在工作的时候,我们可以在空闲的时间去面一面,因为面试有很多好处的: 第一点:你知道这个公司的具体地址了,以后和朋友说的时候也是有话题的 第二点:这点很重要,看看其他公司的面试题(现在有的公司还在采用笔试题这个环节,真心无语了,题目全是从网上找的,很没有意思,所以我只要见到有笔试题的一律pass,个人感觉面到现在,阿里和滴滴还是不错的,他

Android——BroadcastReceiver 广播 短信拦截

/** * 如何去理解BroadcastReceiver(广播)?   * 其实可以这样想,首先我们要有一个发送广播的“媒体”,在这个例子中,我们暂且用activity组件作为这个媒体,当然以后 * 会用到service,或者随机启动方式来发送广播,这看业务需求来决定. * 在这个例子中,当点击按钮的时候,一条广播就发送了出去,同样用到了意图对象Intent. * 和启动activity和service一样,我们需要为意图对象设置“标记”和“包裹”,它就像个基站,向世界发送信号. * 而对于广播

Android开发——BroadcastReceiver广播的使用

想要了解广播定义及相关原理的可以看下这一篇BroadcastReceiver史上最全面解析 简单地对广播进行分类吧,广播有两个角色,一个是广播发送者,另外一个是广播接收者 广播按照类型分为两种,一种是全局广播,另外一种是本地广播 全局广播的意思就是发出的广播可以被其他任意的应用程序接收,或者可以接收来自其他任意应用程序的广播. 本地广播则是只能在应用程序的内部进行传递的广播,广播接收器也只能接收内部的广播,不能接受其他应用程序的广播 按照广播机制也可以分为两种,标准广播和有序广播 无序广播:所有

Saltstack 基础详细介绍

1.saltstack 基础详细介绍  Saltstack使用Python开发,是一个非常简单易用和轻量级的管理工具.由Master和Minion构成,通过ZeroMQ进行通信    Saltstack的master端监听4505与4506端口,4505为salt的消息发布系统,4506为salt客户端与服务端通信的端口:salt客户端程序不监听端口,客户端启动后,会主动连接master端注册,然后一直保持该TCP连接,master通过这条TCP连接对客户端控制,如果连接断开,master对客户

Android 学习笔记 BroadcastReceiver广播...

PS:不断提升自己,是件好事... 学习内容: 1.BroadcastReceiver的使用.. 2.通过BroadcastReceiver去启动Service... 1.BroadcastReceiver...   广播接收者,用来接收系统和应用中的广播...Android广播机制用的地方还是很多的,比如说:当网络状态发生改变的时候,通过接收这条广播就能及时做出相应的响应,然后完成一些操作..这就是广播的机制...它自身并不实现图形用户界面...只是一个触发性的操作...   使用广播是需要几

view基础知识介绍(二)

view基础知识介绍 View的滑动 View的滑动可以通过三种方式来实现: 通过view本身提供的scrollTo和scrollBy方法 通过动画施加平移效果来实现 通过改变view的LayoutParams使得view重新布局来实现 scrollTo/scrollBy ①. 通过查看view的源码 我们可以发现 scrollBy方法其实也是调用了scrollTo方法来实现的 scrollTo方法是基于所传递参数的绝对位置滑动 而scrollBy是根据所传递参数基于当前未知的滑动 通过源码可知