Android-如何 “快速” 的监听应用安装完成,并将应用打开的问题?

Android-如何 “快速” 的监听应用安装完成,并将应用打开的问题?

虐人心 发布于 2017-05-26 字数 950 浏览 1051 回复 1

最近做项目时,有这样一个需求,我的程序提供应用的下载,我希望在应用下载安装完成后能以最快的速度去将他启动起来。
现在我这边实现的情况就是
public void onReceive(final Context context, Intent intent) {

// TODO Auto-generated method stub
String action = intent.getAction();
String packageName = intent.getDataString();
if (packageName != null && packageName.length() > 0)
packageName = packageName.substring(8);
String type = null;
if (action.equals("android.intent.action.PACKAGE_ADDED")) {

Log.e(CommonUtil.TAG, "MyBroadcastReceiver : **** checked app install packageName :"
+ packageName + "*****");
type = "install";
} else {
Log.e(CommonUtil.TAG,
" MyBroadcastReceiver : **** checked app uninstall packageName :"
+ packageName + " ****");
type = "uninstall";
}

openApp(context, type, packageName);//打开应用程序
}

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

瑾兮 2017-08-22 1 楼

提供一个思路,控制应用程序数据库,如果count改变的话就遍历看是否有你安装的程序,有的话就打开。这样就不取决广播时间。每个机型上操纵算法什么都有dalvik速度决定,达到统一。

查看源码后总结一下我的答案:通过系统application的URI获取应用程序数据库,对其注册contentObserver监听该数据库的变化,可以准确知道系统是否安装了程序或者卸载了程序。具体的代码如下:

Cursor curso = getContentResolver().query(Uri.parse("content://applications/search/"), null, null, null, null);
getContentResolver().registerContentObserver(Uri.parse("content://applications/search/"),
true, contentObserver);
/*application数据库的字段不是很明朗,源码里面提供了三个字段,
* public interface ApplicationColumns extends BaseColumns {
public static final String NAME = "name";
public static final String ICON = "icon";
public static final String URI = "uri";
},虽然不多但是足够我们用,我们一般需要知道名字和uri*/
}
});
}

ContentObserver contentObserver = new ContentObserver(new Handler()) {

@Override
public boolean deliverSelfNotifications() {
// TODO Auto-generated method stub
return super.deliverSelfNotifications();
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
/*数据库改变了,需要做相应的操作,比如打开应用程序*/
}

};

这个是代码片段。