어플에서 SMS(문자) 전송 하기

프로그래밍/Android (Java)|2015. 6. 18. 16:45
반응형

27. 어플에서 SMS(문자) 전송 하기

27-1 안드로이드 앱에서 문자를 전송하기 전에 주의하세요
문자를 수신하고 전송하기 위해서는 어플에 권한을 추가해야 합니다
이것은 사용자가 앱을 깔때 이 어플이 문자를 전송할수 있구나 라고 확인이 가능한대요
(사실 앱 설치때 권한 보는 사람은 적다지만 아무튼)
문자 전송이 꼭 필요한 기능이면 몰라도 필요없는 앱에 sms전송이 있다면 악성앱일 가능성이 큽니다
그리고 사용자의 돈을 사용하는것 이기 때문에 더욱더 잘 다뤄야 합니다

이 강좌를 모두 마스터 한다면 위 사진처럼 진짜 문자 전송이 되는 앱을 만들수 있습니다

AndroidManifest.xml에 아래 권한을 추가해주세요
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />



27-2 Main Layout
오랜만에 메인 레이아웃부터 시작해보겠습니다
필수로 있어야 하는건 "받는사람 번호"와 "보낼 메세지", "전송 버튼"정도 인대요
저는 TextView, EditText, TextView, EditText, Button순으로 배치했습니다
각자 알아서 마음대로 배치하되, 두개의 EditText의 id값은 각각 smsNumber, smsText으로 하고
Button은 android:onClick="sendSMS"속성을 넣어줍시다



27-3 문자를 전송하자
findViewById는 모두 생략하겠습니다

onClick에 맞게 메소드를 하나 만들어 보겠습니다

1
2
3
4
5
6
7
8
9
10
public void sendSMS(View v){
    String smsNum = smsNumber.getText().toString();
    String smsText = smsTextContext.getText().toString();
 
    if (smsNum.length()>0 && smsText.length()>0){
        sendSMS(smsNum, smsText);
    }else{
        Toast.makeText(this"모두 입력해 주세요", Toast.LENGTH_SHORT).show();
    }
}


2~3줄의 getText().toString()은 모두 아시는 구문이죠?

모르신다면 [Development/App] - #7 EditText는 완전 쉬워요~ 부터 보시길 추천드립니다


5번째의 length는 String의 길이를 반환합니다
그래서 길이가 0인경우는 "", 즉 입력하지 않은것이 됩니다

if문으로 입력되지 않았을경우, Toast를 띄우도록 하고 있습니다

두개 모두 빈칸이 아닐경우 sendSMS라는 메소드를 호출하며, 입력한 Number와 Text를 그 메소드로 넘겨주고 있습니다


sendSMS메소드를 살펴보기 전에 먼저 문자를 보내는 API부터 알아볼께요
SmsManager mSmsManager = SmsManager.getDefault();
mSmsManager.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent);
이 두개의 코드만 이해한다면 오늘 강의의 목표를 모두 마스터한것입니다

sendTextMessage에대해 조금 알아보겠습니다
  • destinationAddress : 받는사람의 Phone Number입니다 신기하게도 String형식입니다
  • scAddress : 이건 잘 모르겠습니다 일단 null을 입력해 주세요 (구글API : is the service center address or null to use the current default SMSC)
  • text : 문자의 내용입니다
  • sentIntent : 문자 전송에 관련한 PendingIntent입니다 null을 넣어도 되지만 저는 전송 확인결과를 알아보기 위해 이것도 사용할 예정입니다
  • deliveryIntent : 문자 도착에 관련한 PendingIntent라고 합니다 null을 넣어도 되지만 한번 이것도 사용해 보겠습니다

그럼 sendSMS()를 살펴보겠습니다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public void sendSMS(String smsNumber, String smsText){
    PendingIntent sentIntent = PendingIntent.getBroadcast(this0new Intent("SMS_SENT_ACTION"), 0);
    PendingIntent deliveredIntent = PendingIntent.getBroadcast(this0new Intent("SMS_DELIVERED_ACTION"), 0);
 
    registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            switch(getResultCode()){
                case Activity.RESULT_OK:
                    // 전송 성공
                    Toast.makeText(mContext, "전송 완료", Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    // 전송 실패
                    Toast.makeText(mContext, "전송 실패", Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:
                    // 서비스 지역 아님
                    Toast.makeText(mContext, "서비스 지역이 아닙니다", Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:
                    // 무선 꺼짐
                    Toast.makeText(mContext, "무선(Radio)가 꺼져있습니다", Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NULL_PDU:
                    // PDU 실패
                    Toast.makeText(mContext, "PDU Null", Toast.LENGTH_SHORT).show();
                    break;
            }
         }
    }, new IntentFilter("SMS_SENT_ACTION"));
 
    registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            switch (getResultCode()){
                case Activity.RESULT_OK:
                    // 도착 완료
                    Toast.makeText(mContext, "SMS 도착 완료", Toast.LENGTH_SHORT).show();
                    break;
                case Activity.RESULT_CANCELED:
                    // 도착 안됨
                    Toast.makeText(mContext, "SMS 도착 실패", Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    }, new IntentFilter("SMS_DELIVERED_ACTION"));
 
    SmsManager mSmsManager = SmsManager.getDefault();
    mSmsManager.sendTextMessage(smsNumber, null, smsText, sentIntent, deliveredIntent);
}


두번째~세번째 줄의 PendingIntent에 대해 따로 때어내어 설명하도록 하겠습니다


PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_SENT_ACTION"), 0);

PendingIntent deliveredIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_DELIVERED_ACTION"), 0);


각각 위에서부터 문자 전송, 문자 수신에 관련하여 sendTextMessage()에 넘겨줄 값들입니다

PendingIntent에서 세번째로 넘겨주는것이 new Intent()인대요
그 아래에 있는 코드들을 보면 registerReceiver가 있고, new IntentFilter()가 있습니다
registerReceiver는 우리 브로드캐스트리시버할때 한번 한적이 있습니다

BroadCast를 등록해 주는 역할을 했었는대요
그 아래의 IntentFilter도 그 강좌에서 한적이 잇습니다

[Development/App] - #24 Broadcast Receiver로 문자(SMS) 수신해보자



뭐.. 이런씩으로 말이죠


브로드 캐스트 리시버에서 어떤 작업이 이루어 지는지는 주석으로 설명이 되어 있으니 더이상의 설명은 필요 없을듯 합니다



마지막줄의 sendTextMessage()가 실행되어 SMS가 전송되는 겁니다 ㅎㅎ
그럼 문자를 수신하는 방법도 알아봐야 겠지요?



27-4 문자를 수신하자 - 브로드캐스트리시버 편
문자를 수신하기 위해 필요한것은 브로드캐스트리시버 입니다
#24번에서 언급한 내용이지만 다시한번 짚고 넘어가 봅시다

먼저 문자가 오면 나타날 화면의 레이아웃부터 설정해 봅시다

저는 이렇게 TableLayout을 이용해서 구현했습니다


이 레이아웃은 한번도 써본적이 없으신 분들을 위해 코드를 제공하겠습니다


res/layout/activity_showsms.xml


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".ShowSMSActivity"  >
     
    <TableRow
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
         
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="발신자" />
         
        <TextView
            android:id="@+id/originNum"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp" />
     
    </TableRow>
     
    <TableRow
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp" >
         
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="수신 시각" />
         
        <TextView
            android:id="@+id/smsDate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp" />
     
    </TableRow>
     
    <TableRow
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp" >
         
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="수신 내용" />
         
        <TextView
            android:id="@+id/originText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp" />
     
    </TableRow>
</TableLayout>



그다음에 브로드캐스트리시버를 작성합시다

이름은 SMSBroadCast.java입니다


1
2
3
4
5
6
7
8
9
10
11
12
13
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
 
public class Broadcast extends BroadcastReceiver {
 
    @Override
    public void onReceive(Context context, Intent intent) {
        if("android.provider.Telephony.SMS_RECEIVED".equals(action)){
             
        }
    }
}


자, 저 if문에 문자 수신을 위한 코드를 작성해 봅시다

저번에도 말씀드렸지만 이해하려고는 하지 마세요


1
2
3
4
5
6
7
Bundle bundle = intent.getExtras();
Object messages[] = (Object[])bundle.get("pdus");
SmsMessage smsMessage[] = new SmsMessage[messages.length];
 
for(int i = 0; i < messages.length; i++) {
    smsMessage[i] = SmsMessage.createFromPdu((byte[])messages[i]);
}


그다음에는 저 SmsMessage에서 발신자와, 수신시각, 수신 메세지를 얻어와야 합니다


1
2
3
4
5
6
Date curDate = new Date(smsMessage[0].getTimestampMillis());
SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분 ss초", Locale.KOREA);
 
String originDate = mDateFormat.format(curDate);
String origNumber = smsMessage[0].getOriginatingAddress();
String Message = smsMessage[0].getMessageBody().toString();


SimpleDateFormat은 얻어온 날짜를 년, 월, 일 형식에 맞게 변환해 줍니다

이에 대한 지식은 어플지식이 아니라 java지식이므로 검색해 주세요


4번 라인에서 mDateFormat.format으로 날짜 형식을 변환합니다


6~7번은 발신자와 문자 내용을 가져오는 코드입니다


마지막으로 받아온 값을 액티비티에 전달해 주어야 하는대요
Intent를 이용해서 값을 전달해보겠습니다

1
2
3
4
5
6
7
8
Intent showSMSIntent = new Intent(mContext, ShowSMSActivity.class);
showSMSIntent.putExtra("originNum", origNumber);
showSMSIntent.putExtra("smsDate", originDate);
showSMSIntent.putExtra("originText", Message);
 
showSMSIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 
mContext.startActivity(showSMSIntent);


putExtra(name, value)은 name과 값을 입력하여 Intent로 실행한 액티비티(또는 서비스등)에서 값을 가져올수 있습니다


번호, 시각, 내용을 putExtra로 집어넣고 있으며

브로드캐스트에서 액티비티를 실행하므로 setFlags를 이용합니다


마지막으로 액티비티를 실행하면 브로드캐스트로 할일은 끝입니다


AndroidManifest.xml에 방금 만든 브로드캐스트를 등록합시다
<receiver android:name ="whdghks913.tistory.examplesendsms.SMSBroadCast">
    <intent-filter android:priority="9999">
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>



27-5 문자를 수신하자 - Activity편
java파일을 하나 만들어 주세요 이름은 ShowSMSActivity.java입니다

이 java파일에는 아래 코드만 추가해 주면 끝입니다


1
2
3
4
5
6
7
8
9
10
11
12
13
TextView smsDate = (TextView) findViewById(R.id.smsDate);
TextView originNum = (TextView) findViewById(R.id.originNum);
TextView originText = (TextView) findViewById(R.id.originText);
 
Intent smsIntent = getIntent();
 
String originNumber = smsIntent.getStringExtra("originNum");
String originDate = smsIntent.getStringExtra("smsDate");
String originSmsText = smsIntent.getStringExtra("originText");
 
originNum.setText(originNumber);
smsDate.setText(originDate);
originText.setText(originSmsText);


5번라인에서 Intent를 가져온후 7~9번을 보시면 putExtra로 넣은 값을 가져오고 있습니다


11~13번에서 Text를 적용하는 모습입니다



액티비티를 만들었으므로 AndroidManifest.xml에 추가해 줍시다

<activity android:name="whdghks913.tistory.examplesendsms.ShowSMSActivity" />



이제 완성입니다~~
작동 결과를 확인해 봅시다

    


문자전송과 수신이 모두 정상적으로 이루어 지는것을 확인해 볼수 있습니다~




요즘 강좌 길이가 상상을 초월할 정도로 길어져서 제가 무슨말 하는지도 못알아 먹을때가 있어요 ㅠㅠ
정성 가득 썼는대 글이 무시(?)당할때도 있는것 같아요...

보시고 이 글이 마음에 드신다면 꼭 덧글 한마디 부탁드리겠습니다~


이번 강좌 예제는 심플 문자앱(?)으로도 쓸수 있을거 같아서 apk파일은 미리 올려드립니다 ㅎ


이 강좌의 예제소스는 28번 강좌가 나오는 즉시 업로드 됩니다

카페에서는 원본글에서만 다운로드가 가능합니다

예제소스 다운로드 : 

 ExampleSendSMS.zip




이글은 [] 에서 다시 보실수 있으며 원본 글의 저작권은 미르에게 있습니다


[출처] 미르의 IT 정복기 (http://itmir.tistory.com/458)



[첨부 파일]

ExampleSendSMS.apk

ExampleSendSMS.zip



반응형

댓글()

Preferences 를 이용한 자동 로그인

프로그래밍/Android (Java)|2015. 5. 27. 09:29
반응형

SharedPreferences

데이터를 간단하게 저장할 수 있는 안드로이드에서 제공하는 클래스이다.



/src/com/sysdocu/study/MainActivity.java


package com.example.example;


import android.app.Activity;

import android.content.SharedPreferences;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.CheckBox;

import android.widget.EditText;

import android.widget.Toast;


public class MainActivity extends Activity implements OnClickListener{

        EditText et_id, et_pw;

        CheckBox chk_auto;

        Button btn_login;


        SharedPreferences setting;

        SharedPreferences.Editor editor;

        @Override

        protected void onCreate(Bundle savedInstanceState) {

                super.onCreate(savedInstanceState);

                setContentView(R.layout.activity_main);


                et_id = (EditText) findViewById(R.id.et_id);

                et_pw = (EditText) findViewById(R.id.et_pw);

                chk_auto = (CheckBox) findViewById(R.id.chk_auto);

                btn_login = (Button) findViewById(R.id.btn_login);



                setting = getSharedPreferences("setting", 0);

                editor= setting.edit();


                if(setting.getBoolean("chk_auto", false)){

                        et_id.setText(setting.getString("ID", ""));

                        et_pw.setText(setting.getString("PW", ""));

                        chk_auto.setChecked(true);

                }


                btn_login.setOnClickListener(this);

        }


        @Override

        public void onClick(View v) {

                if(chk_auto.isChecked()){

                        Toast.makeText(this, "로그인", Toast.LENGTH_SHORT).show();

                        String ID = et_id.getText().toString();

                        String PW = et_pw.getText().toString();


                        editor.putString("ID", ID);

                        editor.putString("PW", PW);

                        editor.putBoolean("chk_auto", true);

                        editor.commit();

                }else{

                        editor.clear();

                        editor.commit();

                }

        }

}



/res/layout/activity_main.xml


<RelativeLayout 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"

        tools:context=".MainActivity2" >


        <TextView

                android:id="@+id/txt_id"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:layout_alignParentTop="true"

                android:layout_centerHorizontal="true"

                android:layout_marginTop="30dp"

                android:text="ID를 입력하세요" />


        <EditText

                android:id="@+id/et_id"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:layout_below="@+id/txt_id"

                android:layout_centerHorizontal="true"

                android:ems="10" />


        <TextView

                android:id="@+id/txt_pw"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:layout_below="@+id/et_id"

                android:layout_marginTop="30dp"

                android:layout_centerHorizontal="true"

                android:text="비밀번호를 입력하세요" />


        <EditText

                android:id="@+id/et_pw"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:layout_below="@+id/txt_pw"

                android:layout_centerHorizontal="true"

                android:ems="10" >


                <requestFocus />

        </EditText>


        <CheckBox

                android:id="@+id/chk_auto"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:layout_below="@+id/et_pw"

                android:layout_centerHorizontal="true"

                android:layout_marginTop="30dp"

                android:text="저장하기" />


        <Button

                android:id="@+id/btn_login"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:layout_below="@+id/chk_auto"

                android:layout_centerHorizontal="true"

                android:layout_marginTop="30dp"

                android:text="로그인" />


</RelativeLayout> 


[출처] 현's 블로그 (http://hyunssssss.tistory.com/307)


* '아이디, 패스워드 저장' 체크박스 체크 후 재로그인 할때는 저장된 값으로 비교함수 (if 문) 를 이용하여 로그인 페이지를 skip 하는방법을 사용하면 좋을것 같습니다. ('아이디, 패스워드 저장' 해제는 어플 내 환경설정에서)



반응형

댓글()

안드로이드 화면방향 설정하기

프로그래밍/Android (Java)|2015. 4. 21. 17:39
반응형

AndroidManifest.xml 파일에서


<activity

android:name=".MainActivity"

android:screenOrientation="portrait"       // 화면 방향을 세로로 고정 (가로는 "landscape")

android:label="@string/app_name" >

반응형

댓글()

AVD 생성시 CPU "No system images installed for this target."

프로그래밍/Android (Java)|2015. 4. 16. 09:08
반응형

AVD 생성시 CPU "No system images installed for this target." 라는 메세지가 뜰 경우


Help - Check for Updates 를 누르거나 STS (또는 이클립스) 를 재구동 하면 됩니다.

반응형

댓글()

./adb 실행 오류

프로그래밍/Android (Java)|2015. 4. 15. 16:33
반응형

이클립스나 STS 등의 프로그램에서 Android SDK Manager 를 설치할때 ./adb ... 무슨 어러가 나타날때가 있습니다.

이때는 OS가 64비트일때 발생을 하게 되는데 프로그램에서 필요한 32비트 패키지를 추가로 설치해주면 문제가 해결됩니다.


[root@sysdocu src] # yum install glibc.i686 ia32-libs libstdc++.i686 compat-libstdc++-33.i686



반응형

댓글()

[이클립스] Android 프로젝트 가져오기 및 AVD(가상 단말기) 설치 및 디버그 모드 활용

반응형

이전에 작성한 게시물(http://sysdocu.tistory.com/725) 그대로 환경을 구축하고, 외부에서 (별도로) 진행되었던 프로젝트를 가져와서 빌딩하면 모듈이 없다는 에러 메세지가 출력 될 때가 있습니다.

이때는 아래와 같은 절차로 진행이 가능니다.



[프로젝트 가져오기]

이클립스 실행 > 왼쪽 'Package Explorer' 빈 공간에서 마우스 우클릭 > Import 선택 >  'Android' 의 'Existing Android Code Into Workspace' 선택 > Next > 'Root Directory' 찾아보기에서 해당 프로젝트 디렉토리 선택 > Next > Finish


* 가져온 프로젝트 빌딩하기

이클립스 실행 > 왼쪽 'Package Explorer' 빈 공간에서 해당 프로젝트를 마우스 우클릭 > 'Debug As' 의 'Android Application' 선택

(만약 하단의 AVD 설치 또는 디버그 모드를 선택 하였다면, 이 과정에서 해당 단말기에 패키지가 자동설치, 구동 됩니다.)



[AVD 설]

빌딩된 apk 를 핸드폰으로 다운로드하여 설치하고, 실행하여 동작이 잘되는지 여부를 체크하는것이 번거로우므로 컴퓨터에 가상 모바일단말기를 설치하여 시뮬레이션 해볼 수 있습니다.


상단 메뉴 'Windows' 선택 > 'Android Virtual Device Manager' 선택 > Create 선택 후, 아래 내용 입력


- AVD Name : test

- Device : Nexus 7 (2012) (7.0", 800 x 1280: tvdpi)

- CPU/ABI : MIPS (mips)

- Skin : No skin

- Front Camera : None

- Memory Options: RAM: 1024  VM Heap: 32

- Internal Storage : 512 MiB


> OK



[Debug mode 선택]

사용하고 있는 스마트폰과 컴퓨터와 연결한 뒤, 스마트폰에서 '개발자 Debug mode' 를 허용하면, 위에서 설명한 'Android Virtual Device (AVD) Manager' 에서 스마트폰이 잡히게 됩니다. 이를 선택하게 되면, 추후 프로젝트를 빌딩할때 스마트폰에 직접 apk 패키지가 설치, 실행되게 됩니다.



[작성] 차동훈


반응형

댓글()

AlertDialog 메시지 창 띄우기

프로그래밍/Android (Java)|2015. 1. 27. 11:07
반응형

[공통]

import android.content.DialogInterface;

import android.app.AlertDialog;

import android.view.View.OnClickListener;




메세지를 띄우고 [확인] 버튼만 적용할 경우

1
2
3
4
5
6
7
8
9
AlertDialog.Builder alert = new AlertDialog.Builder(MyActivity.this);
alert.setPositiveButton("확인", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    dialog.dismiss();     //닫기
    }
});
alert.setMessage("테스트 메세지");
alert.show();



메세지를 띄우고 [확인], [취소] 버튼으로 적용할 경우


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
AlertDialog.Builder alert_confirm = new AlertDialog.Builder(MyActivity.this);
alert_confirm.setMessage("프로그램을 종료 하시겠습니까?").setCancelable(false).setPositiveButton("확인",
new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // 'YES'
    }
}).setNegativeButton("취소",
new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // 'No'
    return;
    }
});
AlertDialog alert = alert_confirm.create();
alert.show();


[출처] http://shstarkr.tistory.com/144



뒤로가기로 종료하려고 할때 해당 alert 창이 뜨도록 하려면 아래 URL 을 병합하여 사용하자. - 동훈

http://sysdocu.tistory.com/942

반응형

댓글()

webview 배경색 변경

프로그래밍/Android (Java)|2015. 1. 27. 11:06
반응형

So in my views .xml file I simply added a

android:background="@+drawable/backgroundmain"

and use

web.setBackgroundColor(0);

To make the webview transparent to see the background image behind.


[출처] http://stackoverflow.com/questions/1260422/setting-webview-background-image-to-a-resource-graphic-in-android

반응형

댓글()

Preference 기본 예제

프로그래밍/Android (Java)|2015. 1. 27. 11:06
반응형

SharedPreferences pref = getSharedPreferences("setting", 0);    // setting.xml 으로 생성

SharedPreferences.Editor edit = pref.edit();


// 호출

String test = pref.getString("fcm_message", "old_data");


// 입력

edit.putString("fcm_message", "new_data");

edit.commit();



* 참고

setting.xml 과 같이 파일명을 지정하지 않고 default 값을 원할 경우 아래와 같이 사용합니다.


SharedPreferences pref = getDefaultSharedPreferences(this);


반응형

'프로그래밍 > Android (Java)' 카테고리의 다른 글

AlertDialog 메시지 창 띄우기  (0) 2015.01.27
webview 배경색 변경  (0) 2015.01.27
아이디 및 패스워드 저장 체크박스  (0) 2015.01.27
Intent 활용 예시  (0) 2015.01.27
배경 패턴이미지 적용  (0) 2015.01.27

댓글()

아이디 및 패스워드 저장 체크박스

프로그래밍/Android (Java)|2015. 1. 27. 11:05
반응형

간단한 예제



프레퍼런스를 활용한 예제


원하는 항목을 체크한뒤 종료하면


다시 실행했을 때 체크했던 항목이 불려져온다


체크하지 않았던 항목은 삭제된다



 MytestPref.zip


[출처] WareHouse (http://makerj.tistory.com/100)


반응형

'프로그래밍 > Android (Java)' 카테고리의 다른 글

webview 배경색 변경  (0) 2015.01.27
Preference 기본 예제  (0) 2015.01.27
Intent 활용 예시  (0) 2015.01.27
배경 패턴이미지 적용  (0) 2015.01.27
자바 날짜/시간 계산 예제 코드 (다양한 예제) 2  (0) 2015.01.27

댓글()

Intent 활용 예시

프로그래밍/Android (Java)|2015. 1. 27. 11:05
반응형

// 웹페이지 띄우기
Uri uri = Uri.parse("http://www.google.com");
Intent it  = new Intent(Intent.ACTION_VIEW,uri);
startActivity(it);


// 구글맵 띄우기
Uri uri = Uri.parse("geo:38.899533,-77.036476");
Intent it = new Intent(Intent.Action_VIEW,uri);
startActivity(it);


// 구글 길찾기 띄우기
Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=출발지주소&daddr=도착지주소&hl=ko");
Intent it = new Intent(Intent.ACTION_VIEW,URI);
startActivity(it);


// 전화 걸기
Uri uri = Uri.parse("tel:xxxxxx");
Intent it = new Intent(Intent.ACTION_DIAL, uri);  
startActivity(it); 


Uri uri = Uri.parse("tel.xxxxxx");
Intent it = new Intent(Intent.ACTION_CALL,uri);
// 퍼미션을 잊지 마세요. <uses-permission id="android.permission.CALL_PHONE" />


// SMS/MMS 발송
Intent it = new Intent(Intent.ACTION_VIEW);   
it.putExtra("sms_body", "The SMS text");   
it.setType("vnd.android-dir/mms-sms");   
startActivity(it); 


// SMS 발송
Uri uri = Uri.parse("smsto:0800000123");   
Intent it = new Intent(Intent.ACTION_SENDTO, uri);   
it.putExtra("sms_body", "The SMS text");   
startActivity(it); 


// MMS 발송
Uri uri = Uri.parse("content://media/external/images/media/23");   
Intent it = new Intent(Intent.ACTION_SEND);   
it.putExtra("sms_body", "some text");   
it.putExtra(Intent.EXTRA_STREAM, uri);   
it.setType("image/png");   
startActivity(it);


// 이메일 발송
Uri uri = Uri.parse("mailto:xxx@abc.com");
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(it);


Intent it = new Intent(Intent.ACTION_SEND);   
it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");   
it.putExtra(Intent.EXTRA_TEXT, "The email body text");   
it.setType("text/plain");   
startActivity(Intent.createChooser(it, "Choose Email Client")); 


Intent it = new Intent(Intent.ACTION_SEND);     
String[] tos = {"me@abc.com"};     
String[] ccs = {"you@abc.com"};     
it.putExtra(Intent.EXTRA_EMAIL, tos);     
it.putExtra(Intent.EXTRA_CC, ccs);     
it.putExtra(Intent.EXTRA_TEXT, "The email body text");     
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");     
it.setType("message/rfc822");     
startActivity(Intent.createChooser(it, "Choose Email Client"));  


// extra 추가하기
Intent it = new Intent(Intent.ACTION_SEND);   
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");   
it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");   
sendIntent.setType("audio/mp3");   
startActivity(Intent.createChooser(it, "Choose Email Client"));


// 미디어파일 플레이 하기
Intent it = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/song.mp3");
it.setDataAndType(uri, "audio/mp3");
startActivity(it);


Uri uri = Uri.withAppendedPath(
  MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");   
Intent it = new Intent(Intent.ACTION_VIEW, uri);   
startActivity(it); 


// 설치 어플 제거
Uri uri = Uri.fromParts("package", strPackageName, null);   
Intent it = new Intent(Intent.ACTION_DELETE, uri);   
startActivity(it);


// APK파일을 통해 제거하기
Uri uninstallUri = Uri.fromParts("package", "xxx", null);
returnIt = new Intent(Intent.ACTION_DELETE, uninstallUri);


// APK파일 설치
Uri installUri = Uri.fromParts("package", "xxx", null);
returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);


// 음악 파일 재생
Uri playUri = Uri.parse("file:///sdcard/download/everything.mp3");
returnIt = new Intent(Intent.ACTION_VIEW, playUri);


// 첨부파일을 추가하여 메일 보내기
Intent it = new Intent(Intent.ACTION_SEND);  
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");  
it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/eoe.mp3");  
sendIntent.setType("audio/mp3");  
startActivity(Intent.createChooser(it, "Choose Email Client"));


// 마켓에서 어플리케이션 검색
Uri uri = Uri.parse("market://search?q=pname:pkg_name");  
Intent it = new Intent(Intent.ACTION_VIEW, uri);  
startActivity(it);  
// 패키지명은 어플리케이션의 전체 패키지명을 입력해야 합니다.


// 마켓 어플리케이션 상세 화면
Uri uri = Uri.parse("market://details?id=어플리케이션아이디");  
Intent it = new Intent(Intent.ACTION_VIEW, uri);  
startActivity(it);
// 아이디의 경우 마켓 퍼블리싱사이트의 어플을 선택후에 URL을 확인해보면 알 수 있습니다.


// 구글 검색
Intent intent = new Intent();
intent.setAction(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY,"searchString")
startActivity(intent);[/code]

[출처] 아이군의 블로그 (http://theeye.pe.kr/archives/1242)

반응형

댓글()