2

一連の電子メール送信を自動化するアプリに取り組んでいますが、ユーザーがファイルを選択して開始できるようにするアクティビティをまったく取得できません。コードはすべて正しいように見えますが、手順を実行していると、アクティビティがまったく開始されていないように見えます。これが私のコードです:

通話アクティビティ、EmailSender:

public class EmailSender extends Activity{
//declarations
Intent fileIntent;

    @Override
    public void onCreate(Bundle savedInstanceState) {

    //instantiations
    String pathName;
    fileIntent = new Intent(EmailSender.this, FileChooser.class);

    //email sending functions that work fine

    try {
        GmailSender attachmentSender = new GmailSender(gsn, gpw)

        String[] toArr = new String[6];    //array of recipient addresses
        toArr[0] = efull;
        toArr[1] = afull;
        toArr[2] = ysn;
        toArr[3] = csn;
        toArr[4] = hsn;
        toArr[5] = gsn;     

        attachmentSender.setSubject("Attachment Download Test");
        attachmentSender.setFrom(gsn);
        attachmentSender.setTo(toArr);
        attachmentSender.setBody("Attachment Downloading Test");

        startActivityForResult(fileIntent, 1);
        attachmentSender.addAttachment(pathName);
        attachmentSender.send();
    }
    catch (Exception e) {
        Log.e("EmailSender", e.getMessage(), e);
    }
    finish();

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if(requestCode == 1)
        {
            if(resultCode == RESULT_OK)
                pathName = data.getStringExtra("result");
        }
        if(resultCode == RESULT_CANCELED)
        {
            pathName = "";
        }
    }
}

File Chooser は、この質問に投稿されたライブラリからのものです: Android file chooser

File Chooser を拡張するクラスの関連するメソッドのみを以下に示します。

public class FileChooser extends FileChooserActivity    {

    // TAG for log messages.
    private static final String TAG = "FileSelectorTestActivity";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // We must check to ensure that the calling Intent is not Intent.ACTION_GET_CONTENT
        if (!isIntentGetContent()) {
            // Display the file chooser with all file types
            showFileChooser();
        }
    }

    @Override
    protected void onFileSelect(File file) {
        if (file != null) {
            //final Context context = getApplicationContext();

            // Get the path of the Selected File.
            final String path = file.getAbsolutePath();
            Log.d(TAG, "File path: " + path);

            Intent returnIntent = new Intent();
            returnIntent.putExtra("result", path);
            setResult(RESULT_OK, returnIntent);   
            finish();
        }   
    }
}

最後に、呼び出されたクラスが宣言されているマニフェストのスニペットを次に示します。

<activity
    android:name=".FileChooser"
    android:label="Choose a file"
    android:exported="false" >
        <intent-filter>
            <action android:name="android.intent.action.GET_CONTENT" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.OPENABLE" />

            <data android:mimeType="*/*" />
        </intent-filter>
</activity>

EmailSender が空のファイル名を添付しようとするまで、Logcat で例外が発生しません。デバッガーは、EmailSender アクティビティに戻って中断したところから続行するまで、Android API からの命令をステップ実行するだけです。ファイルを選択できる可能性があるという兆候があるのは、例外がスローされてログに記録され、finish() の後でコードが一時停止したときだけです。この時点で、ポップアップが開き、ファイル選択プログラムを選択するように求められます (本来なら、組み込みのファイル チューザーが自動的に使用されます)。

何が起こっているのか、そもそも FileChooser アクティビティが呼び出されない理由を誰かが理解するのを手伝ってくれるなら、本当に感謝しています。OnActivityResult() の問題に関する多くのリソースを見つけましたが、残念ながらそこまで進んでいません。助けてくれてありがとう!

4

1 に答える 1

1

ええと、try catch ブロックの直後に、アクティビティを終了しています。行を削除して、何かに戻ることfinish()ができるようにします。startActivityForResult

于 2012-10-26T20:02:54.667 に答える