【问题标题】:Delphi Launching external application "No activity found"Delphi 启动外部应用程序“未找到活动”
【发布时间】:2014-12-01 19:40:45
【问题描述】:

我想从我刚刚编写的另一个应用程序中启动/运行/启动我用 Embarcadero XE7 (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;

待启动应用的Manifest文件部分内容:

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

我认为清单文件是正确的,表明我可以调用应用程序。但是,当我运行程序时,它会说

未找到处理 Intent {act=com.embarcadero.Server.MAIN 的活动 pkg=com.embaracdero.Server}

我尝试使用android.intent.action.MAIN 得到了一些结果。

缺少什么?

【问题讨论】:

标签: android delphi android-intent


【解决方案1】:

我找到了在不发送任何文本文件或类似文件的情况下启动外部应用程序的解决方案。在所有示例中,我发现您发送了一个文件或类似“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 是要启动的应用程序包的名称。

【讨论】:

    【解决方案2】:

    这很好用:

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

    【讨论】:

      猜你喜欢
      • 2014-10-11
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多