Content Provider
来源:互联网 发布:aix 修改ssh端口 编辑:程序博客网 时间:2024/06/09 16:39
1.概念
主要用于不同应用程序之间实现数据共享的功能,允许一个程序访问另一个程序中的数据,并保证被访数据的安全性。一般情况下是使用现有的内容提供器来读取和操作相应程序中的数据。
2.基本用法(自己写的打电话小程序)
<TableLayout 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:stretchColumns="1" tools:context="${relativePackage}.${activityClass}" > <TableRow> <TextView android:layout_height="wrap_content" android:text="电话号码:" /> <EditText android:id="@+id/et_PhoneNumber" android:layout_height="wrap_content" android:hint="请输入电话号码" android:inputType="phone" /> <Button android:id="@+id/btn_ChooseContact" android:layout_height="wrap_content" android:text="选择联系人" /> </TableRow> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="短信内容:" /> <EditText android:id="@+id/et_SMSContent" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入短信内容" /> </LinearLayout> <RelativeLayout> <Button android:id="@+id/btn_CallPhone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="拨打电话" /> <Button android:id="@+id/btn_SendSMS" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:text="发送短信" /> </RelativeLayout></TableLayout>
/MyPhone/res/layout/contact_item.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <TextView android:id="@+id/tv_personName" android:layout_width="150dp" android:layout_height="50dp" android:paddingLeft="30dp" android:text="姓名" android:textSize="18sp" android:gravity="center_vertical" /> <TextView android:id="@+id/tv_phoneNumber" android:layout_width="match_parent" android:layout_height="50dp" android:gravity="center_vertical" android:text="电话号码" android:textSize="18sp" /></LinearLayout>
/MyPhone/res/layout/contact_list.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/lv_ContactList" android:layout_width="wrap_content" android:layout_height="wrap_content" > </ListView></LinearLayout>
/MyPhone/src/com/myphone/app/MainActivity.java
package com.myphone.app;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class MainActivity extends Activity { private EditText et_PhoneNumber, et_SMSContent; private Button btn_CallPhone, btn_SendSMS, btn_ChooseContact; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_PhoneNumber = (EditText) findViewById(R.id.et_PhoneNumber); et_SMSContent = (EditText) findViewById(R.id.et_SMSContent); btn_CallPhone = (Button) findViewById(R.id.btn_CallPhone); btn_SendSMS = (Button) findViewById(R.id.btn_SendSMS); btn_ChooseContact = (Button) findViewById(R.id.btn_ChooseContact); btn_ChooseContact.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, ContactList.class); startActivityForResult(intent, 1); } }); btn_CallPhone.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { new AlertDialog.Builder(MainActivity.this) .setTitle("提示:") .setCancelable(false) .setMessage("确认拨打电话?") .setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:" + et_PhoneNumber.getText())); startActivity(intent); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }).show(); } }); btn_SendSMS.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { new AlertDialog.Builder(MainActivity.this) .setTitle("提示:").setCancelable(true) .setMessage("是否发送短信?") .setPositiveButton("是的", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 创建一个包含电话号的uri数据 Uri data = Uri.parse("smsto:" + et_PhoneNumber.getText()); // 指向短信编辑待发送界面的intent Intent intent = new Intent(Intent.ACTION_SENDTO, data); // 携带短信内容数据 intent.putExtra("sms_body", et_SMSContent.getText().toString()); startActivity(intent); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }).show(); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Bundle bundle; switch (resultCode) { case 1: bundle = data.getExtras(); String number = bundle.getString("number"); et_PhoneNumber.setText(number); break; default: break; } }}
/MyPhone/src/com/myphone/app/Contact.java
package com.myphone.app;public class Contact { private String personName; private String phoneNumber; public String getPhoneNumber() { return phoneNumber; } public String getPersonName() { return personName; } public Contact(String personName, String phoneNumber) { this.personName = personName; this.phoneNumber = phoneNumber; }}
/MyPhone/src/com/myphone/app/ContactAdapter.java
package com.myphone.app;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.TextView;public class ContactAdapter extends ArrayAdapter<Contact> { private int resourceId; public ContactAdapter(Context context, int textViewResourceId, List<Contact> objects) { super(context, textViewResourceId, objects); resourceId = textViewResourceId; } @Override public View getView(int position, View convertView, ViewGroup parent) { Contact contact = getItem(position);// 获取当前项的Contact实例 View view; if (convertView == null) { view = LayoutInflater.from(getContext()).inflate(resourceId, null); } else { view = convertView; } TextView personName = (TextView) view.findViewById(R.id.tv_personName); TextView phoneNumber = (TextView) view.findViewById(R.id.tv_phoneNumber); personName.setText(contact.getPersonName()); phoneNumber.setText(contact.getPhoneNumber()); return view; }}
/MyPhone/src/com/myphone/app/ContactList.java
package com.myphone.app;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.Intent;import android.database.Cursor;import android.os.Bundle;import android.provider.ContactsContract;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import android.widget.Toast;public class ContactList extends Activity { private List<Contact> contactList = new ArrayList<Contact>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.contact_list); ContactAdapter adapter = new ContactAdapter(ContactList.this, R.layout.contact_item, contactList); ListView contactListView = (ListView) findViewById(R.id.lv_ContactList); contactListView.setAdapter(adapter); readContactList(); contactListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Contact contact = contactList.get(position); Toast.makeText(ContactList.this, contact.getPersonName() + "\n" + contact.getPhoneNumber(), Toast.LENGTH_SHORT).show(); Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle.putString("number", contact.getPhoneNumber()); intent.putExtras(bundle); setResult(1, intent); finish(); } }); } // 读取联系人的方法 private void readContactList() { Cursor cursor = null; try { cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); while (cursor.moveToNext()) { // 获取联系人姓名 String displayName = cursor .getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); // 获取联系人手机号 String phoneNumber = cursor .getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); Contact contact = new Contact(displayName, phoneNumber); contactList.add(contact); } } catch (Exception e) { e.printStackTrace(); } finally { if (cursor != null) { cursor.close(); } } }}
0 0
- Content provider
- Content Provider
- content provider
- Content Provider
- Content Provider
- Content Provider
- Content Provider
- Content Provider
- Content Provider
- Content Provider
- content provider
- Content Provider
- Content Provider
- content provider
- Content Provider
- content Provider
- Content Provider
- Content Provider
- 开通博客的第一天
- Http协议
- Ipc方式的优缺点和适用场景
- OC语言 内存管理
- 在cmd等终端运行python代码,文件
- Content Provider
- python的cls,self,classmethod,staticmethod
- objective-c 的分类与扩展
- 安装包制作工具 SetupFactory 详解
- nginx配置文件nginx.conf的扩展
- poj-2718 Smallest Difference
- (转)可收缩、扩展的TextView
- Spring -- 一个事务中独立开启事务
- webView绕过信任证书访问https