악성 앱 보안 솔루션 적용하면서 설치된 악성앱을 삭제해야되는 상황이 생겼음. 여기서는 삭제하고 삭제완료시 이벤트 받는것만 다룸.

설치하고 설치완료시 이벤트도 받을 수 있지만 여기서는 안다룸. ^^

 

[필요 퍼미션]

<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />

 

 

[설치된 앱 삭제]

PackageManager pm = this.getPackageManager();

try {
    Intent deleteIntent = pm.getLaunchIntentForPackage("삭제할 패키지 명");

    if (deleteIntent != null) {
        Intent intent = new Intent(Intent.ACTION_DELETE);
        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        intent.setData(Uri.parse(String.format("package:%s", "삭제할 패키지 명")));
        startActivity(intent);
    }

} catch (ActivityNotFoundException error) {
    DLog.e(new Exception(), error.getMessage());
}

 

[삭제가 완료 시점 이벤트로 받기]

public class AppRemoveEventReceiver extends BroadcastReceiver {

    public String removePackageName = "";

    @Override
    public void onReceive(Context context, Intent intent) {
        removePackageName = intent.getData().getSchemeSpecificPart();
        String action = intent.getAction();

        if(action.equals(Intent.ACTION_PACKAGE_ADDED)) {
            Log.d("", "[snowdeer] Package ADDED : " + removePackageName);
        } else if(action.equals(Intent.ACTION_PACKAGE_REMOVED)) {
            Log.d("", "[snowdeer] Package REMOVED : " + removePackageName);
        }
    }
}

///////////////////////////////////////////////////////////////////////////////////
// Activity 에서 처리

//변수 선언
private AppRemoveEventReceiver mPackageRemoveEventReceiver;

@Override
protected void onDestroy() {
    super.onDestroy();
	// 해제
    if (mPackageRemoveEventReceiver != null) {
        unregisterReceiver(mPackageRemoveEventReceiver);
    }
}

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    // 악성프로그램이 여러개 일 경우 삭제된 패키지 리스트 갱신용
    mPackageRemoveEventReceiver = new AppRemoveEventReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            super.onReceive(context, inten);
               /*
               AppRemoveEventReceiver 클래스의 removePackageName 에 삭제된 앱 패키지명이 담김.
               removePackageName 가지고 삭제 유무 판단해서 로직 추가하면됨.
               */
            }
        }
    };
    
    //Receiver 등록
    registerPackageEventReceiver();
}


// onCreate 에서 호출
private void registerPackageEventReceiver() {
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
    intentFilter.addDataScheme("package");
    registerReceiver(mPackageRemoveEventReceiver, intentFilter);
}

+ Recent posts