구글 플레이스토어에서 앱을 다운받으면 자동으로 바탕화면에 아이콘이 생성이 됩니다.


하지만 Tstore 라던가 몇몇 스토어에서는 앱을 설치해도 바탕화면에 아이콘이 생성이 안됩니다.


아래는 바탕화면에 아이콘을 생성하는 코드입니다. 그대로 하시면 됩니다.



MainActivity.java 

public class MainActivity extends Activity{

    protected void onCreate(Bundle savedInstanceState){

        super.onCreate(savedInstanceState);


        SharedPreferences pref = getSharedPreferences("pref", MODE_PRIVATE);

        pref.getString("check", "");

        if(pref.getString("check", "").isEmpty()){

Intent shortcutIntent = new Intent(Intent.ACTION_MAIN);

shortcutIntent.addCategory(Intent.CATEGORY_LAUNCHER);

shortcutIntent.setClassName(this, 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, getResources().getString(R.string.app_name));

intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,

Intent.ShortcutIconResource.fromContext(this, R.drawable.ic_launcher));

intent.putExtra("duplicate", false);

intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");

        

sendBroadcast(intent);

        }

SharedPreferences.Editor editor = pref.edit();

        editor.putString("check", "exist");

        editor.commit();

    }

}




AndroidManifest.xml 

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />  // 추가해줍니다.


정말 간단하죠?


이제 앱을 설치하면 자동으로 바탕화면에 아이콘이 추가되고 아이콘이 추가되어 있는 상태라면 설치를 안합니다.


즉 앱이 실행이 될때마다 아이콘 유무를 체크하고 아이콘이 없으면 아이콘을 설치합니다.



Posted by 정윤문경아빠

앱 사용하다가 종료를 할때 뒤로가기 버튼을 한번 더 터치하면 앱을 종료한다는거 한번 이상은 보셨을거라 생각을 합니다.


코드를 보도록 하겠습니다.



BackPressCloseHandler.java

public class BackPressCloseHandler extends Activity {

private long backKeyPressedTime = 0;

private Toast toast;

private Activity activity;

public BackPressCloseHandler(MainActivity context) {

this.activity = context;

        }

        public void onBackPressed() {

         if (System.currentTimeMillis() > backKeyPressedTime + 2000) {

         backKeyPressedTime = System.currentTimeMillis();

        showGuide();

         return;

         }

         if (System.currentTimeMillis() <= backKeyPressedTime + 2000) {

         activity.finish();

         toast.cancel();

         }

        }

        

        

        private void showGuide() {

         toast = Toast.makeText(activity, "뒤로 버튼을 한번 더 터치하시면 종료됩니다.",

         Toast.LENGTH_SHORT);

         toast.show();

        }

}




MainActivity.java 

private BackPressCloseHandler backPressCloseHandler;


@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    backPressCloseHandler = new BackPressCloseHandler(this);

}


public void onBackPressed() {

    backPressCloseHandler.onBackPressed();

}


크게 어려운건 없지 싶습니다.


궁금하신거는 댓글 달아주세요


Posted by 정윤문경아빠


Thread 는 잘 사용하면 참으로 좋은 유틸리티이지만 잘못 사용하면 에러를 뚜구구궁 띄웁니다.

Thread는 역할을 다하면 자동으로 종료가 되지만 간혹 자동으로 종료가 안되는 경우도 있기 때문에 Thread 종료 시점에는 강제로 종료를 시켜주는것이 좋습니다.

그리고 안드로이드경우는 Thread가 동작중일때 휴대폰에 전화가 온다거나 바깥화면으로 나가게 되어도 Thread는 계속 동작하고 있기 때문에 반드시 onPause 또는 onDestory 메서드에 Thread를 강제종료 또는 멈춤 기능 코드를 넣어야 합니다.

아래는 제가 만든 서바이벌야구게임 앱에서의 일부 코드입니다.


int count;  // 카운트다운 시간 선언

ProgressBar prog= null;  // 프로그래스바 선언

Timer timer = null;  // 타이머 선언

TimerTask timerTask = null;  // TimerTask 선언


//프로그래스bar를 초기화하는 함수

public void initProg(){

prog.setMax(countdown);  // 프로그래스바 시간 최대값 설정

prog.setProgress(countdown); // 현재 프로그래스바 시간 설정  

}

 

public void startTimerThread(){

timerTask = new TimerTask(){ //timerTask는 timer가 일할 내용을 기록하는 객체    

@Override

public void run() {

decreaseBar(); //timer가 동작할 내용을 갖는 함수 호출

            }


};

timer = new Timer(); //timer생성

timer.schedule(timerTask, 0,1000); //timerTask라는 일을 갖는 timer를 0초딜레이로 1000ms마다 실행 즉,                             1000 = 1초

}


public void decreaseBar(){

runOnUiThread( //progressBar는 ui에 해당하므로 runOnUiThread로 컨트롤해야한다

new Runnable() { //thread구동과 마찬가지로 Runnable을 써주고


@Override

public void run() { //run을 해준다. 그러나 일반 thread처럼 .start()를 해줄 필요는 없다 

countdown = prog.getProgress();

if(countdown > 0){

countdown = countdown - 1;

}else if(countdown == 0){

timer.cancel();

Thread.interrupted();  // Thread 강제 종료

}

prog.setProgress(countdown);

}

}

);



Posted by 정윤문경아빠