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

博客分类:

 

Android

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就能捕获到安装事件,从而执行相应的操作(添加桌面图标,自启动...)


转载于:https://my.oschina.net/u/1429620/blog/201599

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值