我一直在与一个特定问题作斗争一个多星期了。我希望能够将我的PicturesApp / File Explorer中的图像共享到我的应用程序中,然后发布到私人服务器。 在借助MultiImage Selector Library从应用程序内部导航到图库时,图像已经发布。 我已经尝试了我在这里遇到的所有答案都无济于事,包括here引用的着名FileUtils类 在我的研究过程中,我发现在应用程序中处理数据方面有很多灰色区域,文档的简洁性(最终导致模糊性)以及随之而来的一堆未解决的问题。 现在来一些代码
<provider
android:name="android.support.v4.content.FileProvider"
tools:replace= "android:authorities"
android:authorities="com.myapp.PhotoViewerActivity"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
tools:replace= "android:resource"
android:resource="@xml/file_paths" />
</provider>
<activity
android:name="com.myapp.activity.AppActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
</activity>
我包含了文件提供程序,因为我想知道这是否覆盖了我阅读内容的能力:// uris或者其他东西..
我处理意图;
final Intent shareIntent = getIntent();
if (shareIntent.getAction()!=null) {
final String intentAction = shareIntent.getAction();
final String intentFileType = shareIntent.getType();
if (intentAction.equals(Intent.ACTION_SEND)) {
if (intentFileType.startsWith("image/")) {
byte[] imageBytes = null;
Uri uri = (Uri) shareIntent.getParcelableExtra(Intent.EXTRA_STREAM);
try {
InputStream inputStream = getContentResolver().openInputStream(uri);
imageBytes= getBytes(inputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
RequestBody requestFile = RequestBody.create(MediaType.parse("image/*"), imageBytes);
image1 = MultipartBody.Part.createFormData("image1", "new_image", requestFile);
}
}
}
public byte[] getBytes(InputStream is) throws IOException{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int buffSize =1024;
byte[] buff = new byte[buffSize];
int len=0;
while((len = is.read(buff))!= -1){
baos.write(buff,0,len);
}
return baos.toByteArray();
}
Ps:我已经处理了权限。就像我说我现在可以从应用程序发布图片。对于此特定功能,服务器说&#34;文件不存在&#34;
答案 0 :(得分:0)
单击图库按钮,启动startActivityForResult,如下所示:
startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), GET_FROM_GALLERY);
检查此链接