안드로이드에서 런타임 퍼미션을 주려고 다음의 자바코드(출처: 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();
}