Android基础笔记二

1.

Android组件之BroadcastReceiver

是一个专注于接收广播通知信息,并作出对应处理的组件。很多广播是源自于系统代码的——比如,通知临时区改变,电池电量低,拍摄了一张照片或用户改变了语言选项。


静态注册广播事件。

Step1:建立自己的广播类,

public class MyBC extends BroadcastReceiver {

	public static final String ACTION="com.example.l004usingbc.intent.action.MyBC";
	@Override
	public void onReceive(Context arg0, Intent arg1) {
		// TODO Auto-generated method stub
		System.out.println("onRecive, data = "+arg1.getStringExtra("txt"));
	}

}

当接收到广播的信息后,在自己建立的类会自动调用onReceive()方法。

Step2:在AndroidMainfest.xml中注册自己建立的类

<receiver android:name="MyBC"></receiver>

Step3:在MainActivity中的onCreate()方法中,为触发广播的按钮添加监听事件。

btnSendBroadCast.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				Intent i = new Intent(MainActivity.this, MyBC.class);
				/*Intent i = new Intent(MyBC.ACTION);
				i.putExtra("txt", "hello suichen");
				sendBroadcast(i);*/
			}
		});
    }

    private final MyBC mybc = new MyBC();

便完成了静态的注册。


动态注册和接触注册。

Step1完全相同。在Step2中注释掉在AndroidMainfest.xml添加的 

<receiver android:name="MyBC"></receiver>

<activity
            android:name="com.example.l004usingbc.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

在MainActivity中的代码如下:

 btnRegBCR.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				registerReceiver(mybc, new IntentFilter(MyBC.ACTION));
			}
		});
        
        btnUnregBCR.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				unregisterReceiver(mybc);
			}
		});
        
        btnSendBroadCast.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				//Intent i = new Intent(MainActivity.this, MyBC.class);
				Intent i = new Intent(MyBC.ACTION);
				i.putExtra("txt", "hello suichen");
				sendBroadcast(i);
			}
		});
    }

 private final MyBC mybc = new MyBC();

在这种动态的方式中,只有注册了BroadcastReciver,再按发送信息,MyBC才能收到发来的信息。


Android组件之contentprovider.

当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享数据。使用ContentProvider共享数据的好处是统一了数据访问方式。

当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询时,可以使用ContentResolver来完成。要获取ContentResolver对象,可以使用Activity提供的getContentResolver()方法。ContentResolver使用insert、delete、update、query方法,来操作数据。


protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
     Cursor c = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
     
     while(c.moveToNext()) {
    	 System.out.println(">>>>>>>"+c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
     }
    }

要想能获取到电话薄中联系人的姓名,还需要在AndroidManifest.xml配置permission。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值