Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用c++;建设者_Android_C++_Android Intent_C++builder - Fatal编程技术网

Android 如何使用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

我在Delphi中看到过许多示例,但没有一个是C++构建器。我试图用C++重新创建代码,但只有一个例外。如何使用С++的意图

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);
}