扫描二维码存手机号
来源:互联网 发布:手机淘宝老版本官方6.9 编辑:程序博客网 时间:2024/04/27 23:07
二维码的开发有好多种,但一般都有开源的框架,本文就用的是在ZXing类库上修剪之后编写的,我会在后面附上我的源代码。
首先是Mainactivity.java
<p>package com.qrcode;</p><p>import com.google.zxing.WriterException;import com.zxing.activity.CaptureActivity;import com.zxing.encoding.EncodingHandler;</p><p>import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;</p><p>public class MainActivity extends Activity {</p><p> @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button scanBarCodeButton = (Button) this.findViewById(R.id.bt_scann); Button generateQRCodeButton= (Button) this.findViewById(R.id.bt_save); scanBarCodeButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent openCameraIntent = new Intent(MainActivity.this,save.class); startActivity(openCameraIntent); } }); generateQRCodeButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent openCameraIntent = new Intent(MainActivity.this,scan.class); startActivity(openCameraIntent); } }); }</p><p> }</p>
这是主界面,有两个按钮,scanBarCodeButton进入创建二维码的界面,generateQRCodeButton进入扫描界面。
以下是生成二维码界面的类save.java
package com.qrcode;import com.google.zxing.WriterException;import com.zxing.activity.CaptureActivity;import com.zxing.encoding.EncodingHandler;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;public class save extends Activity {private EditText qrStrEditText;private ImageView qrImgImageView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.save); qrStrEditText = (EditText) this.findViewById(R.id.et_qr_string); qrImgImageView = (ImageView) this.findViewById(R.id.iv_qr_image); Button scanBarCodeButton = (Button) this.findViewById(R.id.bt_creat); scanBarCodeButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {try {String contentString = qrStrEditText.getText().toString();if (!contentString.equals("")) {Bitmap qrCodeBitmap = EncodingHandler.createQRCode(contentString, 350);qrImgImageView.setImageBitmap(qrCodeBitmap);}else {Toast.makeText(save.this, "Text can not be empty", Toast.LENGTH_SHORT).show();}} catch (WriterException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}); Button generateQRCodeButton = (Button) this.findViewById(R.id.bt_saveewm); generateQRCodeButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {}}); }}
EncodingHandler.createQRCode(a,b) a是要转成二维码的字符串,b是转成二维码的大小。
接下来是扫描页类scan.java
package com.qrcode;import com.google.zxing.WriterException;import com.zxing.activity.CaptureActivity;import com.zxing.encoding.EncodingHandler;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;public class scan extends Activity {private TextView resultTextView;Context context;String scanResult; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.scan); context = this; resultTextView = (TextView) this.findViewById(R.id.sanresult); Button scanBarCodeButton = (Button) this.findViewById(R.id.bt_scan); Button btadd=(Button) findViewById(R.id.bt_add); scanBarCodeButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent openCameraIntent = new Intent(scan.this,CaptureActivity.class);startActivityForResult(openCameraIntent, 0);}}); btadd.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubString[] strs = scanResult.split(" ");ContectTest text=new ContectTest();try {text.testInsert(context, strs[0], strs[1]);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}); }@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode == RESULT_OK) {Bundle bundle = data.getExtras();scanResult = bundle.getString("result");resultTextView.setText(scanResult);}}}
scanBarCodeButton按钮是进入ZXing类库里的CaptureActivity.java扫描页面,之后把扫描的结果反回onActivityResult()函数的scanResult。
btadd按钮是把扫描的信息存到电话录里,这里用到了contentprovider组件,联系手机上的通讯录数据库,把电话号码加进去。用到了ContectTest.java代码如下
package com.qrcode;import java.util.ArrayList;import android.content.ContentProviderOperation;import android.content.ContentProviderResult;import android.content.ContentResolver;import android.content.ContentUris;import android.content.ContentValues;import android.content.Context;import android.content.OperationApplicationException;import android.database.Cursor;import android.net.Uri;import android.os.RemoteException;import android.provider.ContactsContract;import android.provider.ContactsContract.Data;import android.provider.ContactsContract.RawContacts;import android.provider.ContactsContract.CommonDataKinds.Email;import android.provider.ContactsContract.CommonDataKinds.Phone;import android.provider.ContactsContract.CommonDataKinds.StructuredName;import android.test.AndroidTestCase;import android.util.Log;public class ContectTest extends AndroidTestCase{ private static final String TAG = "ContactTest"; /** * 获取通讯录中联系人 */ public void testGetContact(){ ContentResolver contentResolver = this.getContext().getContentResolver(); Uri uri = Uri.parse("content://com.android.contacts/contacts"); Cursor cursor = contentResolver.query(uri, null, null, null, null); while(cursor.moveToNext()){ // 获取联系人姓名 StringBuilder sb = new StringBuilder(); String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); sb.append("contactId=").append(contactId).append(",name=").append(name); //获取联系人手机号码 Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null); while(phones.moveToNext()){ String phone = phones.getString(phones.getColumnIndex("data1")); sb.append(",phone=").append(phone); } //获取联系人email Cursor emails = contentResolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId, null, null); while(emails.moveToNext()){ String email = emails.getString(emails.getColumnIndex("data1")); sb.append(",email=").append(email); } Log.i(TAG, sb.toString()); } } /** * 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId * * 这是后面插入data表的数据,只有执行空值插入,才能使插入的联系人在通讯录里可见 */ public void testInsert(Context context, String name, String phone) { ContentResolver resolver = context.getContentResolver(); Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); ContentValues values = new ContentValues(); // 鍚憆aw_contacts鎻掑叆涓�潯闄や簡ID涔嬪, 鍏朵粬鍏ㄩ儴涓篘ULL鐨勮褰� ID鏄嚜鍔ㄧ敓鎴愮殑 long id = ContentUris.parseId(resolver.insert(uri, values)); // 娣诲姞鑱旂郴浜哄鍚� uri = Uri.parse("content://com.android.contacts/data"); values.put("raw_contact_id", id); values.put("data2", name); values.put("mimetype", "vnd.android.cursor.item/name"); resolver.insert(uri, values); // 娣诲姞鑱旂郴浜虹數璇� values.clear(); // 娓呯┖涓婃鐨勬暟鎹� values.put("raw_contact_id", id); values.put("data1", phone); values.put("data2", "2"); values.put("mimetype", "vnd.android.cursor.item/phone_v2"); resolver.insert(uri, values); } /** * 批量添加联系人,处于同一个事务中 */ public void testSave() throws Throwable{ //文档位置:reference\android\provider\ContactsContract.RawContacts.html ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); int rawContactInsertIndex = 0; ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI) .withValue(RawContacts.ACCOUNT_TYPE, null) .withValue(RawContacts.ACCOUNT_NAME, null) .build()); //文档位置:reference\android\provider\ContactsContract.Data.html ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI) .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) .withValue(StructuredName.GIVEN_NAME, "lisi") .build()); ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI) .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue(Phone.NUMBER, "5556") .withValue(Phone.TYPE, Phone.TYPE_MOBILE) .withValue(Phone.LABEL, "") .build()); ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI) .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE) .withValue(Email.DATA, "lisi@126.cn") .withValue(Email.TYPE, Email.TYPE_WORK) .build()); ContentProviderResult[] results = this.getContext() .getContentResolver().applyBatch(ContactsContract.AUTHORITY,ops); for (ContentProviderResult result : results) { Log.i(TAG, result.uri.toString()); } } }
ContectTest类里有多个方法,有读取,有插入等等,但这里我们只用到testInsert()函数。
这就是大体代码,源代码会附上。
好像不能上传源代码
0 0
- 扫描二维码存手机号
- 二维码扫描
- 二维码扫描
- 二维码扫描
- 二维码扫描
- 二维码扫描
- 二维码扫描
- 二维码扫描
- 二维码扫描
- 二维码扫描
- 扫描二维码
- 二维码扫描
- 二维码扫描
- 二维码扫描
- 二维码扫描
- 扫描二维码
- 二维码扫描
- 二维码扫描
- 判断输入年份是否为闰年的另一种方法
- Xfire发布Web Service,学习教程,值得参考哦!
- 3-14(倒置数字)
- java通过jdbc连接hive1.0.0(伪分布)的问题
- SYSLINUX中文介绍
- 扫描二维码存手机号
- IOS开发常用第三方框架
- 小马哥-----高仿小米 note刷机 h78机型型号 机型新旧版机型对比图与开机识别对比图
- 什么是云计算
- 设计模式——简单工厂模式(静态工厂方法模式)
- 真得可行么?Holacracy-告别管理人
- hdu4753 状态压缩dp博弈(记忆化搜索写法)
- 插入排序
- Java知识(003)--分支和循环1