일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스위프트 웹뷰
- swift autolayout
- NotificationService Extension
- swift sms
- 스위프트 푸시
- Swift flutterviewcontroller
- FlutterView MethodChannel
- 안드로이드 바로가기
- Flutter NativeView
- swift 문자
- native flutter view
- 스위프트
- 앱 백그라운드 푸시 데이터 저장
- 안드로이드 앨범
- 플러터 뷰 컨트롤러
- 앱 꺼졌을 때 푸시 데이터 저장
- 스위프트 테이블 뷰 셀
- 스위프트 UserDefaults
- 안드로이드 FCM
- 스위프트 카메라
- Swift flutterview
- 안드로이드 에러
- silent push
- 푸시 데이터 저장
- Flutter UIKitView MethodChannel
- flutter rotate
- 스위프트 앨범
- flutter 회전
- 안드로이드 숏컷
- 노티피케이션 익스텐션
- Today
- Total
Things take time
[Android] 안드로이드 오레오(Oreo)이상 부터 사용 되는 바로가기(ShortCut) 본문
[개요]
http://g-y-e-o-m.tistory.com/44
해당 포스팅은 오레오 미만(25이하)에서 잘 동작하는 바로가기 아이콘 만드는 방법이다.
https://developer.android.com/about/versions/oreo/android-8.0-changes?authuser=2&hl=ko
안드로이드 오레오 변경사항을 알려주는 도큐먼트
이전에 분명 대응을 다했다고 생각했는데, 바로가기 쪽을 빼먹었나 보다.
중간쪽을 읽다보면 위와 같은 내용이나온다.
오레오 부터는 암시적 브로드캐스트(여기서 암시적이란 것은 상수 값처럼 이미 정해진 값이며 안드로이드가 암묵적으로 알고 있다는 것을 의미한다. 암묵적 인텐트처럼)의 사용을 제한이 더 엄격해졌다고 한다. (누가부터 시작)
그러므로 이제 직접 구현하라는 의미이다. 26이상이므로 targetSDK를 낮추는 것도 방법이지만.. 낮춘다 하더라도 사용자 핸드폰 설정에 따라 원하는 기능이 구현 안될 수도 있다고 한다.
(참고 사이트 : https://medium.com/til-kotlin-ko/android-o%EC%97%90%EC%84%9C%EC%9D%98-%EB%B0%B1%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C-%EC%B2%98%EB%A6%AC%EB%A5%BC-%EC%9C%84%ED%95%9C-jobintentservice-250af2f7783c)
[바로가기 공식]
https://developer.android.com/preview/features/pinning-shortcuts-widgets.html?authuser=2&hl=ko
앱 target이 누가 7.1이상이라면 사용하라는 ShortcutManager
공식 도큐먼트에 따르면 shortcut은 크게 3가지가 있다.
1. 정적(static) 바로가기
2. 동적(dynamic) 바로가기
3. 고정(pinned) 바로가기
여기서 내가 사용할 것은 3. 고정형이며 이는 기존에 사용하고 있는 바로가기와 동일하기 때문이다. 고정형은 7.1(25)보다 한 단계 높은 26부터 사용가능하다. 1, 2는 25부터 사용 가능한 듯 하다.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { Log.i("createShortCut Oreo", "OREO!"); Intent oreoIntent = new Intent(mContext, SplashActivity.class); oreoIntent.setAction(Intent.ACTION_MAIN); oreoIntent.putExtra("contentURL", url); ShortcutManager mShortcutManager = mContext.getSystemService(ShortcutManager.class); if (mShortcutManager.isRequestPinShortcutSupported()) { // Assumes there's already a shortcut with the ID "my-shortcut". // The shortcut must be enabled. if (bitmap == null) { // pinShortcutInfo Drawable drawable = ResourcesCompat.getDrawable(mContext.getResources(), R.mipmap.ic_launcher, null); bitmap = ((BitmapDrawable) drawable).getBitmap(); } // id는 고유값으로 ShortcutInfo pinShortcutInfo = new ShortcutInfo.Builder(mContext, name) .setShortLabel(name) .setLongLabel("long") .setIcon(Icon.createWithBitmap(bitmap)) .setIntent(oreoIntent) .build(); Intent pinnedShortcutCallbackIntent = mShortcutManager.createShortcutResultIntent(pinShortcutInfo); // Configure the intent so that your app's broadcast receiver gets the callback successfully. PendingIntent successCallback = PendingIntent.getBroadcast(mContext, 0, pinnedShortcutCallbackIntent, 0); Boolean isSuccess = mShortcutManager.requestPinShortcut(pinShortcutInfo, successCallback.getIntentSender()); if (isSuccess){ Toast.makeText(mContext, "'" + name + "' 바로가기가 바탕화면에 생성되었습니다.", Toast.LENGTH_LONG).show(); } } }
바로가기 아이콘에 넣을 intent를 선언한다. 웹으로 연결하는 ACTION_VIEW를 한다던지, 하는 암묵적 인텐트는 원하는 걸로 설정하고 필요 시 데이터도 넣는다.
그리고 getSystemService로 ShortcutManager를 생성하고, isRequestPinShortcutSupported() 함수를 통해 디바이스가 해당 기능을 지원하는지에 대한 여부를 알 수 있다.
그리고 ShortcutInfo 인스턴스를 생성하는데, 이 인스턴스에서 중요한 것은 id(생성자의 두 번째 파라미터, name 부분)와 shortLabel이다.
id를 중복되게 사용하면, 해당 바로가기를 재사용할 수 있고, 고유 값으로 설정할 때 마다 새로운 아이콘이 생성된다.
[제거]
Listids = null; ids.add("my-shortcut"); mShortcutManager.disableShortcuts(ids);
제거도 간단하다.
쨘
'Android(기능)' 카테고리의 다른 글
[Android] 현재 디바이스의 너비/높이 얻어오기 (0) | 2018.05.25 |
---|---|
[Android] Image파일의 회전 값 알아오기 (1) | 2018.05.24 |
[Android] 최근 실행중인 앱 목록(Recent App)에서 앱을 실행함을 감지하는 방법 (0) | 2018.05.11 |
[Android] Activity를 스택에 쌓이지 않게 하는 방법 (0) | 2018.05.08 |
[Android] 현재 실행중인 앱 종료하기 (0) | 2018.03.06 |