2015-06-19 30 views
0

参考this后我需要问别的东西。安装后通过应用程序无需启动

我有一个应用程序“A”它下载并安装另一个应用程序“B”
我想要B将数据“传输”到A然后A将使用此数据来完成工作。

我知道我们可以通过intent传输数据。
安装后B应用程序与A,Android提供了一个选择“好”或“启动”;我的问题是:

  • 是不是可以从一个传递数据,当我们点击“确定”? (所以我们留在A应用程序不启动B
  • 如果是的话,怎么样?是否有可能以“隐形”发射B?我应该如何编码B才能得到这个比较?

我知道这可能很难理解,你可以尝试检查我以前的平局(here再次)。

编辑:

我用这个代码从一个推出安装。

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
Uri uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory().toString() + "/downloadedfile.apk")); 
Intent.setDataAndType(uri, "application/vnd.android.package-archive"); 
getApplicationContext().startActivity(intent); 
+0

a)由应用程序B “OK” 或 “启动”? b)或包管理器/ instalator应用程序? ....显然:如果a)然后是,发送广播到A的onCreate的B活动,并关闭...如果b)根本不可能 – Selvin

+0

我编辑,我用它来安装B应用程序,然后你有手动installtion(像所有的Android应用程序,检查特权,接受然后安装),然后,Android问你是否要启动你的新应用程序。我不想启动** B **或不在这里,我需要留在** A **活动中,但是需要检索** B **数据 –

+0

,因为如果用户不启动一个B的API11组件将不可用其活动... – Selvin

回答

1

有很多方法可以解决这个问题,这里有一个(我相信)实现起来相当简单。由于您的A应用[大概]知道它正在安装什么:

应用A:添加BroadcastReceiver以对安装作出反应,但默认情况下关闭。

Android: BroadcastReceiver on application install/uninstall

应用B:背景通信添加Service

注:Service必须出口是通过明确意图的其他应用程序访问,但是这将创建一个安全的关注,因为它是开放给所有其他应用。

当App A的用户点击来安装应用程序B:

设置为检测所述安装一个过滤器启动BroadcastReceiverstackoverflow...android-broadcastreceiver-on-application-install-uninstall

应用A开始安装。

BroadcastReceiver检测到已添加软件包(软件包名称将在收到的意图中)时,它可以停止BroadcastReceiver,并且可以发送命名AppB中服务的explicit Intent。您可以将意图中需要的任何数据传递给您。

当AppB服务收到意图时,它可以以任何您想要的方式进行操作。

服务始终使用非空意图创建,尽管显式的Intent的“操作”为空。 如果服务被重新创建,Service.onStartCommand()可能会收到一个空的Intent。

我填写更多的代码,但我有一天的工作;)

注:
Intent.ACTION_PACKAGE_ADDED安装包时调用。
Intent.ACTION_PACKAGE_INSTALL从未使用,并且在API被废弃14.

http://developer.android.com/reference/android/content/BroadcastReceiver.html http://developer.android.com/reference/android/content/Intent.html

+0

非常感谢。我会尽快检查它(可能下个星期一),然后可能问你一些其他问题! –

+0

安装我的应用程序后,我得到了我的BroadcastReceiver。那么,我需要在AppB中调用该服务?我怎样才能做到这一点?考虑到我甚至没有启动AppB,这甚至可能吗?如果可能的话,我需要将数据从AppB服务传输到AppA? –

+0

从AppA向AppB发送明确的意图(添加上面的链接)询问数据,然后从AppB向AppA发送一个数据。有很多替代方法可以实现这一点,但这可能是最容易实现的。 – CodeShane

相关问题