스마트폰앱

오늘:
2,540
어제:
2,589
전체:
2,707,439

고객센타 : 070-7752-2000
팩스 : 070-7752-2001
휴대폰 : 010-9513-0019
email : voipkorea@yahoo.co.kr

국민은행
(주)제이에스솔루션
047101-04-155519

Flag Counter
■ 무료 : 유선 집전화 휴대폰 ( 한국 미국 중국 카나다) ↔ (국내 해외 여행자 상사 주재원 유학생) / 가입무 무제한무료■

http://www.youtube.com/watch?v=woM5qbRBNe8

 

Learn Android Tutorial 2.6 - Shared Preferences Example 2

 

 

 

 

 

http://www.androidhive.info/2012/08/android-session-management-using-shared-preferences/

Android User Session Management using Shared Preferences

 


Session are useful when you want to store user data globally through out the application. This can be done in two ways. One is storing them in a global variables and second is storing the data in shared preferences. The problem with storing data in global variable is data will be lost once user closes the application, but storing the data in shared preferences will be persistent even though user closes the application.

Download Code



Application shared preferences allows you to save and retrieve key, value pair data. Before getting into tutorial, I am giving basic information needed to work with shared preferences.

Initialization

Application shared preferences can be fetched using getSharedPreferences() method.You also need an editor to edit and save the changes in shared preferences. The following code can be used to get application shared preferences.

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();


Storing Data

You can save data into shared preferences using editor. All the primitive data types like booleans, floats, ints, longs, and strings are supported. Call editor.commit() in order to save changes to shared preferences.

editor.putBoolean("key_name", true); // Storing boolean - true/false
editor.putString("key_name", "string value"); // Storing string
editor.putInt("key_name", "int value"); // Storing integer
editor.putFloat("key_name", "float value"); // Storing float
editor.putLong("key_name", "long value"); // Storing long
  
editor.commit(); // commit changes


Retrieving Data

Data can be retrived from saved preferences by calling getString() (For string) method. Remember this method should be called on Shared Preferences not on Editor.

// returns stored preference value
// If value is not present return second param value - In this case null
pref.getString("key_name", null); // getting String
pref.getInt("key_name", null); // getting Integer
pref.getFloat("key_name", null); // getting Float
pref.getLong("key_name", null); // getting Long
pref.getBoolean("key_name", null); // getting boolean


Clearing / Deleting Data

If you want to delete from shared preferences you can call remove(“key_name”) to delete that particular value. If you want to delete all the data, call clear()

editor.remove("name"); // will delete key name
editor.remove("email"); // will delete key email
  
editor.commit(); // commit changes

Following will clear all the data from shared preferences

editor.clear();
editor.commit(); // commit changes



The following is a simple tutorial which will have a login form and a dashboard screen. At first user will login using login details and once he successfully logged in his credentials (name, email) will be stored in shared preferences.

——————————————————————————————————————————————————-

User Session Management using Shared Preferences

1. Create a new project in Eclipse IDE File ⇒ New ⇒ Android Application Project and fill all the required details
2. I am adding alert dialog manager class to show alert messages while validating the login form. Create a new class and name it as AlertDialogManager.java and paste the following code.

AlertDialogManager.java
package com.androidhive.sessions;
  
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
  
public class AlertDialogManager {
    /**
     * Function to display simple Alert Dialog
     * @param context - application context
     * @param title - alert dialog title
     * @param message - alert message
     * @param status - success/failure (used to set icon)
     *               - pass null if you don't want icon
     * */
    public void showAlertDialog(Context context, String title, String message,
            Boolean status) {
        AlertDialog alertDialog = new AlertDialog.Builder(context).create();
  
        // Setting Dialog Title
        alertDialog.setTitle(title);
  
        // Setting Dialog Message
        alertDialog.setMessage(message);
  
        if(status != null)
            // Setting alert dialog icon
            alertDialog.setIcon((status) ? R.drawable.success : R.drawable.fail);
  
        // Setting OK Button
        alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            }
        });
  
        // Showing Alert Message
        alertDialog.show();
    }
}

3. I am writing all session related functions in one class to make them available in all activities. Create a new class named SessionManagement.java and add following lines of code

SessionManagement.java
package com.androidhive.sessions;
  
import java.util.HashMap;
  
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
  
public class SessionManager {
    // Shared Preferences
    SharedPreferences pref;
  
    // Editor for Shared preferences
    Editor editor;
  
    // Context
    Context _context;
  
    // Shared pref mode
    int PRIVATE_MODE = 0;
  
    // Sharedpref file name
    private static final String PREF_NAME = "AndroidHivePref";
  
    // All Shared Preferences Keys
    private static final String IS_LOGIN = "IsLoggedIn";
  
    // User name (make variable public to access from outside)
    public static final String KEY_NAME = "name";
  
    // Email address (make variable public to access from outside)
    public static final String KEY_EMAIL = "email";
  
    // Constructor
    public SessionManager(Context context){
        this._context = context;
        pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
        editor = pref.edit();
    }

4. In this example i am storing login status, name, email in shared preferences, so i added a function called createLoginSession(String name, String email) to SessionManagement class. Add the following function to SessionManagement.java.

> This function simply stores login status(true), name, email in shared preferences.

/**
     * Create login session
     * */
    public void createLoginSession(String name, String email){
        // Storing login value as TRUE
        editor.putBoolean(IS_LOGIN, true);
  
        // Storing name in pref
        editor.putString(KEY_NAME, name);
  
        // Storing email in pref
        editor.putString(KEY_EMAIL, email);
  
        // commit changes
        editor.commit();
    }

5.In order to get the stored preferences data, I added a function called getUserDetails() with the following code.

> The following function will read shared preferences and returns user data in HashMap

/**
     * Get stored session data
     * */
    public HashMap<String, String> getUserDetails(){
        HashMap<String, String> user = new HashMap<String, String>();
        // user name
        user.put(KEY_NAME, pref.getString(KEY_NAME, null));
  
        // user email id
        user.put(KEY_EMAIL, pref.getString(KEY_EMAIL, null));
  
        // return user
        return user;
    }

6. To check whether user logged in or not i added a function checkLogin() which you can call in all Activities to check user login status.

> This function simply check user login status from shared preferences and if user is not login it will redirect user to LoginActivity

/**
     * Check login method wil check user login status
     * If false it will redirect user to login page
     * Else won't do anything
     * */
    public void checkLogin(){
        // Check login status
        if(!this.isLoggedIn()){
            // user is not logged in redirect him to Login Activity
            Intent i = new Intent(_context, LoginActivity.class);
            // Closing all the Activities
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  
            // Add new Flag to start new Activity
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  
            // Staring Login Activity
            _context.startActivity(i);
        }
  
    }

7. Add a function called logoutUser() to clear all the data from shared preferences. Call this function when you want to logout the user.

> This function clears all session data and redirect the user to LoginActivity

/**
     * Clear session details
     * */
    public void logoutUser(){
        // Clearing all data from Shared Preferences
        editor.clear();
        editor.commit();
  
        // After logout redirect user to Loing Activity
        Intent i = new Intent(_context, LoginActivity.class);
        // Closing all the Activities
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  
        // Add new Flag to start new Activity
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  
        // Staring Login Activity
        _context.startActivity(i);
    }

Final Code

SessionManagement.java
package com.androidhive.sessions;
  
import java.util.HashMap;
  
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
  
public class SessionManager {
    // Shared Preferences
    SharedPreferences pref;
  
    // Editor for Shared preferences
    Editor editor;
  
    // Context
    Context _context;
  
    // Shared pref mode
    int PRIVATE_MODE = 0;
  
    // Sharedpref file name
    private static final String PREF_NAME = "AndroidHivePref";
  
    // All Shared Preferences Keys
    private static final String IS_LOGIN = "IsLoggedIn";
  
    // User name (make variable public to access from outside)
    public static final String KEY_NAME = "name";
  
    // Email address (make variable public to access from outside)
    public static final String KEY_EMAIL = "email";
  
    // Constructor
    public SessionManager(Context context){
        this._context = context;
        pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
        editor = pref.edit();
    }
  
    /**
     * Create login session
     * */
    public void createLoginSession(String name, String email){
        // Storing login value as TRUE
        editor.putBoolean(IS_LOGIN, true);
  
        // Storing name in pref
        editor.putString(KEY_NAME, name);
  
        // Storing email in pref
        editor.putString(KEY_EMAIL, email);
  
        // commit changes
        editor.commit();
    }   
  
    /**
     * Check login method wil check user login status
     * If false it will redirect user to login page
     * Else won't do anything
     * */
    public void checkLogin(){
        // Check login status
        if(!this.isLoggedIn()){
            // user is not logged in redirect him to Login Activity
            Intent i = new Intent(_context, LoginActivity.class);
            // Closing all the Activities
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  
            // Add new Flag to start new Activity
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  
            // Staring Login Activity
            _context.startActivity(i);
        }
  
    }
  
    /**
     * Get stored session data
     * */
    public HashMap<String, String> getUserDetails(){
        HashMap<String, String> user = new HashMap<String, String>();
        // user name
        user.put(KEY_NAME, pref.getString(KEY_NAME, null));
  
        // user email id
        user.put(KEY_EMAIL, pref.getString(KEY_EMAIL, null));
  
        // return user
        return user;
    }
  
    /**
     * Clear session details
     * */
    public void logoutUser(){
        // Clearing all data from Shared Preferences
        editor.clear();
        editor.commit();
  
        // After logout redirect user to Loing Activity
        Intent i = new Intent(_context, LoginActivity.class);
        // Closing all the Activities
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  
        // Add new Flag to start new Activity
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  
        // Staring Login Activity
        _context.startActivity(i);
    }
  
    /**
     * Quick check for login
     * **/
    // Get Login State
    public boolean isLoggedIn(){
        return pref.getBoolean(IS_LOGIN, false);
    }
}

8. Until now we are done creating Session Management class and now we are going to learn how to use this class in your application. For this create a simple login form asking username, password.

Create a layout xml file and a class to create login form. Name the xml file as activity_login.xml and class name as LoginActivity.java

activity_login.xml
<LinearLayout 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:orientation="vertical"
    android:padding="10dip">
  
    <!-- Email Label -->
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Username (Enter 'test')"
        android:singleLine="true"
        android:layout_marginBottom="5dip"/>
  
    <!-- Email input text -->
    <EditText android:id="@+id/txtUsername"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dip"/>
  
    <!-- Password Label -->
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Password (Enter 'test')"
        android:layout_marginBottom="5dip"/>
  
    <!-- Password input text -->
    <EditText android:id="@+id/txtPassword"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dip"
        android:password="true"
        android:singleLine="true"/>
  
    <!-- Login button -->
    <Button android:id="@+id/btnLogin"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Login"/>
  
</LinearLayout>

For testing purpose i am checking username, password as test, test.

Once the user enters correct login details a session will be created by calling session.createLoginSession(“Android Hive”, “anroidhive@gmail.com”) and user is redirected to MainActivity.

LoginActivity.java
package com.androidhive.sessions;
  
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
  
public class LoginActivity extends Activity {
  
    // Email, password edittext
    EditText txtUsername, txtPassword;
  
    // login button
    Button btnLogin;
  
    // Alert Dialog Manager
    AlertDialogManager alert = new AlertDialogManager();
  
    // Session Manager Class
    SessionManager session;
  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login); 
  
        // Session Manager
        session = new SessionManager(getApplicationContext());                
  
        // Email, Password input text
        txtUsername = (EditText) findViewById(R.id.txtUsername);
        txtPassword = (EditText) findViewById(R.id.txtPassword); 
  
        Toast.makeText(getApplicationContext(), "User Login Status: " + session.isLoggedIn(), Toast.LENGTH_LONG).show();
  
        // Login button
        btnLogin = (Button) findViewById(R.id.btnLogin);
  
        // Login button click event
        btnLogin.setOnClickListener(new View.OnClickListener() {
  
            @Override
            public void onClick(View arg0) {
                // Get username, password from EditText
                String username = txtUsername.getText().toString();
                String password = txtPassword.getText().toString();
  
                // Check if username, password is filled
                if(username.trim().length() > 0 && password.trim().length() > 0){
                    // For testing puspose username, password is checked with sample data
                    // username = test
                    // password = test
                    if(username.equals("test") && password.equals("test")){
  
                        // Creating user login session
                        // For testing i am stroing name, email as follow
                        // Use user real data
                        session.createLoginSession("Android Hive", "anroidhive@gmail.com");
  
                        // Staring MainActivity
                        Intent i = new Intent(getApplicationContext(), MainActivity.class);
                        startActivity(i);
                        finish();
  
                    }else{
                        // username / password doesn't match
                        alert.showAlertDialog(LoginActivity.this, "Login failed..", "Username/Password is incorrect", false);
                    }
                }else{
                    // user didn't entered username or password
                    // Show alert asking him to enter the details
                    alert.showAlertDialog(LoginActivity.this, "Login failed..", "Please enter username and password", false);
                }
  
            }
        });
    }
}
android session login form
android login failed

9. After user redirected to MainActivity, I am getting stored session data by calling getUserDetails() and displayed in textviews.

> session.checkLogin() is called to check user login status. Here if user is not login he will be redirected to LoginActivity.java
> If user is logged in, user details are fetched by calling session.getUserDetails() and displayed in textviews.
> Also I have logout button which invokes a function session.logoutUser() to clear the session data.
Layout code for activity_main.xml

activity_main.xml
<LinearLayout 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:orientation="vertical"
    android:padding="10dip">
  
    <!-- Name Label -->
    <TextView
        android:id="@+id/lblName"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:layout_marginTop="40dip"
        android:layout_marginBottom="10dip"/>
  
    <!-- Email Label -->
    <TextView
        android:id="@+id/lblEmail"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:layout_marginBottom="40dip"/>
  
    <!-- Button to show session data -->
    <Button android:id="@+id/btnLogout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Logout"/>
</LinearLayout>

Code for MainActivity.java

package com.androidhive.sessions;
  
import java.util.HashMap;
  
import android.app.Activity;
import android.os.Bundle;
import android.text.Html;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
  
public class MainActivity extends Activity {
  
    // Alert Dialog Manager
    AlertDialogManager alert = new AlertDialogManager();
  
    // Session Manager Class
    SessionManager session;
  
    // Button Logout
    Button btnLogout;
  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // Session class instance
        session = new SessionManager(getApplicationContext());
  
        TextView lblName = (TextView) findViewById(R.id.lblName);
        TextView lblEmail = (TextView) findViewById(R.id.lblEmail);
  
        // Button logout
        btnLogout = (Button) findViewById(R.id.btnLogout);
  
        Toast.makeText(getApplicationContext(), "User Login Status: " + session.isLoggedIn(), Toast.LENGTH_LONG).show();
  
        /**
         * Call this function whenever you want to check user login
         * This will redirect user to LoginActivity is he is not
         * logged in
         * */
        session.checkLogin();
  
        // get user data from session
        HashMap<String, String> user = session.getUserDetails();
  
        // name
        String name = user.get(SessionManager.KEY_NAME);
  
        // email
        String email = user.get(SessionManager.KEY_EMAIL);
  
        // displaying user data
        lblName.setText(Html.fromHtml("Name: <b>" + name + "</b>"));
        lblEmail.setText(Html.fromHtml("Email: <b>" + email + "</b>"));
  
        /**
         * Logout button click event
         * */
        btnLogout.setOnClickListener(new View.OnClickListener() {
  
            @Override
            public void onClick(View arg0) {
                // Clear the session data
                // This will clear all session data and
                // redirect user to LoginActivity
                session.logoutUser();
            }
        });
    }
  
}
android user session data

10. Open AndroidManifest.xml file, add the following code and run the project.

    package="com.androidhive.sessions"
    android:versionCode="1"
    android:versionName="1.0" >
  
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />
  
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="Dashboard Screen" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
  
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
  
        <!-- DashBoard / MainActivity -->
        <activity
            android:name=".LoginActivity"
            android:label="User Login" >
        </activity>
    </application>
  
</manifest>
android user session management


 

Advertisement


 

arti_divider.png

Glad you liked it. Would you like to share?

Sharing this page …

Thanks! Close

Add New Comment

noavatar32.png

Showing 20 of 31 comments

조회 수 :
31968
등록일 :
2012.10.16
21:11:02 (*.160.42.233)
엮인글 :
http://webs.co.kr/index.php?document_srl=13937&act=trackback&key=0d1
게시글 주소 :
http://webs.co.kr/index.php?document_srl=13937
List of Articles
번호 제목 글쓴이 날짜 조회 수
64 Sqlite detail easy tutorial. admin 2017-09-09 125
63 Change package name Linphone Android admin 2017-08-25 279
62 Liblinphone - import Linphone library in Android Studio 2017 admin 2017-08-25 271
61 I am able to build the limphone on mac by follow the steps describe here admin 2017-08-25 272
60 To build liblinphone for Android, you must COMPILATION INSTRUCTIONS admin 2017-08-25 261
59 sipdroid source code admin 2017-08-08 340
58 안드로이드 주소록 전체가져오기 이름만가져오기 사진가져오기 코드 admin 2015-04-13 5561
57 the sipdroid Research Miscellaneous admin 2015-03-26 2727
56 HSS070 English Korean 무료 국제전화 미국 중국 카나다 무료 통화 제공 admin 2014-12-28 3982
55 Softphones admin 2014-09-20 4435
54 /xxxxx/gen already exists but is not a source folder. Convert to a source folder or rename it. admin 2014-09-03 4846
53 CSIPSimple building Rebuilding Detail on Eclips Good All is heare perfect admin 2014-08-15 4791
52 Improving QoE of SIP-based Automated Voice Interaction in Mobile Networks file admin 2014-03-20 5603
51 speex support in android admin 2014-03-19 5821
50 voxmobile Source and how to build admin 2014-02-18 6187
49 PJSIP hung the phone constantly corrected the problem admin 2014-02-09 6636
48 Csipsimple code rebuilding source sip 통신 Call Mechanism admin 2014-02-09 18050
47 Csipsimple code rebuilding source sip 통신 technical interviewer admin 2014-02-09 6589
46 Csipsimple code rebuilding source 주요인터페이스분석 admin 2014-02-09 32011
45 Csipsimple code rebuilding source 다운로드 구성 csipsimple 소스 프로젝트 admin 2014-02-09 7661
44 Android DialogFragment Tutorial admin 2014-02-09 6884
43 Creating a fullscreen DialogFragment with a custom background admin 2014-02-09 9298
42 [Android API] 네트워크 상태 체크하기 admin 2013-12-19 8228
41 [안드로이드] 네트워크 연결 상태 체크 함수. admin 2013-12-19 7578
40 안드로이드 인터넷연결체크 ( 3g/lte/wifi ) 메서드 admin 2013-12-19 13913
39 Android Get Phone Contacts details with Contact Image admin 2013-12-15 6904
38 안드로이드 커스텀 타이틀바 How to add custom title bar to android application admin 2013-10-02 9262
37 How to create a custom title bar admin 2013-07-15 9516
36 Rotary Dialer clip art admin 2013-04-20 17142
35 Java 프로그램 실행화일 만들기 : Launch4j admin 2013-02-21 10165
34 java network programming source code, learning socket programming admin 2012-12-04 10292
33 2X Client Configuration | Android Remote Desktop 안드로이드 PC 리모트 데스크탑 admin 2012-12-02 12064
32 WIFI 3G 인터넷 연결 실시간 체크 소스코드 Broadcast Receiver 사용 (Adnroid) admin 2012-10-31 16386
31 통신사별 와이파이 비밀번호 admin 2012-10-31 14349
30 팁, wifi 패스워드 모음집 password admin 2012-10-21 10648
» Android User Session Management using Shared Preferences admin 2012-10-16 31968
28 Unicode Tables v4 admin 2012-10-16 22931
27 HTML Codes admin 2012-10-16 9622
26 IBM Scan Codes EBCDIC Codes admin 2012-10-16 11787
25 ASCII Table and Description admin 2012-10-16 11093
24 How to Show Alert Dialog in Android (간단하고 쉬운설명) admin 2012-10-15 22077
23 How to read contacts on Android 2.0 admin 2012-10-14 13125
22 WIFI 3G 인터넷 연결 체크 소스코드 직접 사용한 코드 android admin 2012-10-14 15050
21 Android Detect Internet Connection Status admin 2012-10-12 20593
20 JAVA + SSL (server and client examples) admin 2012-10-07 22147
19 Querying The Android Contact Database admin 2012-09-30 10506
18 Manage Contacts android admin 2012-09-30 12463
17 Android Contacts API 2 example admin 2012-09-30 13559
16 Android 2.0 주소록 동기화 기능 admin 2012-09-30 38695
15 안드로이드용 앱 개발 마켓등록 까지 해본거 샘플 무료국제전화 앱 FreeDialer admin 2012-09-27 14536
14 아이폰 IPhone 앱 개발 기본 admin 2012-09-27 11201
13 [안드로이드/개발] Intent admin 2012-09-23 17519
12 안드로이드 타이머 절적한 설명과 간단한소스코드 등 안드로이드 프로그램 설명 깔끔 admin 2012-09-23 28174
11 google voice source code admin 2012-09-22 10489
10 [안드로이드] 서버/클라이언트 소켓(Socket) 통신하기 admin 2012-09-20 20344
9 FreeDial 무료국제전화는 프리미엄 국제전화 다이렉트 회선사용 admin 2012-09-20 11582
8 Android SQlite 사용 admin 2012-09-04 11086
7 안드로이드마켓에 앱 등록하는 순서 admin 2012-08-19 41736
6 전화관련 안드로이드함수 admin 2012-08-18 15109
5 자바 ,이클립스,Android SDK, ADT 설치하여 무료국제전화 다이얼러를 만들어봅시다. admin 2012-08-06 15663
4 아이폰용 무료국제전화용 무료 다이얼러 Speedydialer 설치및 사용방법 file admin 2012-07-14 11000
3 접속번호 + 상대방번호 # 를 주소록에 전화번호로 저장하여 사용하면 편리하다 admin 2012-06-17 12971
2 App Store - ILD Dialer admin 2012-06-17 9539
1 한국휴대폰에서 미국 중국 카나다 무료 국제전화 서비스 admin 2012-04-27 9918