Android 如何使用c++;建设者
我在Delphi中看到过许多示例,但没有一个是C++构建器。我试图用C++重新创建代码,但只有一个例外。如何使用С++的意图Android 如何使用c++;建设者,android,c++,android-intent,c++builder,Android,C++,Android Intent,C++builder,我在Delphi中看到过许多示例,但没有一个是C++构建器。我试图用C++重新创建代码,但只有一个例外。如何使用С++的意图 void __fastcall TForm1::Button1Click(TObject *Sender) { callEmail("russia@gmail.com", "Application"); } //--------------------------------------------------------------------------- v
void __fastcall TForm1::Button1Click(TObject *Sender)
{
callEmail("russia@gmail.com", "Application");
}
//---------------------------------------------------------------------------
void TForm1::callEmail(const String address, const String Subject){
JIntent* intent;
TJIntent* intentTwo;
intent = intentTwo->Create();
intent->setAction(intentTwo->JavaClass->ACTION_SEND);
intent->setFlags(intentTwo->JavaClass->FLAG_ACTIVITY_NEW_TASK);
intent->putExtra(intentTwo->JavaClass->EXTRA_EMAIL, StringToJString(address));
intent->putExtra(intentTwo->JavaClass->EXTRA_SUBJECT, StringToJString(Subject));
intent->setType(StringToJString('vnd.android.cursor.dir/email'));
SharedActivity()->startActivity(intent);
}
thnik,也许我认为androidmanifest或用户权限需要更改?您的代码正在崩溃,因为您没有正确构造Intent对象
Create()
是Delphi中的构造函数<代码>意图:= tjTime.在Delphi中创建< /Cube >将是< C++ >
此外,Embarcadero为其iOS/Android桥接框架使用接口,因此您应该使用提供的DelphiInterface
typedefs,例如\u di\u JIntent
,而不是直接使用JIntent*
另外,JavaClass
(以及iOS中的OCClass
)是一个静态类属性。访问它不需要对象实例,只需要类类型
此外,C++使用字符引文的单引号和字符串字的双引号,而Delphi则为两者都使用单引号。代码> 'VND.Android .Currase.dir/Email’在C++中不是字符串文字,而是多字节字符文字,而不是你想要的。使用双引号代替
另外,
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);
}
感谢这是工作!另一个小问题是,如何运行默认电子邮件应用程序?不知何故,额外的电子邮件不会被传递
EXTRA_email
必须包含字符串数组,即使它只有1个元素。使用TJavaObjectArray
创建该数组。例如,我不知道如何表达我的感激之情!谢谢
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);
}