안드로이드로 데이터베이스를 다루는 방법이 궁금해서 찾아보다 발견한 정보이다.
안드로이드에서는 보안상의 이유로 일반적인 웹개발처럼 mysql 같은곳에 직접적으로 접근이 불가능하다고 알려져 있다.
그래서 중간다리를 놓고 접근하는것이 일반적이다.
결국 핵심은 manifest.xml을 잘 설정하는 것이다.
(펌)
// useContentProvider.java
package com.xprime.android.useContentProvider;
import android.app.Activity;
import android.content.ContentUris;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Browser;
import android.provider.CallLog;
import android.provider.Contacts;
import android.provider.Contacts.People;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class useContentProvider extends Activity {
Button btnCallLog;
Button btnBookmark;
Button btnContacts;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnCallLog = (Button)findViewById(R.id.Button01);
btnCallLog.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String[] reqCol =
{
CallLog.Calls.DURATION,
CallLog.Calls.NUMBER
};
Cursor calls = managedQuery(CallLog.Calls.CONTENT_URI,
reqCol,
CallLog.Calls.NUMBER + "=?",
new String[] {"1234567"},
null);
Log.d("Call", "Call count:"+calls.getCount());
int durIndex = calls.getColumnIndexOrThrow(CallLog.Calls.DURATION);
calls.moveToFirst();
int total = 0;
while( !calls.isAfterLast() )
{
Log.d("Call ", "Duration : " + calls.getInt(durIndex));
total += calls.getInt(durIndex);
calls.moveToNext();
}
Log.d("Call", "total : " + total);
}
});
btnBookmark = (Button)findViewById(R.id.Button02);
btnBookmark.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String[] reqCol =
{
Browser.BookmarkColumns.TITLE,
Browser.BookmarkColumns.VISITS
};
Cursor books = managedQuery(Browser.BOOKMARKS_URI,
reqCol,
Browser.BookmarkColumns.BOOKMARK + "=1",
null,
Browser.BookmarkColumns.VISITS + " DESC limit 5");
int titleIndex = books.getColumnIndexOrThrow(Browser.BookmarkColumns.TITLE);
int visitIndex = books.getColumnIndexOrThrow(Browser.BookmarkColumns.VISITS);
books.moveToFirst();
while( !books.isAfterLast() )
{
Log.d("book ", books.getString(titleIndex) + " visit : " + books.getString(visitIndex));
books.moveToNext();
}
}
});
btnContacts = (Button)findViewById(R.id.Button03);
btnContacts.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
//연락처 정보를 가져오는 content uri
Uri uri = ContactsContract.Contacts.CONTENT_URI;
//가져올 컬럼정보 sql쿼리의 select col1, col2 from table1 에서 col1, col2 설정하는 것과 같음
String[] projection = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
//조건 설정 where 절 만드는것과 같음
String selection = null;//ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '0' ";
String[] selectionArgs = null;
//정렬
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
//조회해서 가져온다
Cursor contactCursor = managedQuery(uri, projection, selection, selectionArgs, sortOrder);
contactCursor.moveToFirst();
int nameIndex = contactCursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME);
Log.d("name ", "" + contactCursor.getCount());
while( !contactCursor.isAfterLast() )
{
Log.d("name ", contactCursor.getString(nameIndex));
contactCursor.moveToNext();
}
/*
// TODO Auto-generated method stub
Cursor oneContact = managedQuery(People.CONTENT_URI,
null, null, null, "name desc LIMIT 1");
int nameIdx = oneContact.getColumnIndex(Contacts.People.NAME);
int emailIdx = oneContact.getColumnIndex(Contacts.People.PRIMARY_EMAIL_ID);
int phoneIdx = oneContact.getColumnIndex(Contacts.People.PRIMARY_PHONE_ID);
oneContact.moveToFirst();
int emailID = oneContact.getInt(emailIdx);
int phoneID = oneContact.getInt(phoneIdx);
Uri emailUri = ContentUris.withAppendedId(Contacts.ContactMethods.CONTENT_URI, emailID);
Uri phoneUri = ContentUris.withAppendedId(Contacts.ContactMethods.CONTENT_URI, phoneID);
Cursor primaryEmail = managedQuery(emailUri, new String[] {Contacts.ContactMethods.DATA},
null, null, null);
Cursor primaryPhone = managedQuery(phoneUri, new String[] {Contacts.Phones.NUMBER},
null, null, null);
startManagingCursor(primaryPhone);
startManagingCursor(primaryEmail);
String name = oneContact.getString(nameIdx);
primaryEmail.moveToFirst();
primaryPhone.moveToFirst();
String PhoneNumber = null;
String email = null;
if( primaryEmail.getCount() > 0 )
email = primaryEmail.getString(0);
if( primaryPhone.getCount() > 0 )
PhoneNumber = primaryPhone.getString(0);
Log.d("Contact", "name : " + name + " email : " + email + " phone : " + PhoneNumber);
*/
}
});
}
}
--------------------------------------------------------------------------------------------
// main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<Button android:text="CallLog" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text="Bookmark" android:id="@+id/Button02" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text="Contact" android:id="@+id/Button03" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>
--------------------------------------------------------------------------------------------
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xprime.android.useContentProvider"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".useContentProvider"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"></uses-permission>
</manifest>
[출처] [티모] DB 다루기1 (안드로이드개발 카페 [개발자 커뮤니티]) | 작성자 에디터
'정보' 카테고리의 다른 글
오징어게임의 돌풍이 심상치 않다. (0) | 2021.09.26 |
---|