WiFiDirectDemo: fix broken sample code

Sender sent the file indeed, but receiver cannot save content normally due to below reason:
1. App shouldn't create the directory in external storage root,
   it should put files in its application path.
2. It is not allowed using file:// uri for posting file content above API 24,
   it should be done by FileProvider.

Bug: 113998459
Test: manual test with two devices
Change-Id: Ie50dd64206009f07414a85262e725cc4d8ac1757
This commit is contained in:
Jimmy Chen
2018-09-07 18:29:51 +08:00
parent d7b485a50c
commit fc884a6df0
4 changed files with 28 additions and 5 deletions

View File

@@ -19,7 +19,6 @@ package com.example.android.wifidirect;
import android.app.Fragment;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.net.wifi.WpsInfo;
@@ -29,7 +28,7 @@ import android.net.wifi.p2p.WifiP2pInfo;
import android.net.wifi.p2p.WifiP2pManager.ConnectionInfoListener;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.content.FileProvider;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -228,8 +227,8 @@ public class DeviceDetailFragment extends Fragment implements ConnectionInfoList
Log.d(WiFiDirectActivity.TAG, "Server: Socket opened");
Socket client = serverSocket.accept();
Log.d(WiFiDirectActivity.TAG, "Server: connection done");
final File f = new File(Environment.getExternalStorageDirectory() + "/"
+ context.getPackageName() + "/wifip2pshared-" + System.currentTimeMillis()
final File f = new File(context.getExternalFilesDir("received"),
"wifip2pshared-" + System.currentTimeMillis()
+ ".jpg");
File dirs = new File(f.getParent());
@@ -256,9 +255,16 @@ public class DeviceDetailFragment extends Fragment implements ConnectionInfoList
protected void onPostExecute(String result) {
if (result != null) {
statusText.setText("File copied - " + result);
File recvFile = new File(result);
Uri fileUri = FileProvider.getUriForFile(
context,
"com.example.android.wifidirect.fileprovider",
recvFile);
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file://" + result), "image/*");
intent.setDataAndType(fileUri, "image/*");
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
context.startActivity(intent);
}