λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
APP/ANDROID

[λΆ€μŠ€νŠΈμ½”μŠ€] λΈŒλ‘œλ“œμΊμŠ€νŠΈ μˆ˜μ‹ μž/μœ„ν—˜ κΆŒν•œ

by mingzoo 2020. 2. 21.

λΈŒλ‘œλ“œμΊμŠ€νŠΈ μˆ˜μ‹ μž(Broadcast Receiver)

λΈŒλ‘œλ“œμΊμŠ€νŠΈ(Broadcast) : 방솑을 ν•˜λŠ”κ²ƒ

      예) μ±„νŒ… μ•±μ—μ„œ μΌλŒ€μΌ μ±„νŒ…μ„ ν•  λ•Œ λ©”μ‹œμ§€λŠ” 두 μ‚¬λžŒλΌλ¦¬ μ£Όκ³ λ°›μ§€λ§Œ μ—¬λŸ¬ μ‚¬λžŒμ—κ²Œ ν•œκΊΌλ²ˆμ— μ „λ‹¬ν•˜κ³  싢을 λ•ŒλŠ” κ·Έλ£Ή μ±„νŒ…λ°©μ„             λ§Œλ“€μ–΄ ν•œ 번 μ“΄ 글을 μ—¬λŸ¬ μ‚¬λžŒμ—κ²Œ μ „λ‹¬ν•˜λŠ” 것

λ„€νŠΈμ›Œν¬λΆ„μ•Όμ—μ„œμ˜ μœ λ‹ˆμΊμŠ€νŠΈ/λ©€ν‹°μΊμŠ€νŠΈ/λΈŒλ‘œλ“œμΊμŠ€νŠΈμ™€ κ°œλ…μ΄ μœ μ‚¬

λΈŒλ‘œλ“œμΊμŠ€νŒ… λ©”μ‹œμ§€λŠ” μΈν…νŠΈ 객체둜 λ§Œλ“€μ–΄μ Έ μ „λ‹¬λœλ‹€.

각쒅 μ•±μ—μ„œ λ°œμƒν•˜λŠ” 이벀트λ₯Ό μΊμΉ˜ν•œ ν›„, λ¦¬μ‹œλ²„λ‘œ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ ν•΄μ£Όκ³ , "λ°©μ†‘ν•˜κΈ°=>μˆ˜μ‹ ν•˜κΈ°"의 μ‚¬μ΄ν΄λ‘œ λ™μž‘λœλ‹€.

 

<λ¦¬μ‹œλ²„μ˜ μ’…λ₯˜>

정적 λ¦¬μ‹œλ²„

  1. ν•œ 번 λ“±λ‘λ˜λ©΄ ν•΄μ œ X
  2. μ•± μ„€μΉ˜μ‹œ, μžλ™ 등둝

 

동적 λ¦¬μ‹œλ²„

  1. 등둝, ν•΄μ§€μ˜ 자유
  2. manifest에 λ“±λ‘ν•˜μ§€ μ•Šκ³ , μ†ŒμŠ€μ— 등둝을 ν•œλ‹€

μœ„ν—˜ κΆŒν•œ

λ§ˆμ‹œλ©œλ‘œ λ²„μ „λΆ€ν„°λŠ” κΆŒν•œμ„ 일반 κΆŒν•œ(Normal Permission)κ³Ό μœ„ν—˜ κΆŒν•œ(Dangerous Permission)으둜 λ‚˜λˆ„μ—ˆλ‹€. μ‚¬μš©μžκ°€ μ•„λ¬΄λŸ° 생각없이 앱을 μ„€μΉ˜ν•˜λŠ” κ²½μš°κ°€ λ§Žμ•„μ§€λ©΄μ„œ, κΆŒν•œ ν—ˆμš©μ„ μ‚¬μš©μžμ—κ²Œ μš”μ²­ν•˜λŠ” 것이닀.

일반 κΆŒν•œ

앱을 μ„€μΉ˜ν•  μ‹œμ μ— λ¬Όμ–΄λ³΄κ²Œ λ©λ‹ˆλ‹€. 보톡 μ‚¬λžŒλ“€μ€ 앱을 μ„€μΉ˜ν•  λ•Œ μ΄λŸ¬ν•œ κΆŒν•œμ— λŒ€ν•΄ λ³„λ‘œ μ‹ κ²½ 쓰지 μ•Šκ³  μ„€μΉ˜ν•˜μ˜€κΈ° λ•Œλ¬Έμ— 과거의 단말듀은 μ΄λŸ¬ν•œ 앱듀에 μ˜ν•΄ ꡉμž₯히 λ…ΈμΆœλ˜μ–΄μžˆλ‹€.

μœ„ν—˜ κΆŒν•œ

앱을 μ‹€ν–‰ν•  λ•Œ μƒμ„±λ˜λŠ” κΆŒν•œμœΌλ‘œ 앱을 μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ μœ„ν—˜ κΆŒν•œ ν•˜λ‚˜ν•˜λ‚˜ μ‚¬μš©μžκ°€ 읽어보고 μˆ˜λ½ν•΄μ•Ό ν•©λ‹ˆλ‹€λ§Œμ•½ μ‚¬μš©μžκ°€ ν•˜λ‚˜λΌλ„ μˆ˜λ½ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ 앱을 μ‹€ν–‰ν•  수 μ—†λŠ” 것이닀.

μœ„ν—˜ κΆŒν•œμ˜ μ’…λ₯˜

 

SMS κΆŒν•œ 섀정을 ν†΅ν•œ μœ„ν—˜ κΆŒν•œ 섀정법

public class MainActivity extends AppCompatActivity {

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

    int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS);
    if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
        Toast.makeText(this, "SMS μˆ˜μ‹  κΆŒν•œ 있음.", Toast.LENGTH_LONG).show();
    } else {
        Toast.makeText(this, "SMS μˆ˜μ‹  κΆŒν•œ μ—†μŒ.", Toast.LENGTH_LONG).show();
        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECEIVE_SMS)) {
            Toast.makeText(this, "SMS κΆŒν•œ μ„€λͺ… ν•„μš”ν•¨.", Toast.LENGTH_LONG).show();
        } else {
            ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.RECEIVE_SMS}, 1);
        }
    }

}

<μΆ”κ°€ μ„€λͺ…>

- PERMISSION_GRANTED

μ‚¬μš©μžκ°€ ν•΄λ‹Ή 앱에 κΆŒν•œμ„ μˆ˜λ½ν–ˆλŠ”μ§€ λ‚˜νƒ€λ‚΄λŠ” μƒμˆ˜ κ°’μž…λ‹ˆλ‹€.

- requestPermissons() 

λ§Œμ•½ λ‹¨λ§κΈ°μ—μ„œ 앱에 λŒ€ν•œ SMS κΆŒν•œμ„ 가지고 μžˆμ§€ μ•Šλ‹€λ©΄ κΆŒν•œ μš”μ²­μ„ μœ„ν•œ λŒ€ν™”μƒμžλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€. μ΄λ•Œ λŒ€ν™”μƒμžλŠ” μ‹œμŠ€ν…œμ—μ„œ μžλ™μœΌλ‘œ λ§Œλ“€μ–΄ λ„μ›Œμ£ΌκΈ° λ•Œλ¬Έμ— μ‚¬μš©μžκ°€ μ„ νƒν•˜λŠ” 값에 따라 처리만 ν•΄μ£Όλ©΄ λ©λ‹ˆλ‹€.

- checkSelfPermmision()

일단 ν•΄λ‹Ή λ‹¨λ§κΈ°μ—μ„œ 이 앱에 λŒ€ν•œ SMS κΆŒν•œμ„ 가지고 μžˆλŠ”μ§€ μ²΄ν¬ν•˜λŠ” λ©”μ†Œλ“œμž…λ‹ˆλ‹€. 앱을 μ‹€ν–‰ν•  λ•Œλ§ˆλ‹€ κΆŒν•œ 체크λ₯Ό ν•œλ‹€λ©΄ μƒλ‹Ήνžˆ λΆˆνŽΈν•˜κ² μ£ .

-  onRequestPermissionsResult()

requestPermissons() λ©”μ†Œλ“œμ—μ„œ ν˜ΈμΆœν•œ λŒ€ν™”μƒμžμ—μ„œ μ‚¬μš©μžκ°€ μ„ νƒν•œ 값이 이 λ©”μ†Œλ“œλ‘œ μ „λ‹¬λ˜μ–΄ μžλ™μœΌλ‘œ μ‹€ν–‰λ©λ‹ˆλ‹€. λ§Œμ•½ SMS κΆŒν•œλΏλ§Œ μ•„λ‹ˆλΌ λ‹€λ₯Έ κΆŒν•œλ„ 같이 μš”μ²­ν•œλ‹€λ©΄ greatResults λ°°μ—΄ λ³€μˆ˜ μ•ˆμ— 순차적으둜 μ‚¬μš©μžμ˜ 선택 값이 μ „λ‹¬λ©λ‹ˆλ‹€.

 

 

728x90