自定义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;
    }
        
        
    }

}

posted @ 2016-07-12 18:09  风一样人生  阅读(740)  评论(0编辑  收藏  举报