배워서남준다

자주 사용하는 앱 개발 구문

Study4U, 2019-01-10 15:33:10

조회 수
46
추천 수
0

앱 개발하면서 자주 사용하는 구문들을 정리한다.


1. 권한 요청


// 싱글권한


if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {


    if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext, Manifest.permission.READ_PHONE_STATE)) {


        Toast.makeText(this, "권한 동의가 필요합니다.", Toast.LENGTH_SHORT).show();


    }


} else {


    TelephonyManager tManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);


    otherinfo = "IMEI: " + tManager.getDeviceId() + " / TEL: " + tManager.getLine1Number() + " / SERIAL: " + Build.SERIAL + " / SIM: " + tManager.getSubscriberId();


    phoneno = tManager.getLine1Number();


}



//다중권한


if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {


    int permissionSendSMS = ContextCompat.checkSelfPermission(context, Manifest.permission.SEND_SMS);

    int permissionReceiveSMS = ContextCompat.checkSelfPermission(context, Manifest.permission.RECEIVE_SMS);

    int permissionReadPHONESTATE = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE);

    List<String> listPermissionsNeeded = new ArrayList<>();

    if (permissionSendSMS != PackageManager.PERMISSION_GRANTED) {

        listPermissionsNeeded.add(Manifest.permission.SEND_SMS);

    }

    if (permissionReceiveSMS != PackageManager.PERMISSION_GRANTED) {

        listPermissionsNeeded.add(Manifest.permission.RECEIVE_SMS);

    }

    if (permissionReadPHONESTATE != PackageManager.PERMISSION_GRANTED) {

        listPermissionsNeeded.add(Manifest.permission.READ_PHONE_STATE);

    }


    if (!listPermissionsNeeded.isEmpty()) {

        ActivityCompat.requestPermissions(IntroActivity.this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]),1000);

        Toast.makeText(getApplicationContext(), "권한 동의가 필요합니다.", Toast.LENGTH_SHORT).show();


        // 이전화면으로 전환


        finish();

    }

    else

    {

        //권한승인후 처리 구문

    }

}



2. 서버 정보 전달

String urlParameters = "mid=모듈&act=액션&info="+info;

POSTinfo post_info = new POSTinfo(url, null);


post_info.execute();


public class POSTinfo extends AsyncTask<Void, Void, String> {

    private final String url;

    private ContentValues values;


    String respon="";

    String Info ="";


    public Saltinfo(String url, ContentValues values) {

        this.url = url;

        this.values = values;

    }


    @Override

    protected String doInBackground(Void... params) {

        respon = ResponseHttpurlconnetion(url);

        if(respon != null && !respon.equals("noresponse")) {

            try {

                JSONObject responseJSON = new JSONObject(respon);

                Info = (String) responseJSON.get("info");

            } catch (Exception e) {

                e.printStackTrace();

            }

        }

        return Info;

    }


    @Override

    protected void onPostExecute(String s) {

        super.onPostExecute(s);

        //doInBackground()로 부터 리턴된 값이 onPostExecute()의 매개변수로 넘어오므로 s를 출력한다.

        tx_telno_s.setText(s);

    }

}

public String ResponseHttpurlconnetion(String urlParameters) {

    URL obj;

    InputStream is = null;

    ByteArrayOutputStream baos = null;

    HttpURLConnection con = null;

    String response = "";

    try {

        CookieManager cookieManager = CookieManager.getInstance();

        String cookie = cookieManager.getCookie(new URL(URL_home).getHost());

        obj = new URL(URL_home);

        con = (HttpURLConnection) obj.openConnection();

        // Send post request

        con.setDoOutput(true);

        con.setDoInput(true);

        //add reuqest header

        con.setRequestMethod("POST");

        con.setRequestProperty("Referer", URL_home);

        con.setRequestProperty("Cookie", cookie);

        con.setRequestProperty("User-Agent",userAgentThis);

        con.setConnectTimeout(5000);

        con.setReadTimeout(5000);


        DataOutputStream wr = new DataOutputStream(con.getOutputStream());

        wr.write(urlParameters.getBytes("UTF-8"));

        wr.flush();


        int responseCode = con.getResponseCode();

        System.out.println("\nSending 'POST' request to URL : " + URL_home);

        System.out.println("Response Code : " + responseCode);

        if (responseCode == HttpURLConnection.HTTP_OK) {

            is = con.getInputStream();

            baos = new ByteArrayOutputStream();

            byte[] byteBuffer = new byte[1024];

            byte[] byteData = null;

            int nLength = 0;

            while ((nLength = is.read(byteBuffer, 0, byteBuffer.length)) != -1) {

                baos.write(byteBuffer, 0, nLength);

            }

            byteData = baos.toByteArray();

            response = new String(byteData);

        } else {

            response = "noresponse";

        }

        wr.close();

    } catch (Exception e) {

        e.printStackTrace();

        response = "error";

    } finally {

        if (con != null) con.disconnect();

    }

    return response;

}



3. 뷰 레이아웃 등록, 화면 제어 클래스 추가 

## layout폴더에 info_layout.xml 추가 등록

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical" android:layout_width="match_parent"

    android:layout_height="match_parent">

    <!-- 상단 타이틀 -->

    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="55dp"

        android:gravity="center_vertical"

        android:background="@color/colorset">

        <LinearLayout

            android:layout_width="wrap_content"

            android:layout_height="wrap_content">

            <TextView

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:textColor="#ffffff"

                android:layout_gravity="start|center_vertical"

                android:text="@string/infomation"

                android:textSize="20dp"

                android:paddingLeft="22dp" />

        </LinearLayout>

    </LinearLayout>


    <!-- 한줄 라인 -->

    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="1px" android:background="#b3b3b3"/>


    <ScrollView

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:fillViewport="true"

        android:background="#f0f0f0">


        <!-- 카테고리 -->

        <LinearLayout

            android:layout_width="match_parent"

            android:layout_height="40dp"

            android:background="#f0f0f0"

            android:orientation="vertical"

            android:gravity="center_vertical">


            <TextView

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:textColor="#999999"

                android:layout_gravity="start|center_vertical"

                android:text="@string/info"

                android:textSize="14dp"

                android:paddingLeft="22dp"

                android:layout_marginTop="5dp"/>

        </LinearLayout>


        <!-- 한줄 라인 -->

        <LinearLayout

            android:layout_width="match_parent"

            android:layout_height="1px" android:background="#dbdbdb" />


        <!-- info버튼 : 시작 -->

        <LinearLayout

            android:paddingLeft="20dp"

            android:id="@+id/infobtn"

            android:layout_width="match_parent"

            android:layout_height="60dp"

            android:background="#ffffff"

            android:orientation="horizontal"

            android:gravity="center_vertical">


            <TextView

                android:id="@+id/tx_info"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:textColor="#333333"

                android:text="@string/txtinfo"

                android:textSize="17dp"/>

            <!-- 하위상세정보버튼 -->

            <LinearLayout

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:gravity="center_vertical|right"

                android:orientation="horizontal">


                <TextView

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:textColor="#999999"

                    android:textSize="22dp"

                    android:id="@+id/tx_infobtn"

                    android:layout_marginRight="15dp"/>

            </LinearLayout>


        </LinearLayout>

        <!-- info버튼 : 끝 -->


        <!-- 한줄 라인 -->

        <LinearLayout

            android:id="@+id/div_infobtn"

            android:paddingLeft="20dp"

            android:orientation="horizontal"

            android:layout_width="match_parent"

            android:layout_height="1px" android:background="#dbdbdb"/>


        <!-- 한줄 라인 -->

        <LinearLayout

            android:layout_width="match_parent"

            android:layout_height="1px" android:background="#b3b3b3"/>


    </ScrollView>

</LinearLayout>



## java 폴더아래에 화면과 이벤트 처리를 담당할 팩키지 파일을 생성한다.

package 도메인.앱명;


import android.app.Activity;

import android.app.AlertDialog;

import android.app.NotificationManager;

import android.content.Context;

//필요로하는 프로젝트 팩키지 임포트


public class InfomationActivity extends Activity {



    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.info_layout);


    }

}


4. SMS 발송

// SMS 발송

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

smsTextContext = (EditText) findViewById(R.id.smsText);


 



public void sendSMS(View v){

    String smsNum = smsNumber.getText().toString();

    String smsText = smsTextContext.getText().toString();


    if (smsNum.length()>0 && smsText.length()>0){

        textSMS(smsNum, smsText);

    }else{

        Toast.makeText(this, "모두 입력해 주세요", Toast.LENGTH_SHORT).show();

    }

}


 


public void textSMS(String smsNumber, String smsText){

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

    PendingIntent deliveredIntent = PendingIntent.getBroadcast(this, 0, new 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"));


 


    try {

        SmsManager mSmsManager = SmsManager.getDefault();

        mSmsManager.sendTextMessage(smsNumber, null, smsText, sentIntent, deliveredIntent);

    }

    catch(Exception e){

        Toast.makeText(this, "전송실패", Toast.LENGTH_SHORT).show();

    }


}



5. 기기정보 가져오기

// Here, thisActivity is the current activity

if (ContextCompat.checkSelfPermission(context,Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {

  // Should we show an explanation?

  if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.READ_CONTACTS)) {

    TelephonyManager tManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

    tminfo = tManager.getDeviceId();

  } else {

    // No explanation needed, we can request the permission.

  }

}


// 기기 맥정보

wifi_mac = nw_info.getMACAddress("eth0");

if (wifi_mac.length() < 1) wifi_mac = nw_info.getMACAddress("wlan0");

if (wifi_mac.length() < 1) wifi_mac = nw_info.getMacAddr();


if (wifi_mac.length() < 1 || wifi_mac == null) {

  WifiManager wifimng = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

  wifi_mac = wifimng.getConnectionInfo().getMacAddress();

}


//TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

//tminfo = tm.getMeid();


String otherinfo = "IMEI: " + tm.getDeviceId() + " / TEL: " + tm.getLine1Number() + " / SERIAL: " + Build.SERIAL + " / SIM: "+ tm.getSubscriberId();


/*

String tvSN = "";

if(wifi_mac.length() > 0) {

  tvSN = nw_info.ResponseHttconn("http://pay.aproworld.net/customer/sn/" + wifi_mac);

  System.out.println("TV SN Code : " + tvSN);

  if(tvSN.length() > 0) {

    tv_SN = tvSN.replace("\"", "");

  }

}

*/


0 댓글

목록

Page 1 / 5
번호 제목 날짜 조회 수
공지

IE에서 영상 또는 슬라이드 반응속도가 느린경우 해결방법

| 일반
  • file
2012-09-22 2525
91

Android 앱에서 서버 통신 방법

| 안드로이드
  • file
2019-03-15 48
90

Android WebView Sample

| 안드로이드
  • file
2019-03-14 35
89

사이트에 SNS 공유 버튼 등록방법

  • file
2019-03-05 64
88

IONIC for Synology

2019-02-26 41
87

Install NGINX + PHP + MARIADB for MAC

| 웹개발 1
2019-01-10 87
86

자주 사용하는 앱 개발 구문

2019-01-10 46
85

안드로이드 앱 제작 환경설정

| 안드로이드
  • file
2019-01-10 80
84

구글 캘린더 API 설정 방법

| 웹개발
  • file
2019-01-10 38
83

KT KOS, RDS 엑셀 보안문서를 엑셀 일반 문서로 변환하는 방법

| 일반 1
2019-01-09 66
82

Web Station(웹서버) 설정 for SYNOLOGY

| 웹개발
2019-01-09 53
81

USB 지정된 파일을 찾을 수 없습니다

| 일반
  • file
2017-09-23 1862
80

PHP 환경값 재설정 - for QNAP

2017-08-29 608
79

Oracle 12c 설치시 문제 해결 - 리눅스버전

2017-07-01 669
78

redmoon DB 설치

| 일반
  • file
2017-06-06 2415
77

CENTOS 7 초기 설정 가이드

| 웹개발
2016-07-24 2396
76

USB 메모리 인식불량일때

| 일반
2016-07-23 1191
75

"web" 공유 폴더에 있는 내 폴더를 권한없는 액세스로부터 어떻게 보호합니까?

  • file
2016-06-08 704
74

icecast & ices0 in 'synology' ? synices : icestation

2016-06-04 966
73

웹브라우저에서 마우스 클릭시 팝업 광고 문제 해결방법

2016-01-12 363
72

MySQL 사용자 권한 복구

  • file
2015-09-16 532

Board Links

Page Navigation