Read text file after chossing by Intent.ACTION_GET_CONTENT - android

I'm trying to select text file by open file explorer then read the selected file.
I tried many many solutions. the last one is this code
public void btnRead_Click(View view) {
Intent chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
chooseFile.setType("text/plain");
startActivityForResult(chooseFile, 1);
}
#Override
protected void onActivityResult(int requestedCode, int resultCode, Intent data) {
if (requestedCode == 1) {
if (resultCode == RESULT_OK) {
File file = new File(data.getDataString());
StringBuilder text = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
text.append(line);
text.append('\n');
}
br.close();
}
catch (IOException e){}
textView = (TextView) findViewById(R.id.textView);
textView.setText(text);
}
}
}
Thanks in advance

I found the solution here: https://stackoverflow.com/a/40638366/5727559
The code is:
public static int PICK_FILE = 1;
public void btnRead_Click(View view)
{
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("text/plain");
startActivityForResult(intent, PICK_FILE);
}
#Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_FILE)
{
if (resultCode == RESULT_OK)
{
Uri uri = data.getData();
String fileContent = readTextFile(uri);
Toast.makeText(this, fileContent, Toast.LENGTH_LONG).show();
}
}
}
private String readTextFile(Uri uri)
{
BufferedReader reader = null;
StringBuilder builder = new StringBuilder();
try
{
reader = new BufferedReader(new InputStreamReader(getContentResolver().openInputStream(uri)));
String line = "";
while ((line = reader.readLine()) != null)
{
builder.append(line);
}
reader.close();
}
catch (IOException e) {e.printStackTrace();}
return builder.toString();
}

Related

How to read file contents?

I am trying below code to select pdf from directory and read its contents but its not working
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.setType("*/*");
startActivityForResult(i, PICKFILE_RESULT_CODE);
#Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
switch(requestCode) {
case PICKFILE_RESULT_CODE:
if(resultCode==RESULT_OK){
// String filePath = data.getData().getPath();
// textViewFilePath.setText("File : " + filePath);
// readFromPdf(filePath);
StringBuilder text = new StringBuilder();
String filePath = data.getDataString();
try {
BufferedReader br = new BufferedReader(new FileReader(new File(filePath)));
String line;
while ((line = br.readLine()) != null) {
text.append(line);
text.append('n');
}
scanResults.setText(text + ".....");
}
catch (IOException e) {
//You'll need to add proper error handling here
e.printStackTrace();
}
}
break;
}
}
I am getting below exception
java.io.FileNotFoundException:
content:/com.android.providers.downloads.documents/document/2295: open
failed: ENOENT (No such file or directory)
You should open an InputStream like
InputStream is = getContentResolver().openInputStream(data.getData());
You should not try to use a reader or try to read lines.
Those do not make sense for a pdf file.

Upload Image from gallery to server in android

I am creating an android app. I need to implement a code for uploading profile pic either from gallery or from by capturing from camera.An alert will be shown on clicking the part where picture to be uploaded. It consists of three options One to capture from camera,One to take from gallery,One to cancel.I can successfully
image captured from camera buy when I try to upload Image from gallery i got this error
E/MainActivity: Response from server: java.io.FileNotFoundException: /storage/emulated/0/Pictures/Upload/IMG_20170227_142713.jpg (No such file or directory)
This is the code I used to for alert builder to show options and also to open image gallery or to launch camera
//code to choose profile pic
iv.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
/*Toast.makeText(getApplicationContext(),
"Please choose a photo", Toast.LENGTH_LONG)
.show();*/
final CharSequence[] items = { "Take Photo", "Choose from Library",
"Cancel" };
AlertDialog.Builder builder = new AlertDialog.Builder(LeftMenusMediaActivity.this);
builder.setTitle("Add Photo!");
builder.setItems(items,new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int item) {
if (items[item].equals("Take Photo")) {
//define the file-name to save photo taken by Camera activity
String fileName = "new-photo-name.jpg";
//create parameters for Intent with filename
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
values.put(MediaStore.Images.Media.DESCRIPTION,"Image captured by camera");
//imageUri is the current activity attribute, define and save it for later usage (also in onSaveInstanceState)
imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
//create new Intent
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
imageUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
startActivityForResult(intent, PICK_Camera_IMAGE);
} else if (items[item].equals("Choose from Library")) {
try {
Intent gintent = new Intent();
gintent.setType("image/*");
gintent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(
Intent.createChooser(gintent, "Select Picture"),
PICK_IMAGE);
} catch (Exception e) {
Toast.makeText(getApplicationContext(),
e.getMessage(),
Toast.LENGTH_LONG).show();
Log.e(e.getClass().getName(), e.getMessage(), e);
}
} else if (items[item].equals("Cancel")) {
dialog.dismiss();
}
}
});
builder.show();
}
});
This is my onActivity result function
#Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
selectedImageUri = null;
String filePath = null;
switch (requestCode) {
case PICK_IMAGE:
if (resultCode == Activity.RESULT_OK) {
selectedImageUri = data.getData();
// getPath(selectedImageUri);
launchUploadActivity(true);
Toast.makeText(this, selectedImageUri.toString(), Toast.LENGTH_SHORT).show();
}
break;
case PICK_Camera_IMAGE:
if (resultCode == RESULT_OK) {
//use imageUri here to access the image
selectedImageUri = imageUri;
launchUploadActivity(true);
/*Bitmap mPic = (Bitmap) data.getExtras().get("data");
selectedImageUri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), mPic, getResources().getString(R.string.app_name), Long.toString(System.currentTimeMillis())));*/
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show();
}
break;
}
This is my function to launch upload activity
private void launchUploadActivity(boolean isImage){
Intent i = new Intent(LeftMenusMediaActivity.this, UploadActivity.class);
i.putExtra("filePath", selectedImageUri.getPath());
i.putExtra("isImage", isImage);
startActivity(i);
}
This the my Upload activity class
public class UploadActivity extends Activity {
// LogCat tag
private static final String TAG = MainActivity.class.getSimpleName();
private String filePath = null;
long totalSize = 0;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Changing action bar background color
/* getActionBar().setBackgroundDrawable(
new ColorDrawable(Color.parseColor(getResources().getString(
R.color.action_bar))));*/
// Receiving the data from previous activity
Intent i = getIntent();
// image or video path that is captured in previous activity
filePath = i.getStringExtra("filePath");
// boolean flag to identify the media type, image or video
boolean isImage = i.getBooleanExtra("isImage", true);
if (filePath != null) {
// Displaying the image or video on the screen
//previewMedia(isImage);
new UploadFileToServer().execute();
} else {
Toast.makeText(getApplicationContext(),
"Sorry, file path is missing!", Toast.LENGTH_LONG).show();
}
}
/**
* Uploading the file to server
* */
private class UploadFileToServer extends AsyncTask<Void, Integer, String> {
#Override
protected void onPreExecute() {
// setting progress bar to zero
// progressBar.setProgress(0);
super.onPreExecute();
}
#Override
protected String doInBackground(Void... params) {
return uploadFile();
}
#SuppressWarnings("deprecation")
private String uploadFile() {
String responseString = null;
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(AppConfig.URL_PHOTO);
try {
AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
new AndroidMultiPartEntity.ProgressListener() {
#Override
public void transferred(long num) {
publishProgress((int) ((num / (float) totalSize) * 100));
}
});
File sourceFile = new File(filePath);
;
// Adding file data to http body
entity.addPart("image", new FileBody(sourceFile));
// Extra parameters if you want to pass to server
entity.addPart("website",
new StringBody("www.androidhive.info"));
entity.addPart("email", new StringBody("abc#gmail.com"));
totalSize = entity.getContentLength();
httppost.setEntity(entity);
// Making server call
HttpResponse response = httpclient.execute(httppost);
HttpEntity r_entity = response.getEntity();
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) {
// Server response
responseString = EntityUtils.toString(r_entity);
} else {
responseString = "Error occurred! Http Status Code: "
+ statusCode;
}
} catch (ClientProtocolException e) {
responseString = e.toString();
} catch (IOException e) {
responseString = e.toString();
}
return responseString;
}
#Override
protected void onPostExecute(String result) {
Log.e(TAG, "Response from server: " + result);
// showing the server response in an alert dialog
showAlert(result);
super.onPostExecute(result);
}
}
/**
* Method to show alert dialog
* */
private void showAlert(String message) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(message).setTitle("Response from Servers")
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// do nothing
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
What are the changes needed to make upload from gallery working
My app is working now. I made following changes to my code.
On activity result part
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
selectedImageUri = null;
switch (requestCode) {
case PICK_IMAGE:
if (resultCode == Activity.RESULT_OK) {
selectedImageUri = data.getData();
imagepath = getPath(selectedImageUri);
launchUploadActivity2(true);
Bitmap bitmap=BitmapFactory.decodeFile(imagepath);
iv.setImageBitmap(bitmap);
Toast.makeText(this, selectedImageUri.toString(), Toast.LENGTH_SHORT).show();
}
break;
case PICK_Camera_IMAGE:
if (resultCode == RESULT_OK) {
//use imageUri here to access the image
selectedImageUri = imageUri;
imagepath2=selectedImageUri.getPath();
launchUploadActivity(true);
Bitmap bitmap=BitmapFactory.decodeFile(imagepath2);
iv.setImageBitmap(bitmap);
Log.d(TAG,selectedImageUri.toString());
Toast.makeText(this, selectedImageUri.toString(), Toast.LENGTH_SHORT).show();
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show();
}
break;
}
I made two separate functions for launching upload activity.
Function for launching upload activity class for uploading image from gallery to server is this
private void launchUploadActivity2(boolean isImage){
filePath=imagepath;
if (filePath != null) {
// Displaying the image or video on the screen
//previewMedia(isImage);
new UploadImageToServer1().execute();
} else {
Toast.makeText(getApplicationContext(),
"Sorry, file path is missing!", Toast.LENGTH_LONG).show();
}
}
Function for uploading activity class for uploading image by capturing to server
private void launchUploadActivity(boolean isImage){
filePath=selectedImageUri.getPath();
if (filePath != null) {
// Displaying the image or video on the screen
//previewMedia(isImage);
new UploadImageToServer().execute();
} else {
Toast.makeText(getApplicationContext(),
"Sorry, file path is missing!", Toast.LENGTH_LONG).show();
}
}
Upload activity class
private class UploadImageToServer extends AsyncTask<Void, Integer, String> {
#Override
protected void onPreExecute() {
// setting progress bar to zero
// progressBar.setProgress(0);
super.onPreExecute();
}
#Override
protected String doInBackground(Void... params) {
return uploadFile();
}
#SuppressWarnings("deprecation")
private String uploadFile() {
String responseString = null;
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(AppConfig.URL_PHOTO);
try {
AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
new AndroidMultiPartEntity.ProgressListener() {
#Override
public void transferred(long num) {
publishProgress((int) ((num / (float) totalSize) * 100));
}
});
File sourceFile = new File(filePath);
;
// Adding file data to http body
entity.addPart("image", new FileBody(sourceFile));
// Extra parameters if you want to pass to server
entity.addPart("userid",
new StringBody(session.getuid()));
totalSize = entity.getContentLength();
httppost.setEntity(entity);
// Making server call
HttpResponse response = httpclient.execute(httppost);
HttpEntity r_entity = response.getEntity();
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) {
// Server response
responseString = EntityUtils.toString(r_entity);
} else {
responseString = "Error occurred! Http Status Code: "
+ statusCode;
}
} catch (ClientProtocolException e) {
responseString = e.toString();
} catch (IOException e) {
responseString = e.toString();
}
return responseString;
}
#Override
protected void onPostExecute(String result) {
Log.e(TAG, "Response from server: " + result);
// showing the server response in an alert dialog
super.onPostExecute(result);
}
}
This is the function to create path to a particular folder while capturing image
/**
* Creating file uri to store image/video
*/
public Uri getOutputMediaFileUri(int type) {
return Uri.fromFile(getOutputMediaFile(type));
}
/**
* returning image / video
*/
private static File getOutputMediaFile(int type) {
// External sdcard location
File mediaStorageDir = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
AppConfig.IMAGE_DIRECTORY_NAME);
// Create the storage directory if it does not exist
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d(TAG, "Oops! Failed create "
+ AppConfig.IMAGE_DIRECTORY_NAME + " directory");
return null;
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
Locale.getDefault()).format(new Date());
File mediaFile;
if (type == MEDIA_TYPE_IMAGE) {
mediaFile = new File(mediaStorageDir.getPath() + File.separator
+ "IMG_" + timeStamp + ".jpg");
} else if (type == MEDIA_TYPE_VIDEO) {
mediaFile = new File(mediaStorageDir.getPath() + File.separator
+ "VID_" + timeStamp + ".mp4");
} else {
return null;
}
return mediaFile;
}
Now I can upload from both gallery and camera
Please check the permission in manifest
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Hope this helps.:)
this blog and this repo will be help to you
https://onurgurbuz.github.io/android-ftp-server-kullanimi
https://github.com/onurgurbuz/AndroFTP
OkHttpClient client = new OkHttpClient();
RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("SessionId", "")
.addFormDataPart("UserDeviceGuid", "")
.addFormDataPart("UserPhoto", "photo.png", RequestBody.create(MEDIA_TYPE_PNG, new File(path)))
.build();
serverURL = serverURL + "/FileUpload/UserPhotoUpload";
Request request = new Request.Builder().url(serverURL).post(requestBody).build();
try {
Response response = client.newCall(request).execute();
String strResponse = response.body().string();
Log.d("upload image", "Response" + strResponse);
if (!response.isSuccessful()) {
} else {
JSONObject jsonResponse = null;
try {
jsonResponse = new JSONObject(strResponse);
} catch (JSONException e) {
e.printStackTrace();
}
if (jsonResponse != null && jsonResponse.has("Success") && jsonResponse.getBoolean("Success")) {
isSuccess = true;
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
to get retrofit object
if (retrofit == null) {
retrofit = new retrofit2.Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
Interface
#GET("/photos")
Call<List> getAllPhotos();
get galary image path
private Context context;
/* Get uri related content real local file path. */
public String getUriRealPath(Context ctx, Uri uri, int type) {
this.context = ctx;
String ret = "";
if (isAboveKitKat()) {
// Android OS above sdk version 19.
ret = getUriRealPathAboveKitkat(ctx, uri, type);
} else {
// Android OS below sdk version 19
ret = getImageRealPath(context.getContentResolver(), uri, null);
}
return ret;
}
public Uri getImageUri(Context context, Bitmap bitmap) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
String path = MediaStore.Images.Media.insertImage(context.getContentResolver(), bitmap, "img", null);
return Uri.parse(path);
} catch (IllegalArgumentException e) {
} catch (Exception e) {
}
return null;
}
#TargetApi(Build.VERSION_CODES.KITKAT)
private String getUriRealPathAboveKitkat(Context ctx, Uri uri, int type) {
String ret = "";
if (ctx != null && uri != null) {
if (type == 1) {
if (isFileUri(uri)) {
ret = uri.getPath();
} else if (isDocumentUri(ctx, uri)) {
ret = getPath(uri);
} else if (isGooglePhotoDoc(uri.getAuthority())) {
ret = uri.getLastPathSegment();
} else if (uri.toString().startsWith("content://com.google.android.apps.photos.contentprovider")){
try {
InputStream inputStream = context.getContentResolver().openInputStream(uri); // context needed
File photoFile = createTemporalFileFrom(inputStream);
ret = photoFile.getPath();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
} else if (isContentUri(uri)) {
if (isGooglePhotoDoc(uri.getAuthority())) {
ret = uri.getLastPathSegment();
} else if (uri.toString().startsWith("content://com.google.android.apps.photos.contentprovider")){
try {
InputStream inputStream = context.getContentResolver().openInputStream(uri); // context needed
File photoFile = createTemporalFileFrom(inputStream);
ret = photoFile.getPath();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} else if (uri.toString().startsWith("content://com.google.android.apps.photos.content")){
try {
InputStream is = context.getContentResolver().openInputStream(uri);
if (is != null) {
Bitmap pictureBitmap = BitmapFactory.decodeStream(is);
ret = getImageUri(context, pictureBitmap).toString();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
ret = getImageRealPath(context.getContentResolver(), uri, null);
}
} else if (isFileUri(uri)) {
ret = uri.getPath();
} else if (isDocumentUri(ctx, uri)) {
ret = getPath(uri);
}
}
return ret;
}
private File createTemporalFileFrom(InputStream inputStream) throws IOException {
File targetFile = null;
if (inputStream != null) {
int read;
byte[] buffer = new byte[8 * 1024];
targetFile = createTemporalFile();
OutputStream outputStream = new FileOutputStream(targetFile);
while ((read = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, read);
}
outputStream.flush();
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return targetFile;
}
private File createTemporalFile() {
return new File(context.getExternalCacheDir(), "tempFile.jpg"); // context needed
}
#RequiresApi(api = Build.VERSION_CODES.KITKAT)
private String getPath(Uri uri) {
String ret = "";
// Get uri related document id.
String documentId = DocumentsContract.getDocumentId(uri);
// Get uri authority.
String uriAuthority = uri.getAuthority();
if (isMediaDoc(uriAuthority)) {
String idArr[] = documentId.split(":");
if (idArr.length == 2) {
// First item is document type.
String docType = idArr[0];
// Second item is document real id.
String realDocId = idArr[1];
// Get content uri by document type.
Uri mediaContentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
if ("image".equals(docType)) {
mediaContentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(docType)) {
mediaContentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(docType)) {
mediaContentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
// Get where clause with real document id.
String whereClause = MediaStore.Images.Media._ID + " = " + realDocId;
ret = getImageRealPath(context.getContentResolver(), mediaContentUri, whereClause);
}
} else if (isDownloadDoc(uriAuthority)) {
// Build download uri.
Uri downloadUri = Uri.parse("content://downloads/public_downloads");
// Append download document id at uri end.
Uri downloadUriAppendId = ContentUris.withAppendedId(downloadUri, Long.valueOf(documentId));
ret = getImageRealPath(context.getContentResolver(), downloadUriAppendId, null);
} else if (isExternalStoreDoc(uriAuthority)) {
String idArr[] = documentId.split(":");
if (idArr.length == 2) {
String type = idArr[0];
String realDocId = idArr[1];
if ("primary".equalsIgnoreCase(type)) {
ret = Environment.getExternalStorageDirectory() + "/" + realDocId;
}
}
}
return ret;
}
/* Check whether current android os version is bigger than kitkat or not. */
private boolean isAboveKitKat() {
boolean ret = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
return ret;
}
/* Check whether this uri represent a document or not. */
#TargetApi(Build.VERSION_CODES.KITKAT)
private boolean isDocumentUri(Context ctx, Uri uri) {
boolean ret = false;
if (ctx != null && uri != null) {
ret = DocumentsContract.isDocumentUri(ctx, uri);
}
return ret;
}
/* Check whether this uri is a content uri or not.
content uri like content://media/external/images/media/1302716
*/
public boolean isContentUri(Uri uri) {
boolean ret = false;
if (uri != null) {
String uriSchema = uri.getScheme();
if ("content".equalsIgnoreCase(uriSchema)) {
ret = true;
}
}
return ret;
}
/* Check whether this uri is a file uri or not.
file uri like file:///storage/41B7-12F1/DCIM/Camera/IMG_20180211_095139.jpg
*/
public boolean isFileUri(Uri uri) {
boolean ret = false;
if (uri != null) {
String uriSchema = uri.getScheme();
if ("file".equalsIgnoreCase(uriSchema)) {
ret = true;
}
}
return ret;
}
/* Check whether this document is provided by ExternalStorageProvider. */
private boolean isExternalStoreDoc(String uriAuthority) {
boolean ret = false;
if ("com.android.externalstorage.documents".equals(uriAuthority)) {
ret = true;
}
return ret;
}
/* Check whether this document is provided by DownloadsProvider. */
private boolean isDownloadDoc(String uriAuthority) {
boolean ret = false;
if ("com.android.providers.downloads.documents".equals(uriAuthority)) {
ret = true;
}
return ret;
}
/* Check whether this document is provided by MediaProvider. */
private boolean isMediaDoc(String uriAuthority) {
boolean ret = false;
if ("com.android.providers.media.documents".equals(uriAuthority)) {
ret = true;
}
return ret;
}
/* Check whether this document is provided by google photos. */
private boolean isGooglePhotoDoc(String uriAuthority) {
boolean ret = false;
if ("com.google.android.apps.photos.content".equals(uriAuthority)) {
ret = true;
}
return ret;
}
/* Return uri represented document file real local path.*/
public String getImageRealPath(ContentResolver contentResolver, Uri uri, String whereClause) {
String ret = "";
// Query the uri with condition.
Cursor cursor = contentResolver.query(uri, null, whereClause, null, null);
if (cursor != null) {
boolean moveToFirst = cursor.moveToFirst();
if (moveToFirst) {
// Get columns name by uri type.
String columnName = MediaStore.Images.Media.DATA;
if (uri == MediaStore.Images.Media.EXTERNAL_CONTENT_URI) {
columnName = MediaStore.Images.Media.DATA;
} else if (uri == MediaStore.Audio.Media.EXTERNAL_CONTENT_URI) {
columnName = MediaStore.Audio.Media.DATA;
} else if (uri == MediaStore.Video.Media.EXTERNAL_CONTENT_URI) {
columnName = MediaStore.Video.Media.DATA;
}
// Get column index.
int imageColumnIndex = cursor.getColumnIndex(columnName);
// Get column value which is the uri related file local path.
ret = cursor.getString(imageColumnIndex);
}
}
if (cursor != null){
cursor.close();
}
return ret;
}
Below code get image from gallery and go to show in image view
#Override
protected void onActivityResult(int requestCode, int resultCode, #Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 1111:
if (resultCode == Activity.RESULT_OK) {
if (data != null) {
Uri selectedImage = data.getData();
if (selectedImage == null) {
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String name = "" + System.currentTimeMillis();
String path = MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, name, null);
selectedImage = Uri.parse(path);
}
if (selectedImage != null) {
adapter.dataList.get(index).setUri(selectedImage);
adapter.notifyDataSetChanged();
gotoUploadImage(selectedImage);
}
}
}
break;
}
}
Below code is to get list from web server
GetDataService service = RetrofitClientInstance.getRetrofitInstance().create(GetDataService.class);
Call<List<RetroPhoto>> call = service.getAllPhotos();
call.enqueue(new Callback<List<RetroPhoto>>() {
#Override
public void onResponse(Call<List<RetroPhoto>> call, Response<List<RetroPhoto>> response) {
progressDoalog.dismiss();
generateDataList(response.body());
}
#Override
public void onFailure(Call<List<RetroPhoto>> call, Throwable t) {
progressDoalog.dismiss();
Toast.makeText(HomeScreenActivity.this, "Something went wrong...Please try later!", Toast.LENGTH_SHORT).show();
}
});

How to select an audio file and upload it to parse in android

I opened the music player to select an audio file using this code
button.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
Intent intent_upload = new Intent();
intent_upload.setType("audio/*");
intent_upload.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent_upload,1);
}
});
I called the uploadAudioToParse method inside OnActivityResult()
#Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
if(requestCode == 1){
if(resultCode == RESULT_OK){
//the selected audio.
Uri uri = data.getData();
File abc=new File(uri.toString());
ParseObject ob=new ParseObject("songs");
uploadAudioToParse(abc,ob,"song");
}
}
super.onActivityResult(requestCode, resultCode, data);
}
And this is my uploadAudioToParse method.
private ParseObject uploadAudioToParse(File audioFile, ParseObject po, String columnName){
if(audioFile != null){
Log.d("EB", "audioFile is not NULL: " + audioFile.toString());
ByteArrayOutputStream out = new ByteArrayOutputStream();
BufferedInputStream in = null;
try {
in = new BufferedInputStream(new FileInputStream(audioFile));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
int read;
byte[] buff = new byte[1024];
try {
assert in != null;
while ((read = in.read(buff)) > 0)
{
out.write(buff, 0, read);
}
} catch (IOException e) {
e.printStackTrace();
}
try {
out.flush();
} catch (IOException e) {
e.printStackTrace();
}
byte[] audioBytes = out.toByteArray();
// Create the ParseFile
ParseFile file = new ParseFile(audioFile.getName() , audioBytes);
po.put(columnName, file);
// Upload the file into Parse Cloud
file.saveInBackground();
po.saveInBackground();
}
return po;
}
is the file conversion method correct?

Android intent data is null

I've got the following code:
Uri imageUri = null;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_frontpage);
this.imageView = (ImageView) this.findViewById(R.id.pictureImageView);
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
imageView.setImageBitmap(photo);
Intent frontPageIntent = new Intent(this, FrontPageActivity.class);
imageUri = data.getData();
frontPageIntent.putExtra(URI_PATH, imageUri.toString());
frontPageIntent.putExtra("MapPhoto", photo);
startActivity(frontPageIntent);
}
}
}
It tells me, that my data.getData(); is null. I've tried logging it and i get null. The code worked before, but now somehow my program crashes because of this value being null and not the uri string of the image anymore.
Can anyone spot the problem for me?
Try this :
data.getextras().get("put_here_what _you want to get");
Check this code, It will help you :
private Bitmap rotatedBitmap = null;
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
try {
intent.putExtra("TAG_ORIENTATION", "portrait");
intent.putExtra("return-data", true);
startActivityForResult(intent, 0);
} catch (ActivityNotFoundException e) {
}
//OnActivity Result
#Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
//super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
Uri selectedImageUri = null;
if (data != null) {
thumbnail = (Bitmap) data.getExtras().get("data");
//don't use Exif rotation here.
rotatedBitmap = Bitmap.createScaledBitmap(thumbnail, 150, 150, true);
/** Convert bitmap into byte */
ByteArrayOutputStream stream = new ByteArrayOutputStream();
rotatedBitmap.compress(Bitmap.CompressFormat.PNG, 100,stream);
//byte[] byteArray = stream.toByteArray();
mimEditProfileImage.setImageBitmap(rotatedBitmap);
}
Toast.makeText(this, "Images Selected",Toast.LENGTH_LONG).show();
}
}
String urlString = "";
try {
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(urlString);
//FileBody bin = null;
MultipartEntity reqEntity = new MultipartEntity();
/*if(driverImage!=null){
bin = new FileBody(driverImage);
reqEntity.addPart("Image", bin);
}*/
if(rotatedBitmap != null){
Random generator = new Random();
int n = 10000;
n = generator.nextInt(n);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
rotatedBitmap.compress(CompressFormat.JPEG, 75, bos);
byte[] data = bos.toByteArray();
ByteArrayBody bab = new ByteArrayBody(data,"dcc/"+n+".jpg");
reqEntity.addPart("Image", bab);
}
post.setEntity(reqEntity);
HttpResponse response = client.execute(post);
HttpEntity resEntity = response.getEntity();
response_str = EntityUtils.toString(resEntity);
if (resEntity != null) {
//do some work
}
} catch (Exception ex) {
Log.e("Debug", "error: " + ex.getMessage(), ex);
}
Just make this change in your onCreate()
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
try {
intent.putExtra("return-data", true);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
}

How Can we integrate Sphinx speech recognition for android?

I am developing speech recognition for Java Application Using Sphinx 4. I want speech recognition for ANDroid. Please Help Me :)
//declearation
private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;
TextToSpeech talker;
//onCreate
Button speakButton=new Button(this);
talker = new TextToSpeech(this, this);
// Check to see if a recognition activity is present
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(
new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if (activities.size() != 0) {
speakButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
startVoiceRecognitionActivity();
}
});
} else {
speakButton.setEnabled(false);
speakButton.setText("Recognizer not present");
}
//methods
/**
* Fire an intent to start the speech recognition activity.
*/
private void startVoiceRecognitionActivity() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo");
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
}
/**
* Handle the results from the recognition activity.
*/
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {
ArrayList<String> matches = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
String device = "Bedroom";
String host = "http://web2.anzleads.com/Android/nimboPani/web-service.php?tmote=";
String userCommand = URLEncoder.encode(matches.get(0));
String deviceSelected = "&org=" + device;
res = getServerResponse(host + userCommand + deviceSelected);
say(""+ res);
}
super.onActivityResult(requestCode, resultCode, data);
}
public void say(String text2say){
talker.speak(text2say, TextToSpeech.QUEUE_FLUSH, null);
}
public void onInit(int status) {
// TODO Auto-generated method stub
// say("Hello World");
}
public void onDestroy() {
if (talker != null) {
talker.stop();
talker.shutdown();
}
super.onDestroy();
}
public String getServerResponse(String url)
{
String result = "";
HttpClient hc = new DefaultHttpClient();
HttpResponse hr ;
HttpGet hg = new HttpGet(url);
try
{
hr = hc.execute(hg);
if(hr.getStatusLine().getStatusCode() == 200)
{
HttpEntity he = hr.getEntity();
if (he != null)
{
InputStream is = he.getContent();
result = convertStreamToString(is);
is.close();
}
}
}
catch (Exception e) {
// TODO: handle exception
}
return result;
}
private String convertStreamToString(InputStream instream) {
BufferedReader reader = new BufferedReader(new InputStreamReader(instream));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
instream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}

Categories

Resources