文档章节

Android apk安装后自动添加桌面图标 和 自启动的尝试

wanyang
 wanyang
发布于 2014/02/20 19:14
字数 642
阅读 750
收藏 13

AndroidSchemeXML 

前一个问题是论坛里的一位朋友提出来的:“如何在应用安装到手机里时,自动在桌面增加快捷方式?” ,第二个问题是在网上看到的:“apk安装后如何自启动” 。


很显然,除非在应用安装后有相关的广播能被捕获到,否则就没法做了,事实是有的:Intent.ACTION_PACKAGE_ADDED。

Launcher中的应用列表正是这么做的:

<Launcher.java>

Java代码  收藏代码

  1. /** 

  2.      * Registers various intent receivers. The current implementation registers 

  3.      * only a wallpaper intent receiver to let other applications change the 

  4.      * wallpaper. 

  5.      */  

  6.     private void registerIntentReceivers() {  

  7.         IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);  

  8.         filter.addAction(Intent.ACTION_PACKjAGE_REMOVED);  

  9.         filter.addAction(Intent.ACTION_PACKAGE_CHANGED);  

  10.         filter.addDataScheme("package");  

  11.         registerReceiver(mApplicationsReceiver, filter);  

  12.         filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);  

  13.         registerReceiver(mCloseSystemDialogsReceiver, filter);  

  14.     }  

 

我依样画葫芦尝试了一下,直接在我的应用中实现BroadcastReceiver并在XML注册,对action=Intent.ACTION_PACKAGE_ADDED进行捕获,但是没捕获到。

后来一查文档才发现这是行不通的:

public static final  String   ACTION_PACKAGE_ADDED

Broadcast Action: A new application package has been installed on the device. The data contains the name of the package. Note that the newly installed package does  not  receive this broadcast.

看来在应用自身中通过BroadcastReceiver来捕获Add消息是不行的,但是我想到了另一种折中的实现方法——通过另一个应用来辅助实现。

需要先实现一个包含对ntent.ACTION_PACKAGE_ADDED进行捕获的BroadcastReceiver的应用,首先安装到手机上,在他接受到消息后再向你的应用返回一个广播。你需要在你的应用中实现实现对应的BroadcastReceiver。

具体实现:

<辅助apk>

Java代码  收藏代码

  1. public class PackageChangeReceiver extends BroadcastReceiver {  

  2.   

  3.       @Override  

  4.       public void onReceive(Context context, Intent intent) {  

  5.             final String action = intent.getAction();  

  6.         final String packageName = intent.getData().getSchemeSpecificPart();  

  7.         final boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);  

  8.         // 通知对应的应用  

  9.         Intent notifyIntent = new Intent("com.app.action.notifier");  

  10.         notifyIntent.setPackage(packageName);  

  11.         notifyIntent.putExtra("action", action);  

  12.         notifyIntent.putExtra("replace", replacing);  

  13.             context.sendBroadcast(notifyIntent);  

  14.       }  

  15.   

  16. }  

 

Java代码  收藏代码

  1. <?xml version="1.0" encoding="utf-8"?>  

  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  

  3.       package="com.app.notifier"  

  4.       android:versionCode="1"  

  5.       android:versionName="1.0">  

  6.     <uses-sdk android:minSdkVersion="7" />  

  7.   

  8.     <application android:icon="@drawable/icon" android:label="@string/app_name">  

  9.         <receiver android:name="PackageChangeReceiver">  

  10.             <intent-filter>  

  11.                 <action android:name="android.intent.action.PACKAGE_ADDED"></action>  

  12.                 <action android:name="android.intent.action.PACKAGE_CHANGED"></action>  

  13.                 <action android:name="android.intent.action.PACKAGE_REMOVED"></action>  

  14.                 <data android:scheme="package"></data>  

  15.             </intent-filter>  

  16.         </receiver>  

  17.   

  18.     </application>  

  19. </manifest>  

 

<你的应用> 

Java代码  收藏代码

  1. public class PackageChangeReceiver extends BroadcastReceiver {  

  2.         

  3.       @Override  

  4.       public void onReceive(Context context, Intent intent) {  

  5.             final String action = intent.getStringExtra("action");  

  6.             boolean replace = intent.getBooleanExtra("replace"false);  

  7.             if(action.equals(Intent.ACTION_PACKAGE_ADDED)){  

  8.                  // do some thing you want.  

  9.             }  

  10.       }  

  11. }  

xml中注册广播 

Java代码  收藏代码

  1. <receiver android:name="PackageChangeReceiver">  

  2.      <intent-filter>  

  3.          <action android:name="com.app.action.notifier"></action>  

  4.      </intent-filter>  

  5. </receiver>  

 

优缺点 
缺点:必须先安装辅助apk
优点:仅需一次安装,之后使用只需在应用中实现并在XML中注册BroadcastReceiver就能捕获到安装事件,从而执行相应的操作(添加桌面图标,自启动...)


本文转载自:http://univasity.iteye.com/blog/983669

wanyang
粉丝 3
博文 41
码字总数 7838
作品 0
徐汇
程序员
私信 提问
微软又玩起了 Android Launcher

微软最近正在打造一款Android上的Launcher(桌面启动器),名为Arrow。目前该桌面启动器还处于测试阶段,但根据一些测试用户的反馈来看,这款桌面启动器的表现还不错。如果拥有Android设备的...

oschina
2015/07/27
7.5K
34
android 添加快捷方式后总是启动第一个activity

求助, apk文件安装后,启动apk, 首先启动A activity ,A activity自动跳转到B,在B中实现添加桌面快捷方式,点击home键,再点击apk图标, apk还是从A启动, 请问如果解决。点击home键...

人生的过客
2012/04/27
1K
1
Android-Activity 启动过程,Android 从点击应用图标到界面显示的过程介绍

Android - Activity 启动过程 概述 从点击桌面应用图标到应用显示的过程我们再熟悉不过了,下面我们来分析下这个过程都做了什么。 本文主要对以下问题分析: ActivityThread 是什么,它是一个...

天王盖地虎626
06/21
0
0
那些年Android黑科技③:干大事不择手段

“我在发抖么? 你开什么玩笑。我只是在跳愉快的尬舞。 暗影是不会向邪恶势力低头的。 万岁(≧▽≦)/!!” -- 来自暗世界android工程师 前言: 本篇是本系列的最后一个篇章。其实这些活儿也...

猴亮屏
2017/10/24
0
0
轻松时刻–在pcDuino上玩小游戏

今天我们要放松一下,用pcDuino来玩一下小游戏了。 大家都知道pcDuino是可以兼容Ubuntu和Android两种系统的。 我们给大家分享的游戏就是Android系统下完成的,相信大家也玩过Android系统的手...

pc朵拉
2013/07/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Storm+Hbase广告实时统计

本文主要讲述使用Kafka+Strom+Hbase搭建的一套广告实时计算系统。其中服务器显示使用的是SpringBoot+Vue+ElementUI+EChats. 主要内容: 1.需求 2.日志格式 3.Hbase表格设计 4.编写Storm程序 ...

飓风2000
22分钟前
3
0
android,ContentProvider+ContentObserver+ContentResolver,用法。

这个是传智播客老师讲android开发时的一个图。 一、 PersonProvider继承ContentProvider,实现ContentProvider中的数据操作类。 ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起...

天王盖地虎626
27分钟前
2
0
解决markdown中的不换行问题

没有解决我的格式显示问题 https://blog.csdn.net/qq_23483671/article/details/79017609

南桥北木
32分钟前
2
0
产品上新|ZStack3.5.0正式发布啦!

海量产品资料传送门~ 一、ZStack全线产品下载通道汇总 社区版(免费): https://www.zstack.io/product/zstack_open_source/ 企业版下载: https://www.zstack.io/product/zstack_enterpris...

ZStack社区版
35分钟前
2
0
mysql 大表分页查询 翻页 优化方案

mysql分页查询是先查询出来所有数据,然后跳过offset,取limit条记录,造成了越往后的页数,查询时间越长 一般优化思路是转换offset,让offset尽可能的小,最好能每次查询都是第一页,也就是...

花树堆雪
38分钟前
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部