在图库 return 之后,不在 Fragment 中调用 onActivityResult
not call onActivityResult in Fragment, after return from gallery
在我的片段中我 select 照片来自图库
在Manifest.xml
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_GPS"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
在此之前,我的应用显示权限对话框。我按允许
public class EditProfileFragment extends androidx.fragment.app.Fragment {
private void choosePhotoFromGallery() {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, SELECT_PHOTO);
}
但是方法
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (BuildConfig.DEBUG)
Log.d(TAG, "onActivityResult_requestCode = " + requestCode + ", resultCode = " + resultCode + ", data = "
+ AndroidUtil.intent2String(data));
不在片段中调用 return到我的应用程序
不打印文本:onActivityResult_requestCode
但是方法 onActivityResult(int requestCode, int resultCode, Intent data) 在 Activity 中调用。
但是我需要在片段中调用这个方法。
此处请求权限对话框:
private boolean checkAndRequestPermissions() {
int writeExternalStorage = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
int readExternalStorage = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE);
int camera = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA);
List<String> listPermissionsNeeded = new ArrayList<>();
if (writeExternalStorage != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (readExternalStorage != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
if (camera != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.CAMERA);
}
if (BuildConfig.DEBUG)
Log.d(TAG, "checkAndRequestPermissions_listPermissionsNeeded(" + listPermissionsNeeded.size() + ")");
if (!listPermissionsNeeded.isEmpty()) {
if (BuildConfig.DEBUG)
Log.d(TAG, "checkAndRequestPermissions_REQUEST_WRITE_EXTERNAL_STORAGE_REQ_CODE");
ActivityCompat.requestPermissions(getActivity(), listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()])
, WRITE_EXTERNAL_STORAGE_REQ_CODE);
return false;
}
return true;
}
既然你是从片段调用那么试试这个
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.your_tag);
fragment.onActivityResult(requestCode, resultCode, data);
}
将此放入 Activity 的 Activity 结果
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.frameLayout);
fragment.onActivityResult(requestCode, resultCode, data);
它将做的是在您的片段的Activity结果上调用片段。所以你的片段中会有选择数据
内部片段开始Activity结果
getActivity().startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
现在 Activity
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.frameLayout);
fragment.onActivityResult(requestCode, resultCode, data);
}
内部片段
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
// super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "Activit Result");
if (resultCode == -1) {
}
}
希望能有所帮助
在我的片段中我 select 照片来自图库
在Manifest.xml
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_GPS"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
在此之前,我的应用显示权限对话框。我按允许
public class EditProfileFragment extends androidx.fragment.app.Fragment {
private void choosePhotoFromGallery() {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, SELECT_PHOTO);
}
但是方法
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (BuildConfig.DEBUG)
Log.d(TAG, "onActivityResult_requestCode = " + requestCode + ", resultCode = " + resultCode + ", data = "
+ AndroidUtil.intent2String(data));
不在片段中调用 return到我的应用程序
不打印文本:onActivityResult_requestCode
但是方法 onActivityResult(int requestCode, int resultCode, Intent data) 在 Activity 中调用。 但是我需要在片段中调用这个方法。
此处请求权限对话框:
private boolean checkAndRequestPermissions() {
int writeExternalStorage = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
int readExternalStorage = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE);
int camera = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA);
List<String> listPermissionsNeeded = new ArrayList<>();
if (writeExternalStorage != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (readExternalStorage != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
if (camera != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.CAMERA);
}
if (BuildConfig.DEBUG)
Log.d(TAG, "checkAndRequestPermissions_listPermissionsNeeded(" + listPermissionsNeeded.size() + ")");
if (!listPermissionsNeeded.isEmpty()) {
if (BuildConfig.DEBUG)
Log.d(TAG, "checkAndRequestPermissions_REQUEST_WRITE_EXTERNAL_STORAGE_REQ_CODE");
ActivityCompat.requestPermissions(getActivity(), listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()])
, WRITE_EXTERNAL_STORAGE_REQ_CODE);
return false;
}
return true;
}
既然你是从片段调用那么试试这个
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.your_tag);
fragment.onActivityResult(requestCode, resultCode, data);
}
将此放入 Activity 的 Activity 结果
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.frameLayout);
fragment.onActivityResult(requestCode, resultCode, data);
它将做的是在您的片段的Activity结果上调用片段。所以你的片段中会有选择数据
内部片段开始Activity结果
getActivity().startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
现在 Activity
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.frameLayout);
fragment.onActivityResult(requestCode, resultCode, data);
}
内部片段
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
// super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "Activit Result");
if (resultCode == -1) {
}
}
希望能有所帮助