4

インテントを使用して Android (4.0) でローカル ファイルを開こうとしています。以下は、アクションを実行するコードです。これは、ファイルに特別なスペースがない限り正常に機能します (たとえば、ファイルが /data/data/com.xxxx.yyyy/files/Downloads/Documents/ProductFeature.pptx の場合、問題なく開きますが、ファイルがname is /data/data/com.xxxx.yyyy/files/Downloads/Documents/Product Feature.pptx (name のスペースに注意), then it fails. Uri.fromFile はスペースを正しくエンコードしますが、他のアプリは見えませんそれらを解釈し、開くのに失敗したように見えます。

        Intent intent = new Intent();
    intent.setAction(android.content.Intent.ACTION_VIEW);

    Uri uri =  Uri.fromFile(new File( selectedEntry.get(Defs.PATH_KEY)));
    System.out.println("openFileWith: File to open: " + uri);

    intent.setDataAndType(uri,type);
    startActivity(Intent.createChooser(intent, "Open With ...")); 

また、あまり助けを借りずに「file://」+エンコードされていないパスを使用しようとしました。

では、この状態をどのように処理しますか?どんな助けでも大歓迎です

4

2 に答える 2

1

私にとっての主な問題は、内部ストレージのアプリケーションディレクトリにファイルを保存することであり、ファイルへのアクセスを明示的に指定する必要があることが判明しました。chmod755コマンドを使用して権限を付与していました。しかし、スペースのあるファイルはパーミッションが正しく設定されていなかったため、それらのファイルを開くことができませんでした。

その後、外部(Activity.getExternalFilesDir())を使用するように移動しました。そのフォルダーは、他のすべてのアプリケーションへのアクセス許可を許可し、問題を解決しました。

于 2013-01-31T16:45:28.910 に答える
1

スペースを に置き換える必要があります"\ "String.replace()を使用している場合は、スラッシュもエスケープする必要があることに注意してください( "\\ ")。

于 2013-01-23T23:47:27.407 に答える