728x90
반응형
바탕화면에 바로가기 아이콘을 생성할건지 묻는 알림창을 자주 보셨을겁니다.
이것에 대해 한번 포스팅해볼게요.
우선 퍼미션을 얻어야겠지요?
<!-- 앱 설치 후 바로가기 생성 -->
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>
<!-- 앱 설치 후 바로가기 생성 -->
설치와 제거를 할 수 있는 퍼미션을 추가해줍니다.
private void Create_Shortcut() {
SharedPreferences Get_ShortCut = getSharedPreferences("Shortcut",MODE_PRIVATE);
Var.Shortcut_Check = Get_ShortCut.getBoolean("Shortcut",false);
if(!Var.Shortcut_Check) {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
dialogBuilder.setTitle("알 림");
dialogBuilder.setIcon(R.drawable.icon);
dialogBuilder.setMessage("테스트 어플 바로가기 아이콘을\n홈 화면에 추가 하시겠습니까?");
dialogBuilder.setPositiveButton("확인", this);
dialogBuilder.setNegativeButton("취소", this);
dialogBuilder.show();
}
}
현재 간단히 이렇게 세팅만 해주었습니다.
앱을 킬 때마다 바로가기를 생성 여부를 물어보면 사용자가 좀 많이 화가 나겠죠?
SharedPreferences로 막아줍니다.
확인버튼 눌러도 true 취소버튼 눌러도 true입니다.
트루가 아닐때만 작동하도록 if문을 걸어주었습니다.
SharedPreferences로 저장하는 변수는 boolean타입의 변수를 하나 사용했습니다.
변수명은 자유롭게 지정해주세요.
그리고 클릭 이벤트 관련은
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case -2: //취소
Shortcut_Preferences = getSharedPreferences("Shortcut",MODE_PRIVATE);
SharedPreferences.Editor Shortcut_Editor = Shortcut_Preferences.edit();
Var.Shortcut_Check = true;
Shortcut_Editor.putBoolean("Shortcut",true);
Shortcut_Editor.commit();
break;
case -1: //확인
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Intent action = new Intent(Intent.ACTION_VIEW).setClass(getApplicationContext(),MainActivity.class);
ShortcutManager shortcutManager = getApplicationContext().getSystemService(ShortcutManager.class);
if (shortcutManager.isRequestPinShortcutSupported()) {
ShortcutInfo pinShortcutInfo = new ShortcutInfo.Builder(getApplicationContext(), "테스트 어플")
.setIntent(action)
.setShortLabel("테스트 어플")
.setIcon(Icon.createWithResource(getApplicationContext(), R.drawable.icon)).build(); //아이콘설정
Intent pinnedShortcutCallbackIntent = shortcutManager.createShortcutResultIntent(pinShortcutInfo);
PendingIntent successCallback = PendingIntent.getBroadcast(getApplicationContext(), 0, pinnedShortcutCallbackIntent, 0);
shortcutManager.requestPinShortcut(pinShortcutInfo, successCallback.getIntentSender());
}
}
else {
Intent shortcutIntent = new Intent(Intent.ACTION_VIEW);
shortcutIntent.addCategory(Intent.CATEGORY_LAUNCHER);
shortcutIntent.setClassName(getApplicationContext(), getClass().getName());
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "테스트 어플");
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.icon));
intent.putExtra("duplicate", false);
intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
sendBroadcast(intent);
}
Shortcut_Preferences = getSharedPreferences("Shortcut",MODE_PRIVATE);
SharedPreferences.Editor Shortcut_Editor2 = Shortcut_Preferences.edit();
Var.Shortcut_Check = true;
Shortcut_Editor2.putBoolean("Shortcut",true);
Shortcut_Editor2.commit();
break;
}
}
이렇게 따로 처리해 주었습니다.
클래스딴 전역으로
SharedPreferences Shortcut_Preferences;
선언 하나 해주세여.
그리고 메인 클래스에
public class MainActivity extends AppCompatActivity implements AlertDialog.OnClickListener
인터페이스 하나 상속 해주셔야합니다.
굳이 따로 클릭을 처리한 이유는 어째서인지 일반적인 버튼 리스너나 다이얼로그의 버튼리스너에서는
안드로이드 8.0 밑에버전의 바로가기생성 코드가 먹히지 않았습니다.
혹시 이유를 아시는분은 댓글 부탁드릴게요!
728x90
반응형
'Android' 카테고리의 다른 글
Android 디바이스 기기 부팅 시 자동으로 앱이 실행되게 하기. (2) | 2020.05.21 |
---|---|
안드로이드 단축URL 생성하기 (네이버 단축URL) (2) | 2020.05.07 |
Doze모드에 강제로 진입하여 테스트해보기. (0) | 2020.04.16 |
안드로이드 Doze(도즈)모드 진입 시 백그라운드 및 알림서비스 제한 이슈 해결 (0) | 2020.04.16 |
WebView 현재 페이지가 로딩이 됐는지 알아보는 방법. (0) | 2020.04.14 |
댓글