我的应用程序做了什么?应用程序正在从照片库中选择一张照片。
我的问题是什么?一旦我从图库中选择了照片,它就会毫无错误地关闭。
我做了什么?我增加了设备的内存,但它没有起作用。我把它从proyect中拿出来,活动工作正常,它又回到了活动中。
主要问题是什么?它不能在proyect上运行,我不知道为什么。
你想知道发生了什么事吗?这是一段视频。首先是当它关闭时,第二个是当我从另一个项目中完成并且工作正常时。
http://www.youtube.com/watch?v=SntnyKiJQ1Q&feature=youtu.be
修改
我的问题是,一旦我从图库中选择了图片,就没有活动。
为什么吗
问题在于manifest的 android:noHistory =“true”标记,因为没有历史记录,图库找不到任何活动,它关闭了应用程序。
代码:
我用来打开图库并选择照片的意图:
public void openGallery(int req_code){
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select file to upload "), req_code);
}
onActivityResult我获取的数据从未被调用,因为它关闭了:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
Uri selectedImageUri = data.getData();
if (requestCode == SELECT_FILE1)
{
selectedPath1 = getPath(selectedImageUri);
System.out.println("selectedPath1 : " + selectedPath1);
}
if (requestCode == SELECT_FILE2)
{
selectedPath2 = getPath(selectedImageUri);
System.out.println("selectedPath2 : " + selectedPath2);
}
tv.setText("Selected File paths : " + selectedPath1 + "," + selectedPath2);
}
}
logcat:
01-05 15:18:14.569: I/ActivityManager(59): Starting activity: Intent { act=android.intent.action.UPLOADIMAGEDEMO cmp=com.example/.UploadImageDemo }
01-05 15:18:15.779: D/dalvikvm(2496): GC_EXTERNAL_ALLOC freed 2697 objects / 189152 bytes in 92ms
01-05 15:18:16.599: I/ActivityManager(59): Displayed activity com.example/.UploadImageDemo: 1953 ms (total 1953 ms)
01-05 15:18:21.899: D/dalvikvm(279): GC_EXPLICIT freed 871 objects / 134112 bytes in 217ms
01-05 15:18:26.620: I/ActivityManager(59): Starting activity: Intent { act=android.intent.action.CHOOSER cmp=android/com.android.internal.app.ChooserActivity (has extras) }
01-05 15:18:28.250: I/ActivityManager(59): Starting activity: Intent { act=android.intent.action.GET_CONTENT typ=image/* flg=0x3000000 cmp=com.android.gallery/com.android.camera.ImageGallery }
01-05 15:18:28.670: D/dalvikvm(279): GC_EXTERNAL_ALLOC freed 388 objects / 53352 bytes in 60ms
01-05 15:18:28.850: D/dalvikvm(279): GC_EXTERNAL_ALLOC freed 326 objects / 90664 bytes in 53ms
01-05 15:18:29.200: I/ActivityManager(59): Displayed activity com.android.gallery/com.android.camera.ImageGallery: 873 ms (total 2345 ms)
01-05 15:18:29.420: D/dalvikvm(279): GC_EXTERNAL_ALLOC freed 725 objects / 106960 bytes in 140ms
01-05 15:18:30.430: W/InputManagerService(59): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@45020da8 (uid=10002 pid=279)
01-05 15:18:32.010: D/dalvikvm(112): GC_FOR_MALLOC freed 9994 objects / 476368 bytes in 149ms
我希望社区可以帮助我!!
答案 0 :(得分:4)
好的伙计们,首先非常感谢你们的答案,他们帮助我今天继续前进..
问题出现在了 android:noHistory =" true" 标签上,因为没有历史画廊无法找到任何活动而且关闭了应用程序。
再次,谢谢大家。
答案 1 :(得分:1)
//对不起,没有足够的声誉来评论已接受的答案,但我想我的案例对其他有相同问题的人会有所帮助
我在其他开发人员编写的代码中确实存在了保存问题,并且在几天内遇到了困难。但是清单中没有android:noHistory属性,但是使用标志FLAG_ACTIVITY_NO_HISTORY启动了活动。
像这样:
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
我用Google搜索了几个小时,两次达到了这个问题,但只有在决定搜索我的整个项目时才找到答案"历史"。
答案 2 :(得分:0)
如果我们试图将图片加载为大尺寸的位图/可绘制(取决于os分配的堆内存),通常Android应用程序将崩溃;例如:1mb大小的图像或更多。
尝试加载小尺寸图像,并检查问题是否仍然存在。 通常在与BitmapFactory相关的代码中发生崩溃。*。
Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),
R.drawable.android);
答案 3 :(得分:0)
很难说究竟是什么错误导致跟踪不包含任何异常消息。但我可以分享一段代码:
启动意图
private final int GALLERY_REQUEST = 0;
private void runGallery() {
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, GALLERY_REQUEST);
}
处理结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
Uri selectedPictureUri = data.getData();
loadGalleryAttachment(selectedPictureUri);
}
}
private void loadGalleryAttachment(Uri uri){
if (uri != null) {
String path = getPath(uri);
File f = new File(path);
// do something with picture file
}
}
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
if (cursor != null) {
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
}
希望它会对你有所帮助!