Notification으로 파일 삭제하기

Hwan·2023년 2월 20일
0

voicekeeper

목록 보기
10/16

구현할 내용

  • HTTP 통신으로 받은 데이터를 Notification에 전달
  • 해당 정보로 내부저장소의 파일 삭제
  • 9. Class로 Notification 설정 에서 추가, 수정

1. FileUploadUtils.java

  • CallFunctionTask에서 파일을 저장하기 전 SAVE 정보(json 내부의 데이터)를 읽도록 수정
  • SAVE 확인 → 저장용 json 파일이 이미 존재하는지 확인
  • Intent를 사용하여 NotificationUtil에 데이터 전달
private static class CallFunctionTask extends AsyncTask<Void, Void, String> {
		@Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            Log.d("TEST : ", result);

            if (result == null) {
                // retry
                new CallFunctionTask().execute();
            } else {
            	Log.d("TEST : ", result);
                int check = 0;  // 저장여부

                try {
                    JSONObject resultjson = new JSONObject(result);
                    check = resultjson.getInt("SAVE");
                    JSONObject INFO = resultjson.getJSONObject("INFO");
                    String NUMBER = INFO.getString("NUMBER");
                    String DATE = INFO.getString("DATE");
                    String TIME = INFO.getString("TIME");

                    if (check == 1){    // 녹음 상황 감지 -> 파일 저장, json 수정
                        Log.d("TEST : ", "파일 저장");

                        File filesDir = MyApplication.getAppContext().getFilesDir();
                        File file = new File(filesDir, "data.json");
                        if (file.exists()) {
                            // 파일이 존재하는 경우
                            FileInputStream inputStream = MyApplication.getAppContext().openFileInput("data.json");
                            byte[] bytes = new byte[inputStream.available()];
                            inputStream.read(bytes);
                            inputStream.close();
                            String jsonString = new String(bytes);
                            JSONArray myJsonArray = new JSONArray(jsonString);

                            myJsonArray.put(resultjson);
                            FileOutputStream outputStream = MyApplication.getAppContext().openFileOutput("data.json", Context.MODE_PRIVATE);
                            outputStream.write(myJsonArray.toString().getBytes());
                            outputStream.close();
                        } else {
                            // 파일이 존재하지 않는 경우
                            JSONArray myJsonArray = new JSONArray();
                            myJsonArray.put(resultjson);
                            FileOutputStream outputStream = MyApplication.getAppContext().openFileOutput("data.json", Context.MODE_PRIVATE);
                            outputStream.write(myJsonArray.toString().getBytes());
                            outputStream.close();
                        }
                        
                        NotificationUtil notificationUtil = new NotificationUtil();
                        Intent intent = new Intent(MyApplication.getAppContext(), NotificationUtil.class);

                        intent.putExtra("NUMBER", NUMBER);
                        intent.putExtra("DATE", DATE);
                        intent.putExtra("TIME", TIME);

                        notificationUtil.onReceive(MyApplication.getAppContext(), intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
                    }
                    else{		// 녹음 불필요 -> 파일 삭제
                        Log.d("TEST : ", "파일 삭제");
                        File sdcard = Environment.getExternalStorageDirectory();
                        File file = new File(sdcard, "Recordings/" + NUMBER + "_" + DATE + "_" + TIME + ".m4a");
                        String filePath = file.getAbsolutePath();
                        file = new File(filePath);
                        if (file.exists()) {
                            Log.d("TEST : ", filePath);
                            file.delete();}
                    }

            } catch (Exception e) {
                    Log.e("error json", e.getMessage(), e);
                }

            }

2. NotificationUtil.java

  • onReceive의 File sdcard = Environment.getExternalStorageDirectory(); 직전에 FileUploadUtils로부터 파일에 대한 정보를 얻어온다.
File sdcard = Environment.getExternalStorageDirectory();
File file = new File(sdcard, "Recordings/" + NUMBER + "_" + DATE + "_" + TIME + ".m4a");   
// 파일명 수정 가능
String filename = file.getAbsolutePath();
Intent deleteintent = new Intent(fileDelete(context.getApplicationContext(),filename));
PendingIntent deletependig = PendingIntent.getActivity(context.getApplicationContext(), 0, deleteintent, PendingIntent.FLAG_IMMUTABLE);

  • "삭제" 부분의 intent를 변경한다
builder.addAction(R.drawable.vk_black, "삭제", deletependig);

  • onReceive 아래에 다음 함수를 생성해둔다
public static String fileDelete(Context context, String filePath){
        try{
            File file = new File(filePath);
            if (file.exists()) {
                Log.d("TEST : ", filePath);
                file.delete();}


            return "true";
        } catch (Exception e){
            Log.d("TEST : ", filePath);
            e.printStackTrace();
        }
        return "true";
    }

0개의 댓글