0
我試圖從我的應用程序發送電子郵件。 這個電子郵件sholud包含一個attchment。 我的MainActiviry調用intent服務並尋找權限。這是這個樣子 -Android通過意向服務發送帶附件的電子郵件
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if((ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) &&
(ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED))
startCommaSeparatedService();
else {
if(shouldShowRequestPermissionRationale(Manifest.permission.READ_EXTERNAL_STORAGE) &&
shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE))
Toast.makeText(this, "Track your nevi required access to external storage", Toast.LENGTH_LONG).show();
requestPermissions(PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE);
}
} else {
startCommaSeparatedService();
}
}
private void startCommaSeparatedService() {
ArrayList<ResultsExport> toExport = mDataBaseHelper.getAllDataParsed();
if(toExport.size() > 0) {
Intent intent = new Intent(MainActivity.this, CommaSeparatedValuesService.class);
intent.setAction(CommaSeparatedValuesService.ACTION_EXPORT_TO_MAIL);
intent.putParcelableArrayListExtra(CommaSeparatedValuesService.EXTRA_RESULT, toExport);
startService(intent);
} else
Toast.makeText(getApplicationContext(), getResources().getString(R.string.no_results_to_export)
, Toast.LENGTH_SHORT).show();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode == REQUEST_EXTERNAL_STORAGE)
if((grantResults[0] != PackageManager.PERMISSION_GRANTED) &&
(grantResults[1] != PackageManager.PERMISSION_GRANTED))
Toast.makeText(getApplicationContext(), "This application need permissions to external storage", Toast.LENGTH_LONG).show();
}
我CommaSeparatedValuesService看起來像 -
package com.example.user.trackyournevi.services;
import android.app.IntentService;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.support.annotation.Nullable;
import com.example.user.trackyournevi.bl.ResultsExport;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
public class CommaSeparatedValuesService extends IntentService{
public static final String ACTION_EXPORT_TO_MAIL = "com.example.user.trackyournevi.services.action.ACTION_EXPORT_TO_MAIL";
public static final String EXTRA_RESULT = "com.example.user.trackyournevi.services.extra.PARENT";
public static final String EXTRA_TRASHED = "com.example.user.trackyournevi.services.extra.TRASHED";
public static final String COMMA_DELIMITER = ",";
public static final String NEW_LINE_SEPERATOR = "\n";
public static final String CSV_FILE_HEADER = "Scan date" + COMMA_DELIMITER + "Organ" + COMMA_DELIMITER
+ "Side" + COMMA_DELIMITER + "Recommendation" + COMMA_DELIMITER + "Changes" + NEW_LINE_SEPERATOR;
/**
* Creates an IntentService. Invoked by your subclass's constructor.
*
* @param name Used to name the worker thread, important only for debugging.
*/
public CommaSeparatedValuesService(String name) {
super(name);
}
@Override
protected void onHandleIntent(@Nullable Intent intent) {
if(intent != null) {
final String action = intent.getAction();
if(ACTION_EXPORT_TO_MAIL.equals(action)) {
boolean trashed = intent.getBooleanExtra(EXTRA_TRASHED, false);
ArrayList<ResultsExport> results = intent.getParcelableArrayListExtra(EXTRA_RESULT);
handleActionExport(results, trashed);
}
}
}
public void handleActionExport(ArrayList<ResultsExport> results, boolean trashed) {
String path = null;
try {
path = writeToCSVFile(results);
} catch (IOException e) {
e.printStackTrace();
}
sentAttachedMail(path);
}
private static String writeToCSVFile(ArrayList<ResultsExport> results) throws IOException {
File patternDirectory = new File(Environment.getExternalStorageDirectory().getAbsolutePath().toString()+"/com.example.pattern1/myfile.txt");
patternDirectory.mkdirs();
FileOutputStream fos = null;
try {
fos = new FileOutputStream (new File(patternDirectory.getAbsolutePath().toString()), true); // true will be same as Context.MODE_APPEND
fos.write(CSV_FILE_HEADER.getBytes());
fos.write("\n".getBytes());
Iterator<ResultsExport> it = results.iterator();
while (it.hasNext()) {
ResultsExport r = it.next();
fos.write(r.getScanDate().getBytes());
fos.write(COMMA_DELIMITER.getBytes());
fos.write(r.getOrgan().toString().getBytes());
fos.write(COMMA_DELIMITER.getBytes());
fos.write(r.getSide().getBytes());
fos.write(COMMA_DELIMITER.getBytes());
fos.write(r.getRecommendation().getBytes());
fos.write(COMMA_DELIMITER.getBytes());
fos.write(r.getChanges().getBytes());
fos.write(NEW_LINE_SEPERATOR.getBytes());
fos.close();
}
} catch (FileNotFoundException e) {e.printStackTrace();}
return patternDirectory.getAbsolutePath().toString();
}
private void sentAttachedMail(String path) {
Intent email = new Intent(Intent.ACTION_SEND);
email.setType("text/plain");
email.putExtra(Intent.EXTRA_SUBJECT, "My Scannings");
email.putExtra(Intent.EXTRA_STREAM, Uri.parse(path));
email.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(Intent.createChooser(email , "Email:"));
}
}
是有人可以解釋我什麼在此代碼撥錯? TNX
'有人可以解釋我什麼撥錯在這段代碼'? ??你應該告訴你的代碼出了什麼問題。您發佈了太多的代碼來處理emai發送問題。 – greenapps