您的代碼崩潰,因爲您沒有正確構建Intent對象。
Create()
是Delphi的構造函數。 Delphi中的intent := TJIntent.Create
將是C++中的intent = new TJIntent
。另外,Embarcadero爲其iOS/Android橋接框架使用接口,所以您應該直接使用提供的DelphiInterface<T>
typedefs,例如_di_JIntent
而不是JIntent*
。
另外,JavaClass
(和OCClass
在iOS中)是一個靜態類屬性。你不需要一個對象實例來訪問它,只需要類的類型。
此外,C++使用單引號字符文字和雙引號字符串文字,而德爾福使用單引號的兩個。 C++中的'vnd.android.cursor.dir/email'
不是字符串文字,而是一個多字節字符文字,而不是你想要的。改爲使用雙引號。
此外,EXTRA_EMAIL
必須表示爲一個字符串數組。
嘗試更多的東西是這樣的:
void TForm1::callEmail(const String address, const String Subject)
{
_di_JIntent intent;
intent = new TJIntent; // or: intent = TJIntent::JavaClass->init();
intent->setAction(TJIntent::JavaClass->ACTION_SEND);
// or: intent = TJIntent::JavaClass->init(TJIntent::JavaClass->ACTION_SEND);
intent->setFlags(TJIntent::JavaClass->FLAG_ACTIVITY_NEW_TASK);
TJavaObjectArray__1<_di_JString> *Recipients = new TJavaObjectArray__1<_di_JString>(1);
Recipients->Items[0] = StringToJString(address);
intent->putExtra(TJIntent::JavaClass->EXTRA_EMAIL, Recipients);
intent->putExtra(TJIntent::JavaClass->EXTRA_SUBJECT, StringToJString(Subject));
intent->setType(StringToJString(L"vnd.android.cursor.dir/email"));
SharedActivity()->startActivity(intent);
}
現在,這麼說,你真的不應該使用vnd.android.cursor.dir/email
爲意圖的MIME類型。改爲使用message/rfc822
,或者甚至使用plain/text
。但是這些不會限制電子郵件客戶端的意圖,其他應用程序也可能支持這些類型。要僅使用真實的電子郵件客戶端發送電子郵件,請改爲使用ACTION_SENDTO
,而使用mailto:
URI。對於1個收件人,您可以將地址直接放在URI中,根本不使用EXTRA_EMAIL
。對於2+接收者,請使用其中沒有地址的mailto:
URI,並使用EXTRA_EMAIL
作爲地址。這是Android文檔中提到:
Common Intents | Email
例如:
void TForm1::callEmail(const String address, const String Subject)
{
_di_JIntent intent;
intent = new TJIntent; // or: intent = TJIntent::JavaClass->init();
intent->setAction(TJIntent::JavaClass->ACTION_SENDTO);
intent->setData(StrToJURI(L"mailto:" + address));
// or: intent = TJIntent::JavaClass->init(TJIntent::JavaClass->ACTION_SENDTO, StrToJURI(L"mailto:" + address));
intent->setFlags(TJIntent::JavaClass->FLAG_ACTIVITY_NEW_TASK);
intent->putExtra(TJIntent::JavaClass->EXTRA_SUBJECT, StringToJString(Subject));
intent->setType(StringToJString(L"message/rfc822"));
SharedActivity()->startActivity(intent);
}
謝謝!是工作!另一個小問題,如何運行默認的電子郵件應用程序? –
EXTRA-MAIL不通過 –
'EXTRA_EMAIL'必須包含一個字符串數組,即使它只有一個元素。使用'TJavaObjectArray'來創建該數組。有關示例,請參閱[本答案](http://stackoverflow.com/a/19344140/65863)。 –