安装应用后删除Apk

时间:2014-05-05 09:36:10

标签: broadcastreceiver apk android-broadcast android

我正在开发一个应用,我必须限制用户亲自分享apk。可以下载它但不应该允许通过蓝牙等个人分享App(apk)。

我搜索并阅读了很多同样的问题,但没有找到完整的答案。我试过以下。

  1. How to get the file *.apk location in Android device

  2. Download, Installing and Delete .apk file on android device programmatically from a website other than marketplace

  3. 我从上面了解到,执行此操作的简单方法是在安装应用程序后从用户设备中删除apk文件。 (我也知道用户可以通过root访问再次生成这个apk,但这很好,至少我可以限制不是全部而是很多)。

    现在我尝试了,我正在注册一个广播接收器,并在我的onReceive()方法中,我有以下内容,

    PackageManager pm = getPackageManager();
    
    for (ApplicationInfo app : pm.getInstalledApplications(0)) {
     if (myPackage.equalsIgnoreCase(app.packageName)) {
        apkPath = app.sourceDir;
        break;
     }
    }
    Log.d("Package", myPackage + " - APK - " + apkPath);
    if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) {
        File sdcard = Environment.getExternalStorageDirectory();
        File file = new File(sdcard, apkPath);
        file.delete();
    }
    

    但这没有任何作用,因为我不知道我应该用来注册它的IntentFilter。

    任何人都能指导我下一步是什么吗?如果我完全在错误的土地上,那么帮助我实现上述目标?

    任何帮助将不胜感激。 :)

6 个答案:

答案 0 :(得分:2)

在Android的更高版本中,某些(全部?)广播不会被发送到应用,直到手动打开至少一次为止。这是一项无法规避的安全功能。

答案 1 :(得分:2)

据我所知,无法收听安装完整的广播事件。具有广播操作的Android Api:“ACTION_PACKAGE_ADDED”但是新安装的包不接收此广播。资料来源:Here

我的建议是检查你的第一个启动器活动并删除apk。

答案 2 :(得分:2)

您可以在此处使用Android App许可服务。 请参阅http://developer.android.com/google/play/licensing/index.html以及此处的http://developer.android.com/google/play/licensing/adding-licensing.html

这将确保使用市场上的任何应用程序无法共享apk(使其受到保护)。

答案 3 :(得分:1)

抱歉英文不好。

这里我的解决方案不是实际代码:

1)在您的设备中安装任何新应用程序时设置您的broadcastreciver。

2)当你的broadcastreciver被调用时,你在onRecive()方法中编写代码        检查您的应用包是否安装

   private boolean isPackageInstalled(String packagename, Context context) {
    PackageManager pm = context.getPackageManager();
    try {
        pm.getPackageInfo(packagename, PackageManager.GET_ACTIVITIES);
        return true;
    } catch (NameNotFoundException e) {
        return false;
    }
}

使用此方法或任何方法  如果你得到真的意味着你的应用程序是安装

3)如果你从isPackageInstalled(" com.download.app",context)方法得到了真实的话  那个时候从SD卡中删除apk文件或设备中的任何插件

如果你更加澄清,我会解释。

答案 4 :(得分:0)

我使用了第一次运行应用程序时创建文件夹的想法。如果它不存在,请删除apk。如果文件夹存在,那么apk已被删除。 如果应用程序未安装,该文件夹将自行删除。

public static String link = Environment.getExternalStorageDirectory()
        .getPath() + "/Android/data/YourAppPackageName/";

//check if its running for the first time
    File f = new File(link);
    if (f.exists()) {

       File f1 = new File("/data/app/YourAppPackageName.apk")
       if(f1.exists()){f1.delete();}
    }
    else {
    f.mkdirs();
    }

答案 5 :(得分:0)

您还可以使用HockeyApp产品并使用他们提供的Android应用程序进行分发,并启用“限制”功能。我很确定无需编写额外的代码就可以满足您的需求。