Android Studio 13일차

2021. 11. 17. 13:58Android Development

google 지도 사용해보기2

더보기
package com.example.test27;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.GroundOverlayOptions;
import com.google.android.gms.maps.model.LatLng;

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
    // OnMapReadyCallback : 구글 지도 서비스와 연동이 되면
    // OnMapReady 메소드 실행
    GoogleMap gMap; // 지도 객체
    MapFragment mapFrag; // 지도에 사용되는 약도
    GroundOverlayOptions videoMark; // 지도 위에 표시할 마크.

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("구글 지도 활용");

        mapFrag = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
        mapFrag.getMapAsync(this);
        //sync : 동기화
        //Async : 비동기화
    }

    @Override
    public void onMapReady(@NonNull GoogleMap map) {
        gMap = map; // 지도 조작을 위한 핸들링 객체
        gMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); // 위성 지도
        gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
                new LatLng(37.568256, 126.897240), 17));
        // 보고자 하는 지도 위치를 변경하고, 배율을 지정.
        gMap.getUiSettings().setZoomControlsEnabled(true);
        // 우측 하단의 지도 배율 조정 아이콘 활성화.
        gMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
            @Override
            public void onMapClick(LatLng point) {
                videoMark = new GroundOverlayOptions().image(
                        BitmapDescriptorFactory
                                .fromResource(R.drawable.presence_video_busy))
                        .position(point, 100f, 100f);
                gMap.addGroundOverlay(videoMark);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        menu.add(0, 1, 0, "위성 지도");
        menu.add(0, 2, 0, "일반 지도");
        menu.add(0, 3, 0, "인천일보 아카데미 바로가기");
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case 1:
                gMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
                return true;
            case 2:
                gMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                return true;
            case 3:
                gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(
                        37.438806, 126.675070), 17));
                return true;
        }
        return false;
    }
}

서비스 테스트

더보기
package com.example.test28;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("서비스 테스트 예제");

        Intent i = new Intent(this,MusicService.class);
        Button btStart = findViewById(R.id.btStart);
        Button btStop = findViewById(R.id.btStop);

        btStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startService(i);
                android.util.Log.i("서비스 테스트","startService()");
            }
        });

        btStop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                stopService(i);
                android.util.Log.i("서비스 테스트","stopService()");
            }
        });
    }
}

MainActivity

package com.example.test28;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;

import androidx.annotation.Nullable;

public class MusicService extends Service {
    MediaPlayer mp;
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        // 묶어서 서비스로 한번에 실행
        return null;
    }

    @Override
    public void onCreate() {
        android.util.Log.i("서비스 테스트","onCreate()");
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        android.util.Log.i("서비스 테스트", "onStartCommand()");
        mp = MediaPlayer.create(this,R.raw.song1);
        mp.setLooping(true);
        mp.start();
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        android.util.Log.i("서비스 테스트","onDestroy()");
        mp.stop();
        super.onDestroy();
    }
}

MusicService

<service android:name=".MusicService" android:exported="true">
            <intent-filter>
                <action android:name="com.example.MusicService" />
            </intent-filter>
        </service>

 

manifest에 추가

배터리 상태 체크 앱 만들기

더보기
package com.example.test28;

import androidx.appcompat.app.AppCompatActivity;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {

    ImageView ivBattery;
    EditText edtBattery;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("배터리 상태 체크");

        ivBattery = findViewById(R.id.imageView);
        edtBattery = findViewById(R.id.editTextTextPersonName);
    }

    @Override
    protected void onPause() {
        //액티비티 일시 정지
        super.onPause();
        unregisterReceiver(br);
    }

    @Override
    protected void onResume() {
        //일시정지 후 재개
        super.onResume();
        IntentFilter iFilter = new IntentFilter();
        iFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
        registerReceiver(br, iFilter);
    }

    BroadcastReceiver br = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            //하드웨어의 변경 사항을 인텐트 형태로 방송하면, 이 메소드에서 수신.
            String action = intent.getAction();
            //인텐트 안에서 액션 정보 가져오기

            if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
                //배터리 상태가 변경 되었다면,
                int remain = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0);
                //배터리 사용 잔량 확인.
                edtBattery.setText("현재 충전량 : " + remain + "\n");

                if (remain >= 90) {
                    ivBattery.setImageResource(R.drawable.battery_100);
                }else if (remain >= 70){
                    ivBattery.setImageResource(R.drawable.battery_80);
                }else if (remain >= 50) {
                    ivBattery.setImageResource(R.drawable.battery_60);
                }else if (remain >= 10) {
                    ivBattery.setImageResource(R.drawable.battery_20);
                }else {
                    ivBattery.setImageResource(R.drawable.battery_0);
                }
                int plug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
                //충전 아답터 연결 여부 확인.
                switch (plug){
                    case 0:
                        edtBattery.append("전원 연결 : 안됨");
                        break;
                    case BatteryManager.BATTERY_PLUGGED_AC:
                        edtBattery.append("전원 연결 : 어댑터 연결됨");
                        break;
                    case BatteryManager.BATTERY_PLUGGED_USB:
                        edtBattery.append("전원 연결 : USB 연결됨");
                        break;
                }
            }
        }
    };
}

통화기록 확인하기

더보기
package com.example.test28;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import android.Manifest;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.CallLog;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends AppCompatActivity {

    Button btnCall;
    EditText edtCall;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_CALL_LOG}, MODE_PRIVATE);

        btnCall = findViewById(R.id.btCall);
        edtCall = findViewById(R.id.etCall);

        btnCall.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                edtCall.setText(getCallHistory());
            }
        });
    }
    public String getCallHistory() {
        String[] callSet = new String[]{CallLog.Calls.DATE, CallLog.Calls.TYPE, CallLog.Calls.NUMBER, CallLog.Calls.DURATION};

        Cursor c = getContentResolver().query(CallLog.Calls.CONTENT_URI, callSet, null,null,null);

        if (c.getCount() == 0){
            return "통화 기록 없음";
        }
        StringBuffer callBuff = new StringBuffer();
        callBuff.append("\n날짜 : 구분 : 전화번호 : 통화시간\n\n");
        c.moveToFirst();

        do {
            long callDate = c.getLong(0);
            SimpleDateFormat datePattern = new SimpleDateFormat("yyyy-MM-dd");
            String date_str = datePattern.format(new Date(callDate));
            callBuff.append(date_str + ":");
            if (c.getInt(1) == CallLog.Calls.INCOMING_TYPE)
                callBuff.append("착신 : ");
            else
                callBuff.append("발신 : ");
            callBuff.append(c.getString(2) + " : ");
            callBuff.append(c.getString(3) + " 초\n");
        }while (c.moveToNext());

        c.close();
        return callBuff.toString();
    }
}
<uses-permission android:name="android.permission.READ_CALL_LOG"/>

read_call_log 퍼미션도 추가해야함

'Android Development' 카테고리의 다른 글

Google Firebase 환경설정.  (0) 2021.11.29
Android semiProject  (0) 2021.11.24
Android Studio 12일차  (0) 2021.11.16
Android Studio 11일차  (0) 2021.11.15
Android Studio 10일차  (0) 2021.11.12