Breaking News
Loading...
Wednesday, 24 October 2012

Start activity to send email with multiple images attached, with build-in MediaStore.Images.Media selector.

08:00
The previous post demonstrate how to "Start activity to send email with multi images attached" using Android's Gallery App select images one-by-one. And the post "List images in MediaStore.Images.Media, with multiple selection" demonstrate how to implement our own image files selector. They are merged to have our own images selector to attach images in email.

Start activity to send email with multiple images attached, with build-in MediaStore.Images.Media selector.


package com.example.androidselectmultifiles;

import java.util.ArrayList;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.content.CursorLoader;
import android.support.v4.widget.CursorAdapter;
import android.support.v4.widget.SimpleCursorAdapter;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.util.SparseBooleanArray;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

EditText edittextEmailAddress;
EditText edittextEmailSubject;
EditText edittextEmailText;
Button btnSend;
ListView listViewFiles;

ArrayList<Uri> arrayUri = new ArrayList<Uri>();
ArrayAdapter<Uri> myFileListAdapter;

final int RQS_SENDEMAIL = 1;

SimpleCursorAdapter listAdapter;

final Uri sourceUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
ListAdapter adapter;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

edittextEmailAddress = (EditText)findViewById(R.id.email_address);
edittextEmailSubject = (EditText)findViewById(R.id.email_subject);
edittextEmailText = (EditText)findViewById(R.id.email_text);

btnSend = (Button)findViewById(R.id.send);
btnSend.setOnClickListener(btnSendOnClickListener);

listViewFiles = (ListView)findViewById(R.id.filelist);
String[] from = {MediaStore.MediaColumns.TITLE};
int[] to = {android.R.id.text1};

CursorLoader cursorLoader = new CursorLoader(
this,
sourceUri,
null,
null,
null,
MediaStore.Audio.Media.TITLE);

Cursor cursor = cursorLoader.loadInBackground();
listAdapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_multiple_choice,
cursor,
from,
to,
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

listViewFiles.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

listViewFiles.setAdapter(listAdapter);
}

private ArrayList<Uri> getSelectedFiles(){
ArrayList<Uri> arrayU = new ArrayList<Uri>();

SparseBooleanArray checkedArray = listViewFiles.getCheckedItemPositions();

for(int i=0; i<checkedArray.size(); i++)
{
int pos = checkedArray.keyAt(i);
Cursor cursor = listAdapter.getCursor();
cursor.moveToPosition(pos);
String _id = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media._ID));
Uri selUri = Uri.withAppendedPath(sourceUri, _id);
arrayU.add(selUri);
}

return arrayU;
}

OnClickListener btnSendOnClickListener
= new OnClickListener(){

@Override
public void onClick(View v) {

arrayUri = getSelectedFiles();

String emailAddress = edittextEmailAddress.getText().toString();
String emailSubject = edittextEmailSubject.getText().toString();
String emailText = edittextEmailText.getText().toString();
String emailAddressList[] = {emailAddress};

Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_EMAIL, emailAddressList);
intent.putExtra(Intent.EXTRA_SUBJECT, emailSubject);
intent.putExtra(Intent.EXTRA_TEXT, emailText);

if(arrayUri.isEmpty()){
//Send email without photo attached
intent.setAction(Intent.ACTION_SEND);
intent.setType("plain/text");
}else if(arrayUri.size() == 1){
//Send email with ONE photo attached
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, arrayUri.get(0));
intent.setType("image/*");
}else{
//Send email with MULTI photo attached
intent.setAction(Intent.ACTION_SEND_MULTIPLE);
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, arrayUri);
intent.setType("image/*");
}

startActivity(Intent.createChooser(intent, "Choice App to send email:"));
}};

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (resultCode == RESULT_OK){
switch(requestCode){
case RQS_SENDEMAIL:
break;
}
}
}

}


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
tools:context=".MainActivity" />

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Enter email address:"/>
<EditText
android:id="@+id/email_address"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Enter email Subject:"/>
<EditText
android:id="@+id/email_subject"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textEmailSubject"/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Enter Text:"/>
<EditText
android:id="@+id/email_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>

<Button
android:id="@+id/send"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Send"/>
<ListView
android:id="@+id/filelist"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

</LinearLayout>


download filesDownload the files.

Next:
- email send images exercise, with spinner of pre-defined subjects.


0 comments:

Post a Comment

 
Toggle Footer