package com.android.test;
import java.util.ArrayList;
import java.util.Iterator;
import android.app.Activity;
import android.content.ContentProviderOperation;
import android.content.OperationApplicationException;
import android.database.Cursor;
import android.os.Bundle;
import android.os.RemoteException;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener{
int EMAIL;
int PHONE;
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
int rawContactInsertIndex = 0;
ArrayList<String> arrPhoneList = new ArrayList<String>();
ArrayList<String> arrNameList = new ArrayList<String>();
Button button1 = null;
Button button2 = null;
EditText ed1 = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] projection = new String[]{
ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER,
};
String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
Cursor c = managedQuery(Phone.CONTENT_URI, projection, null, null, sortOrder); //폰북의 주소록을 가리키고있음
ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE,null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build());
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,
rawContactInsertIndex)
.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,"테스트10")
.build());
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,
rawContactInsertIndex)
.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "010-1111-2222")
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
.build());
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,
rawContactInsertIndex)
.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Email.DATA, "bbackddoo@naver.com")
.withValue(ContactsContract.CommonDataKinds.Email.TYPE,
ContactsContract.CommonDataKinds.Email.TYPE_WORK)
.build());
try{
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
}catch(RemoteException e){
//TODO Auto-generated catch block
e.printStackTrace();
}catch (OperationApplicationException e){
//TODO Auto-generated catch block
e.printStackTrace();
}
button1 = (Button)findViewById(R.id.bt1);
button2 = (Button)findViewById(R.id.bt2);
ed1 = (EditText)findViewById(R.id.ed1);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
String [] arrProjection = { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME };
String [] arrPhoneProjection = { ContactsContract.CommonDataKinds.Phone.NUMBER };
Cursor clsCursor = getContentResolver().query( ContactsContract.Contacts.CONTENT_URI,
arrProjection, ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1" , null, null );
while( clsCursor.moveToNext() )
{
String strContactId = clsCursor.getString( 0 );
Cursor clsPhoneCursor = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, arrPhoneProjection
, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + strContactId, null, null );
while( clsPhoneCursor.moveToNext() )
{
// 이름과 전화 번호를 각각의 리스트에 저장한다.
arrNameList.add( clsCursor.getString( 1 ) );
arrPhoneList.add( clsPhoneCursor.getString( 0 ) );
}
clsPhoneCursor.close();
}
clsCursor.close();
}
public void onClick (View v)
{
if( v.getId() == R.id.bt1){
for(int i=0, n = arrNameList.size(); i<n ; i++)
{
if(ed1.getText().toString().equals(arrNameList.get(i)))
{
Toast.makeText(MainActivity.this,
"이미존재하는연락처",Toast.LENGTH_LONG).show();
}
else
{
ed1.setText("");
}
}
}
else if(v.getId() == R.id.bt2){
for(int i=0, n = arrNameList.size(); i<n ; i++)
{
if(ed1.getText().toString().equals(arrNameList.get(i)))
{
Toast.makeText(MainActivity.this,
"이미존재하는연락처",Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(MainActivity.this,
"존재하지 않습니다.",Toast.LENGTH_LONG).show();
}
}
}
}
}
arrNameList 이것은 제가 핸드폰내부 연락처의 이름들을 저장해놓은 arraylist입니다.
Log를 찍어봐도 사이즈도 다 잘 되고, 객체도 다 잘들어 있습니다.
그런데 막상 맞는지 확인하려고 Edittext에 입력을하면 첫번째객체만 있다고 확인이 되고, 두번째 객체의 이름들을 입력하면
없는것으로 나옵니다.
도대체가 이유를 몰라서 고수님들께 조언좀 구하고싶습니다. 답이않보입니다저는 ..
아 그리고 공지사항은 읽었습니다.
Toast를 조건에 걸릴때마다 띄우는 바람에 그런것같습니다.
for문안에서는 boolean형 같은 변수로 존재 유무만 판단하고
for문을 빠져나와서 존재유무 변수를 이용해서 Toast 메시지를 띄우는 식으로 해보세요.
대충 이런식