2016-04-28 9 views
0

私のアプリを使用して外部ストレージからファイルを開こうとしています。 共有経由機能を使用しています。ファイルを開こうとすると異なるアンドロイドバージョンで異なるURIスキーム

私のコードのエクスポート

File filelocation = new File(sPath); 
Uri path = Uri.fromFile(filelocation); 
Intent emailIntent = new Intent(Intent.ACTION_SEND); 
emailIntent.setType("vnd.android.cursor.dir/email"); 

emailIntent.putExtra(Intent.EXTRA_STREAM, path); 
String mystring = ctx.getResources().getString(R.string.Import_rule); 
emailIntent.putExtra(Intent.EXTRA_TEXT, mystring); 

インポート機能

if (Intent.ACTION_SEND.equals(in.getAction())) 
{ 
    uri = (Uri) in.getParcelableExtra(Intent.EXTRA_STREAM); 

    uri.getPath(); 

} 

私はdifferntデバイスのバージョンの違いを参照してくださいuri.getPath()を取得しよう。アンドロイド5.0 devicveで

:アンドロイド6.0デバイス

content://[email protected]/external/file/1147 
  • file:///storage/emulated/0/Download/DeviceList.zip 
    

    私は、URIスキームはバージョン間で異なっている理由を知りませんか?

  • どうすれば解決できますか?私は、コンテンツから読み取られ、ファイルIは、URIスキームはバージョン間で異なっている理由を知らない

答えて

1

として保存することができますどのように

  • あなたは私に言うことはできますか?

  • contentはAndroid 1.0以降有効な方式です。より良いセキュリティのために長年好まれてきました。将来的には非常に重要になるでしょう。Android N is beginning to ban fileUri values

    また、これはAndroid OSバージョンとほとんど関係がないスキームの変更に注意してください。これは、ACTION_SENDIntentをトリガーするために使用しているアプリのバージョンと関連があります。

    どうすれば解決できますか?

    両方をサポートします。私は、コンテンツから読み込まれたコンテンツは、Uriで指さにInputStreamを取得するために、ファイル

    Use ContentResolver and openInputStream()として保存することができますどのように

    あなたは私を伝えることができます。次に、Java I/Oを使用して、そのデータをローカル・ファイルにコピーします。

    関連する問題