android开发设置应用开机自启动(2)——并使应用实时保持在前台

本文介绍了一种使应用程序始终保持在手机前台的技术方案。通过监听当前运行在前台的应用,若发现不是自身应用,则将自身置于前台。同时实现了开机自启动功能。
部署运行你感兴趣的模型镜像
对于开机自启动已经在上一篇文章中讲过了;对于使自己的应用实时保持在前台,主要就是开启一个线程实时监听处于前台的应用,如果不是自己的应用则把自己的应用放到前台来;
package com.example.alwaysfront;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class BooTBroadcastReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
		if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
			Intent newIntent = new Intent(context,OneMainActivity.class);
			newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
			context.startActivity(newIntent);
		}

	}

}


package com.example.alwaysfront;

import java.util.List;

import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class OneMainActivity extends Activity {
	
	private EditText et;
	
	private Button bt;
	
	private Button bt1;
	
	private Handler handler;
	
	public static boolean flag = true;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_one_main);
		
		et = (EditText) findViewById(R.id.et);
		bt = (Button) findViewById(R.id.bt);
		bt1 = (Button) findViewById(R.id.bt1);
		
		bt.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				if(UtilPhone.isEmail(et.getText().toString().trim())) {
					Toast.makeText(OneMainActivity.this, "正确", Toast.LENGTH_SHORT).show();
				}else {
					Toast.makeText(OneMainActivity.this, "错误", Toast.LENGTH_SHORT).show();
				}
			}
		});

		bt1.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				flag = false;
			}
		});
		
		handler = new MyHandler();
		Thread t = new Mythread();
		t.start();

	}

	class MyHandler extends Handler {
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			
			if(msg.what == 1) {
				ActivityManager am = (ActivityManager) OneMainActivity.this.getSystemService(Context.ACTIVITY_SERVICE);
				@SuppressWarnings("deprecation")
				List<RunningTaskInfo> tasks = am.getRunningTasks(1);
				if(!tasks.isEmpty()) {
					ComponentName topActivity = tasks.get(0).topActivity;
					if(!topActivity.getPackageName().equals(OneMainActivity.this.getPackageName())) {
						AppRunningINFront(OneMainActivity.this.getPackageName());
					}
				}
			}
			
		}
	}

	class Mythread extends Thread {
		@Override
		public void run() {
			super.run();
			while(flag) {
				try {
					Thread.sleep(500);
					Message msg = handler.obtainMessage();
					msg.what = 1;
					handler.sendMessage(msg);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				
			}
			
		}
	}
	
	private void AppRunningINFront(String packageName) {  
        PackageInfo pckageInfo;  
        try {  
        	pckageInfo = getPackageManager().getPackageInfo(packageName, 0);  
            Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);  
            resolveIntent.setPackage(pckageInfo.packageName);  
            PackageManager manager = getPackageManager();  
            List<ResolveInfo> info = manager.queryIntentActivities(resolveIntent, 0);  
            ResolveInfo ri = info.iterator().next();  
            if (ri != null) {  
                packageName = ri.activityInfo.packageName;  
                String className = ri.activityInfo.name;  
                Intent intent = new Intent(Intent.ACTION_MAIN);  
                ComponentName cn = new ComponentName(packageName, className);  
                intent.setComponent(cn);  
                startActivity(intent);  
            }  
        } catch (NameNotFoundException e) {  
            e.printStackTrace();  
        }  
  
    }
	
}


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.alwaysfront"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".OneMainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        <receiver android:name="com.example.houtaitoqiantai.BooTBroadcastReceiver" >  
    <intent-filter>  
        <action android:name="android.intent.action.BOOT_COMPLETED" />  
  
        <category android:name="android.intent.category.LAUNCHER" />  
    </intent-filter>  
</receiver>
        
    </application>

</manifest>




您可能感兴趣的与本文相关的镜像

Langchain-Chatchat

Langchain-Chatchat

AI应用
Langchain

Langchain-Chatchat 是一个基于 ChatGLM 等大语言模型和 Langchain 应用框架实现的开源项目,旨在构建一个可以离线部署的本地知识库问答系统。它通过检索增强生成 (RAG) 的方法,让用户能够以自然语言与本地文件、数据库或搜索引擎进行交互,并支持多种大模型和向量数据库的集成,以及提供 WebUI 和 API 服务

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值