8

私のアプリは何をしますか?アプリが写真ギャラリーから写真を選択しています。

私の問題は何ですか?ギャラリーから写真を選択すると、エラーなしで閉じます。

私がやった事?デバイスのメモリを増やしましたが、機能しませんでした。プロジェクトから取り出したところ、アクティビティは正常に機能し、アクティビティに戻りました。

主な問題は何ですか?プロジェクトでは機能せず、その理由がわかりません。

何が起こっているのか見たいですか?ここにビデオがあります。最初は閉じたとき、2番目は別のプロジェクトから実行して正常に動作したときです。

http://www.youtube.com/watch?v=SntnyKiJQ1Q&feature=youtu.be


編集

私の問題は、ギャラリーから写真を選択すると、スタックにアクティビティがないことでした。

なんで?

問題は、マニフェストの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);
    }
}

ログキャット:

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

コミュニティが私を助けてくれることを願っています!!

4

4 に答える 4

5

OKみんな、まず第一に、あなたの答えにとても感謝しています.彼らは私が今日続けるのを助けました..

問題は、マニフェストのandroid:noHistory="true"タグにありました。履歴がなく、ギャラリーがアクティビティを見つけることができず、アプリを閉じたためです。

改めまして、皆様ありがとうございました。

于 2013-01-09T23:59:53.380 に答える
1

// 申し訳ありませんが、受け入れられた回答にコメントするのに十分な評判がありませんが、私のケースは同じ問題を抱えている他の人にとって役立つと思います

別の開発者が書いたコードで保存の問題が発生し、数日間苦労しました。しかし、マニフェストに android:noHistory 属性はありませんでしたが、アクティビティはフラグ FLAG_ACTIVITY_NO_HISTORY で起動されました。

このような:

intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

私は何時間もグーグルで検索し、このSOの質問に2回到達しましたが、プロジェクト全体で「履歴」という単語を検索することを決定したときにのみ答えを見つけました。

于 2015-03-02T12:09:31.960 に答える
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);
    } 
}

それがあなたを助けることを願っています!

于 2013-01-09T20:26:24.083 に答える
0

通常、Android アプリケーションは、巨大なサイズのビットマップ/ドローアブルとして画像をロードしようとするとクラッシュします (OS によって割り当てられたヒープ メモリによって異なります)。例: 1MB 以上のサイズの画像。

小さいサイズの画像を読み込んでみて、問題が解決しないかどうかを確認してください。通常は BitmapFactory.* に関連するコードでクラッシュが発生します。

Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),
       R.drawable.android);
于 2013-01-09T19:58:39.857 に答える