여전히 액세스 권한/요청을 모의 할 수있는 경우 여전히 PermissionHandler
과 같은 것을 만들지 만보기 클래스 내에서만 참조하십시오.
public interface PermissionsHandler {
boolean checkHasPermission(AppCompatActivity activity, String permission);
void requestPermission(AppCompatActivity activity, String[] permissions, int requestCode);
}
생산 구현 :
이
public class PermissionsHandlerAndroid implements PermissionsHandler {
@Override
public boolean checkHasPermission(AppCompatActivity activity, String permission) {
return ContextCompat.checkSelfPermission(activity, permission) == PackageManager.PERMISSION_GRANTED;
}
@Override
public void requestPermission(AppCompatActivity activity, String[] permissions, int requestCode){
ActivityCompat.requestPermissions(activity, permissions, requestCode);
}
}
조롱 클래스 (예를 들어, 테스트 활동이 제대로 onRequestPermissionsResult
을 처리합니다 있는지 확인하기 위해)
public class PermissionsHandlerMocked implements PermissionsHandler {
@Override
public boolean checkHasPermission(AppCompatActivity activity, String permission) {
return false;
}
@Override
public void requestPermission(AppCompatActivity activity, String[] permissions, int requestCode){
int[] grantResults = new int[permissions.length];
for (int i = 0; i < permissions.length; i++) {
grantResults[i] = PackageManager.PERMISSION_GRANTED
}
activity.onRequestPermissionResult(requestCode, permissions, grantResults);
}
}
인터페이스 - 예를 들어, 그런 다음 활동 내역 :
fobo66
PermissionsHandler permissionsHandler;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
permissionsHandler = Injection.providePermissionsHandler();
//or however you choose to inject your production vs mocked handler.
}
//method from your view interface, to be called by your presenter
@Override
void requestLocationPermission() {
permissionsHandler.requestPermision((AppCompatActivity) this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_CODE_LOCATION};
}
, 당신은 항상보기
checkLocationPermissionGranted()
및
requestLocationPermission()
같은 훨씬 더 일반적인 메소드를 구현 할 수 있습니다. 그런 다음보기 구현은 필요에 따라 활동을 참조 할 수 있으며 발표자는 활동 참조를 만질 필요가 없습니다.
이 방법이 안전한가요? 메모리 누수가 발생하지 않아야합니까? – fobo66