2

私のアプリはkml(xml)ファイルを生成し、ユーザーがメールやBluetoothなどで共有できるようにします。私は何十もの例を見てきましたが、明らかにまだ何か間違ったことをしています。Gmailを選択すると、メールは正しく読み込まれますが、ファイルは添付されません。Bluetoothを選択すると、Bluetoothマネージャーがクラッシュします。私はここで何を間違えましたか?

private void createShareIntent(String filename) {
    Log.d(Common.APP_TAG, "** Create share intent **");
  String mime = "text/plain";
    File exportFile = new File(filename);
    Log.d(Common.APP_TAG, Uri.fromFile(exportFile).toString());
    // logcat says : file:///mnt/sdcard/Android/data/com.gmail.qkzoo1978.qwhereami/files/exports/qExport_11-6-2012_1648.kml
    Intent intent = new Intent();
    intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"testing@gmail.com"});
    intent.putExtra(Intent.EXTRA_SUBJECT, "Test");
    intent.putExtra(Intent.EXTRA_TEXT, "Text");
    intent.setType(mime);
    intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(exportFile));
    //intent.setDataAndType(Uri.fromFile(exportFile),  mime);
    startActivity(Intent.createChooser(intent, "Share Kml"));
}  
4

1 に答える 1

0

これを解決したかどうかはわかりませんが、今週末に同じ問題に遭遇し、アプリがアクセスできるが他のアプリがアクセスできないファイルを保存していたことが原因であることに気付きました。したがって、共有を処理するために使用されるアプリケーションがファイルのアクセス許可を読み取ろうとすると、拒否されます。奇妙なことに、これはログでは明確ではありません。

これを解決する方法は、ファイルを外部ストレージに保存することですが、これは理想的ではないかもしれません。

または、より良い解決策として、ファイル プロバイダーを使用し、インテントでアクセス許可を付与します。

于 2014-03-01T20:09:04.597 に答える