마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

android:compileSdkVersion="26" 에서 FragmentTransaction.add(0, request); 다운

0 추천

안드로이드에서 런타임 퍼미션을 주려고 다음의 자바코드(출처: http://www.bytran.org/androidmpermissions.htm)를 실행시키니 AndroidManifest.xml에 android:compileSdkVersion="25" 라고 쓰니 잘 작동하는데 26이나 그이상의 API를 적으면 fragmentTransaction.add(0, request);에서 앱이 다운되 버리네요.

자바는 초보라서 헷갈리네요. 참고로 Qt5.7을 이용하여 C++에서 java함수를 부르고 있습니다.

public void askPermissions(Activity currentActivity)
    {
        final List<String> permissionsList = new ArrayList<String>();
        if (currentActivity.checkCallingOrSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
            permissionsList.add(Manifest.permission.READ_EXTERNAL_STORAGE);
        }
        if (currentActivity.checkCallingOrSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            permissionsList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
        }

        final FragmentManager fragmentManager = currentActivity.getFragmentManager();
        final Fragment request = new Fragment() {
            @Override public void onStart()
            {
                super.onStart();
                // Checking the read and write permissions
                if (!permissionsList.isEmpty())
                {
                    requestPermissions(permissionsList.toArray(new String[permissionsList.size()]), REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
                }
                else
                {
                    // Emitting a signal indicating that the permissions have been granted
                    responseStateStr = "Granted";
                }
            }
            @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
            {
                ...
                ...
                FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                fragmentTransaction.remove(this);
                fragmentTransaction.commit();
            }
        };
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(0, request);
        fragmentTransaction.commit();
    }
 

 

sanmool (130 포인트) 님이 2023년 5월 24일 질문

1개의 답변

+1 추천
Read write external permission은 잠시 동안만 런터인 퍼미션으로 처리했다가 다시 AndroidManifest.xml에 선언만 하면 되는 퍼미션으로 바뀌었습니다. 제가 알기로는 요즘 나오는 SDK에서는 이 부분을 런타임으로 처리해줄 필요가 없습니다. CompiledSdk기 현재 33이 최신 안정 버전입니다. 33으로 올려서 작업하시길 권장드리구요. 그리고 구글 정책상 새앱은 최신 SDK 버전 -1 를 사용해야 출시가 가능합니다. 올해 34 버전이 곧 나올 예정입니다.
spark (226,420 포인트) 님이 2023년 5월 25일 답변
...