Android Studio 13일차
2021. 11. 17. 13:58ㆍAndroid 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 |