Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 875|回复: 0

开发交流:Android apk安装后自动添加桌面图标 和 自启动的尝

[复制链接]

该用户从未签到

发表于 2011-10-24 10:11:38 | 显示全部楼层 |阅读模式
前一个问题是论坛里的一位朋友提出来的:“如何在应用安装到手机里时,自动在桌面增加快捷方式?” ,第二个问题是在网上看到的:“apk安装后如何自启动” 。


很显然,除非在应用安装后有相关的广播能被捕获到,否则就没法做了,事实是有的:Intent.ACTION_PACKAGE_ADDED。
Launcher中的应用列表正是这么做的:
<Launcher.java>


Java代码


/**

     * Registers various intent receivers. The current implementation registers

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

     * wallpaper.

     */

    private void registerIntentReceivers() {

        IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);

        filter.addAction(Intent.ACTION_PACKjAGE_REMOVED);

        filter.addAction(Intent.ACTION_PACKAGE_CHANGED);

        filter.addDataScheme("package");

        registerReceiver(mApplicationsReceiver, filter);

        filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);

        registerReceiver(mCloseSystemDialogsReceiver, filter);

    }
复制代码



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

后来一查文档才发现这是行不通的:
public static final  [url=]String[/url]   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代码


public class PackageChangeReceiver extends BroadcastReceiver {



      @Override

      public void onReceive(Context context, Intent intent) {

            final String action = intent.getAction();

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

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

        // 通知对应的应用

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

        notifyIntent.setPackage(packageName);

        notifyIntent.putExtra("action", action);

        notifyIntent.putExtra("replace", replacing);

            context.sendBroadcast(notifyIntent);

      }



}
复制代码



Java代码
<?xml version="1.0" encoding="utf-8"?>

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

      package="com.app.notifier"

      android:versionCode="1"

      android:versionName="1.0">

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



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

        <receiver android:name=&quotackageChangeReceiver">

            <intent-filter>

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

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

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

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

            </intent-filter>

        </receiver>



    </application>

</manifest>
复制代码<你的应用>

Java代码


public class PackageChangeReceiver extends BroadcastReceiver {

      

      @Override

      public void onReceive(Context context, Intent intent) {

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

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

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

                 // do some thing you want.

            }

      }

}
复制代码



xml中注册广播

Java代码


<receiver android:name="PackageChangeReceiver">

     <intent-filter>

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

     </intent-filter>

</receiver>
复制代码



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

------------------------------------------------------------------------------------------------

可能说得有点乱,把代码也传上来好了... 大家还有什么好的思路可以讨论下哈~~
AppChangeNotifier.rar (12.6 KB, 下载次数: 0)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 02:50 , Processed in 0.301078 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表