2013-08-29 32 views
2

是否有可能android应用程序使自己的apk文件在运行时?如何使自己发送能力的Android应用程序

我希望我的应用能够通过蓝牙发送自己,我该怎么做?

+0

你的意思束您的应用程序到另一台设备,并将它自动安装? – jaesanx

+1

您可以构建应用程序并将其放入资产文件夹。这意味着你必须为每次更新都做到这一点,并会双击apk。尺寸。我无法帮助你把它分开。 – MattMatt

+1

但使用此解决方案,应用程序只能发送一次!发送的应用程序没有自己的资产。 –

回答

2

最后我找到了答案! 由于android会将apk文件保存在内存中,因此无需制作应用程序的apk,您可以使用PackageManager访问该应用的apk文件, 它会给出apk的保存位置,然后您可以发送它通过蓝牙!

+0

这是不正确的答案,接受@Erfan egtfi回答 –

+0

@ adnan9011:如果你关心你可以看到Erfan的答案是我的答案的代码!如果你关心更多,你可以看到我已经写了2年前的答案! Erfan的回答是正确的,我很欣赏他。 –

1

最好的选择是将.apk文件放在资产中并从那里发送。

为了避免更新问题,您可以告诉您的应用程序在发送之前从某个服务器下载.apk文件。 (但为什么要这样做,其他用户可以从市场上下载它?对不起,但也许如果你解释了这个想法背后的原因,我们可以给你一个更好的解释你的选择?)

你的apk文件是从你的项目在日食为前。所以实际上从应用程序中的这些文件构建.apk将是荒谬的,并且可能不可能(您将不得不编写编译,构建......的过程)

+0

的主要原因是使用户能够发布应用程序,而无需连接到互联网。 –

+0

这不是一个好的选择:apk应该在资产中,然后才能构建apk,这是一个递归构建系统。如果您在资产文件夹中创建了一个没有自己的apk文件,然后将其放入资产并重新生成,则生成的应用程序可以共享缺少共享功能的副本。 – Alireza

1

最好的办法是简单地重定向到Google Play商店,或者你自己的apk版本。

你不能真正捆绑应用程序本身,因为那么共享的捆绑apk没有捆绑apk与下一个人共享,所以该功能在一个共享后中断。

如果你真的想要这个功能,你必须做一些事情,比如在你第一次启动应用程序时将apk(从你自己的服务器上)下载到共享存储上。下载后,您可以启用“通过蓝牙发送”功能。

6

最好的办法是这样的:

// Get current ApplicationInfo to find .apk path 
ApplicationInfo app = getApplicationContext().getApplicationInfo(); 
String filePath = app.sourceDir; 

Intent intent = new Intent(Intent.ACTION_SEND); 

// MIME of .apk is "application/vnd.android.package-archive". 
// but Bluetooth does not accept this. Let's use "*/*" instead. 
intent.setType("*/*"); 

// Only use Bluetooth to send .apk 
intent.setPackage("com.android.bluetooth"); 

// Append file and send Intent 
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(filePath))); 
startActivity(Intent.createChooser(intent, "Share app")); 
+0

评论真的很有用:) – theapache64

相关问题