2014-12-01 57 views
0

感谢您的阅读。我想从我刚刚写的另一个应用程序开始/运行/启动我在Embarcadero XE7(Delphi)中编写的应用程序。Delphi启动外部应用程序“未找到活动”

function LaunchActivity(const Intent: JIntent): Boolean; overload; 
begin 
    SharedActivity.getPackageManager.resolveActivity(Intent, 0); 
    SharedActivity.startActivity(Intent); 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Intent: JIntent; 
begin 
    Intent := TJIntent.JavaClass.init(StringToJString('com.embarcadero.Server.MAIN')); 
    Intent.setPackage(StringToJString('com.embarcadero.Server')); 
    LaunchActivity(Intent) 
end; 

应用程序的清单文件的一些内容即将推出:

<intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 

我认为,清单文件是正确的,展示我可以调用应用程序。然而,当我运行它,它说,

无活动处理意向{行动= com.embarcadero.Server.MAIN PKG = com.embaracdero.Server}

我试着用android.intent.action.MAIN与一些结果。

错过了一些东西......有帮助吗?

在此先感谢。

+0

见[距离Delphi发送的Android意图(第1部分)](http://www.danieleteti.it/2013/09/26/sending-android-intents-from -delphi-part-1 /)和[从Delphi发送Android内容(第2部分)](http://www.danieleteti.it/2014/01/13/sending-android-intents-from-delphi-part-2 /)。 – 2014-12-02 01:38:54

回答

0

我找到了启动外部应用程序而不发送任何文本文件或类似的解决方案。在所有例子中,我发现你发送一个文件或类似“http://google.com”。

重要 - >这是为了启动外部应用程序。没有信息被传递/发送到应用程序。

两种方式。

1.-要启动的应用程序在手机上没有可见图标,但可以从其他应用程序启动。

<intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 

2.-应用程序在手机中有一个可见的图标来手动启动/启动它。你可以从另一个应用程序启动它。

 <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 

的Delphi代码在这两种情况下启动应用程序是:

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Intent: JIntent; 

begin 

Intent := TJIntent.Create; 
Intent.setPackage(StringToJString('com.embarcadero.Server2')); 
Intent.setAction(TJIntent.JavaClass.ACTION_MAIN); 
SharedActivity.startActivity(Intent); 

end; 

哪里com.embarcadero.Server2是要启动的程序包的应用程序的名称。

希望有人可以使用这些信息。

0

这工作正常:

Intent := TJIntent.Create; 
    Intent:= SharedActivity.getPackageManager.getLaunchIntentForPackage(StringToJString(s)); 
    SharedActivity.startActivity(Intent);