android之桌面悬浮框

这篇博客介绍了如何在Android中创建类似360小球的桌面悬浮窗,并详细讲解了实现过程。内容包括添加显示悬浮框的权限、设置开机自启以及参考的源码链接。读者需要手动开启应用的悬浮框权限和开机自启动选项。
摘要由CSDN通过智能技术生成

类似360 的那个小球,一直悬浮在手机桌面上,点击时跳转其他界面

APK:http://fir.im/uraq

先说一下这个APK,为什么要说呢,因为安装完看不见图标,然后你会发现什么都没有,先去应用设置里,这个需要显示悬浮框的权限,而且我还设置了开机自启,这个也需要用户开启,默认都是不开起的(反正小米的是这样)

要实现这些,首先需要添加权限,AndroidManifest.xml里

 <!--service 需要-->
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
    <!-- 开机自启 -->
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <!--扫描本地文件-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

我这里加入了上一个读取本地文件功能

应用不显示图标,形如

<activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Translucent.NoTitleBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <data android:host="AuthActivity" android:scheme="android.cl.com.suspensionball.floder" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
在activity 里添加date 属性,后面的包名随便写一个,我们只是要不显示图标

然后是开机自启:监听 RECEIVE_BOOT_COMPLETED 广播嘛,AndroidManifest.xml里

 <receiver android:name="BootBroadcastReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"></action>
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="android.intent.category.HOME" />
            </intent-filter>
</receiver>
由于现在android手机系统的缘故,安装在SD卡里的很多应用接收不到广播信息,所以需要修改安装位置, AndroidManifest.xml里<manifest>里添加android:installLocation="internalOnly"

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:installLocation="internalOnly"
    package="android.cl.com.suspensionball" >
然后写一个广播接收者
import android.cl.com.suspensionball.service.TopFloatService;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

/**
 * Created by Administrator on 2016/1/21.
 */
public class BootBroadcastReceiver extends BroadcastReceiver {
    //重写onReceive方法
    @Override
    public void onReceive(Context context, Intent intent) {
        //后边的XXX.class就是要启动的服务
        //开机  BOOT_COMPLETED
        Intent service = new Intent(context,TopFloatService.class);
        context.startService(service);
        Log.v("TAG", "开机自动服务自动启动.....");

    }

}
转到要启动的服务就好了

我的service 用的烂的一塌糊涂,主体部分基本上是参考前辈的 http://www.ddvip.com/tech/1000184211_pall.html
看看service

import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.Service;
import android.cl.com.suspensionball.MyWindowManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Handler;
import android.os.IBinder;


public class TopFloatService extends Service {

    /**
     * 用于在线程中创建或移除悬浮窗。
     */
    priva
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值