如何关闭或停止我在Android中启动的外部应用程序

如何关闭或停止我在Android中启动的外部应用程序,android,Android,我有一个应用程序,需要显示一些PDF文件。这些文件是该设备的本地文件,并且该设备在没有web访问的高安全性位置使用 在Android获得一些本机功能或库来显示PDF文件之前,我依赖AdobeReader.apk,我会启动它: Intent i = new Intent(Intent.ACTION_VIEW); i.setDataAndType(Uri.fromFile(dgfile), "application/pdf"); i.setClassName("com.

我有一个应用程序,需要显示一些PDF文件。这些文件是该设备的本地文件,并且该设备在没有web访问的高安全性位置使用

在Android获得一些本机功能或库来显示PDF文件之前,我依赖AdobeReader.apk,我会启动它:

Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.fromFile(dgfile), "application/pdf");
i.setClassName("com.adobe.reader", "com.adobe.reader.AdobeReader");
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
// ctx is a passed-in Context of my main Activity
try   { 
    ctx.startActivity(i);
}
 catch (ActivityNotFoundException e)    {   // incase no viewer installed
    Log.e("DG_External", "No viewer found!");
}
这工作得很好,但在我完成显示后,我想停止它并返回到我的主应用程序。上的“获胜”回答说,如果我使用StartActivityForresult()我可以用finishActivity()完成它,但我无法让它工作(我不知道它如何工作,因为没有我们想要停止的活动实例)

尽管如此,我还是将我的StartTactivity改为:

((Activity)ctx).startActivityForResult(i, 33);  //!!  // 33 = arbitrary r.c.
这很好地调用了Adobe reader,但是执行

((Activity)ctx).finishActivity(33);
…没有结果。我尝试用try/catch包装它,但没有抛出异常

我做错了什么?我如何做才是对的?提前谢谢

思考这个问题的另一种方式是,我如何将我的应用程序放在显示屏的顶部,并将AdobeReader移到后台


对您的一项活动调用
startActivity()
。应用程序中的某些内容确定“PC上的用户关闭文档”。通过使用Android SDK,某些东西可以调用
startActivity()

,一旦A将控制权交给B,就无法从您自己的活动A完成活动B。由用户决定何时完成阅读并返回到您的应用程序。我认为您无法强制外部活动完成。您希望pdf查看器加载并显示该文件,但在一段时间后就消失了?也许您可以启动自己的活动,但可以在新任务中启动。此活动随后启动Acrobat,但处于同一任务中。然后你可以通过执行exit()函数来控制这个单独的任务。@CS Smith:不涉及计时器-这些应用程序为在PC上运行的工业过程提供远程控制。如果PC上的用户关闭了一个文档,我们希望它在安卓设备上关闭。即使AdobeReader有显示器,PC和Android应用程序之间的通信仍在进行中。思考这个问题的另一种方式是,我如何将我的应用程序放在显示屏顶部,并将AdobeReader移到后台?@Nobu Games-我链接到的StackOverflow答案中提到了什么?这意味着这是可能的,尽管我不清楚它是如何工作的。我尝试了这个,但没有成功。因为它改变了这个线程的方向,所以我为它启动了一个新线程:。与此同时,我已经将你的回答标记为“已回答”,并赞扬你至少给了我一些希望。