扫描二维码存手机号

来源:互联网 发布:手机淘宝老版本官方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
原创粉丝点击