tag应用如何根据metadata内容杀指定应用

摘要:
所以我想到了使用元数据来终止指定的应用程序。在AndroidManifest In xml中,<元数据>元素可以用作子元素,并包含在<activity>、<application>、<service>和<receiver>元素中。然而,在应用程序期间,可以以不同的方式读取不同的父元素。上面的代码直接实现了一种用于指定元数据进程的kill方法和一种基于包名packagecom.skyword运行活动的方法。数字电视;导入java.lang.reflect。方法导入java.util。阵列列表;导入java.util。列表importandroid.app。活动经理;importandroid.content。组件名称;importandroid.content。上下文importandroid.content。意图importandroid.content.pm。应用信息;importandroid.content.pm。PackageInfo;importandroid.content.pm。PackageManager;importandroid.content.pm.PackageManager。NameNotFoundException;importandroid.content.pm。ResolveInfo;importandroid.util。日志publicclassDtvAppHelper{publicstaticinalStringMETA_SOURCE_MODE=“androidtv.meidasource.MODE”;publicstaticinal StringMETA_OURCE_MODE_DTV=“DTV”;staticfinalStringTAG=“DtvAppCloseHelper”;staticMethodforceStopPackage=null;publicstaticoidshutdownDtvApps{PackageManagerpm=ctx.getPackageManager();ActivityManagerm=ctx.getSystemService;ListList=getRunningDtvApps;for{Log.i;forceStopPack;}}privatestaticvoidforceStopPackage{try{if{forceStopPackage=am.getClass().getDeclaredMethod;}如果(forceStopPackage!

最近应用开辟的过程当中出现了一个小问题,顺便记录一下原因和方法--tag应用

    应用场景:
在开辟一体机上具体应用过程当中,发现一体机资源切换及不同的应用应用不同的资源。因为就需要在切换不同的信号源模式下
应用不同的资源。所以就想到应用meta-data这一描述字进行杀死指定的应用。

在AndroidManifest.xml中,<meta-data>元素可以作为子元素,被包含在<activity>、<application> 、<service>和<receiver>元素中,
但不同的父元素,在应用时读取的方法也不同。


我的例子就是:
<meta-data android:name="androidtv.meidasource.mode" android:value='digit-mode" />
放在<application> ... </application> 之层次上


    ok,实现此功能很简单,就直接上代码吧!!

    

    上面的代码直接实现了一个kill指定meta-data进程的方法及根据包名运行一个activity的方法

    

package com.skyworth.dtv;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.util.Log;

public class DtvAppHelper {
	public static final String META_SOURCE_MODE = "androidtv.meidasource.mode";
	public static final String META_SOURCE_MODE_DTV = "dtv";
	static final String TAG = "DtvAppCloseHelper";
	static Method forceStopPackage = null;

	public static void shutdownDtvApps(Context ctx) {
		PackageManager pm = ctx.getPackageManager();
		ActivityManager am = (ActivityManager) ctx
				.getSystemService(Context.ACTIVITY_SERVICE);
		List<String> list = getRunningDtvApps(am, pm);
		for (int i = 0; i < list.size(); i++) {
			Log.i(TAG, "will stop package name : " + list.get(i));
			forceStopPackage(am, list.get(i));
		}
	}

	private static void forceStopPackage(ActivityManager am, String pkgname) {
		try {
			if (forceStopPackage == null) {
				forceStopPackage = am.getClass().getDeclaredMethod(
						"forceStopPackage", String.class);
			}
			if (forceStopPackage != null) {
				forceStopPackage.setAccessible(true);
				forceStopPackage.invoke(am, pkgname);
			}
		} catch (Exception e) {
			Log.e(TAG, "forceStopPackage error:" + e);
		}
	}

	private static List<String> getRunningDtvApps(ActivityManager am,
			PackageManager pm) {
		List<String> plist = new ArrayList<String>();
		List<ActivityManager.RunningAppProcessInfo> applist = am
				.getRunningAppProcesses();
		for (ActivityManager.RunningAppProcessInfo appProcess : applist) {
			String[] pkgNameList = appProcess.pkgList; // 得到包名列表
			int pid = appProcess.pid;
			for (int i = 0; i < pkgNameList.length; i++) {
				String pkgName = pkgNameList[i];
				try {
					ApplicationInfo ai = pm.getApplicationInfo(pkgName,
							PackageManager.GET_META_DATA);
					if (ai.metaData != null) {
						String value = ai.metaData.getString(META_SOURCE_MODE);
						if (META_SOURCE_MODE_DTV.equals(value)) {
							Log.i(TAG, "packageName:" + pkgName
									+ " process pid:" + pid);
							plist.add(pkgName);
						}
					}
				} catch (NameNotFoundException e) {
					Log.e(TAG, "get meta data is empty");
				}
			}
		}
		return plist;
	}
	
	public static void runDtvApps(Context ctx, String packageName) {
		Log.i(TAG, "will start packageName:" + packageName);
		PackageInfo pi = null;
		try {
			pi = ctx.getPackageManager().getPackageInfo(packageName, 0);
			Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
			resolveIntent.setPackage(pi.packageName);
			PackageManager pManager = ctx.getPackageManager();
			List<ResolveInfo> apps = pManager.queryIntentActivities(
					resolveIntent, 0);

			ResolveInfo ri = apps.iterator().next();
			if (ri != null) {
				packageName = ri.activityInfo.packageName;
				String className = ri.activityInfo.name;
				Log.i(TAG, "packageName: " + packageName + " className:"
						+ className);
				Intent intent = new Intent(Intent.ACTION_MAIN);
				ComponentName cn = new ComponentName(packageName, className);
				intent.setComponent(cn);
				intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
				ctx.startActivity(intent);
			}
		} catch (Exception e) {
			Log.e(TAG, "start activity failed " + e);
		}
	}
}
    每日一道理
因为自信,在呀呀学语时,我靠着纤嫩的双腿,迈出人生的第一步;因为自信,我一次次将第一名的奖状高高举起;因为自信,我毫不吝惜地剪掉飘逸的长发,在运动场上展现风采……感谢自信,它给了我一双翅膀,让我在电闪雷鸣中去飞翔,在风雨中去搏击人生!

    

    上面具体列一下不同父元素,读取的方法情况(为了比较方便写在一个函数中了,可以根据情况拆分):

void test(Context ctx, String packageName, String className) {
		/* 在application的应用 */
		try {
			ApplicationInfo appInfo = ctx.getPackageManager()
					.getApplicationInfo(packageName,
							PackageManager.GET_META_DATA);

			String msg = appInfo.metaData.getString("myMsg");
			Log.i(TAG, "message :" + msg);
			
			//TODO
			
		} catch (Exception e) {
			Log.e(TAG, "getApplicationInfo error:" + e);
		}		
		
		/* 在Activity的应用 */
		ComponentName cn = new ComponentName(packageName, className);

		try {
			ActivityInfo info = ctx.getPackageManager().getActivityInfo(cn,
					PackageManager.GET_META_DATA);
			
			String msg = info.metaData.getString("myMsg");
			Log.i(TAG, "message :" + msg);
			
			//TODO
			
		} catch (Exception e) {
			Log.e(TAG, "getActivityInfo error:" + e);
		}
		
		/* 在service的应用 */
		try {
			ServiceInfo info = ctx.getPackageManager().getServiceInfo(cn,
					PackageManager.GET_META_DATA);

			String msg = info.metaData.getString("myMsg");
			Log.i(TAG, "message :" + msg);

			// TODO

		} catch (Exception e) {
			Log.e(TAG, "getServiceInfo error:" + e);
		}
		
		/* 在receiver的应用 */
		try {
			ComponentName crn = new ComponentName(ctx, className);
			ActivityInfo info = ctx.getPackageManager().getReceiverInfo(crn,
					PackageManager.GET_META_DATA);
			String msg = info.metaData.getString("myMsg");
			Log.i(TAG, "message :" + msg);

			// TODO

		} catch (Exception e) {
			Log.e(TAG, "getReceiverInfo error:" + e);
		}
	}

    

文章结束给大家分享下程序员的一些笑话语录: 大家喝的是啤酒,这时你入座了。
你给自己倒了杯可乐,这叫低配置。
你给自已倒了杯啤酒,这叫标准配置。
你给自己倒了杯茶水,这茶的颜色还跟啤酒一样,这叫木马。
你给自己倒了杯可乐,还滴了几滴醋,不仅颜色跟啤酒一样,而且不冒热气还有泡泡,这叫超级木马。
你的同事给你倒了杯白酒,这叫推荐配置。
菜过三巡,你就不跟他们客气了。
你向对面的人敬酒,这叫p2p。
你向对面的人敬酒,他回敬你,你又再敬他……,这叫tcp。
你向一桌人挨个敬酒,这叫令牌环。
你说只要是兄弟就干了这杯,这叫广播。
有一个人过来向这桌敬酒,你说不行你先过了我这关,这叫防火墙。
你的小弟们过来敬你酒,这叫一对多。
你是boss,所有人过来敬你酒,这叫服务器。
酒是一样的,可是喝酒的人是不同的。
你越喝脸越红,这叫频繁分配释放资源。
你越喝脸越白,这叫资源不释放。
你已经醉了,却说我还能喝,叫做资源额度不足。
你明明能喝,却说我已经醉了,叫做资源保留。
喝酒喝到最后的结果都一样
你突然跑向厕所,这叫捕获异常。
你在厕所吐了,反而觉得状态不错,这叫清空内存。
你在台面上吐了,觉得很惭愧,这叫程序异常。
你在boss面前吐了,觉得很害怕,这叫系统崩溃。
你吐到了boss身上,只能索性晕倒了,这叫硬件休克。

--------------------------------- 原创文章 By
tag和应用
---------------------------------

免责声明:文章转载自《tag应用如何根据metadata内容杀指定应用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Oracle -&amp;gt;&amp;gt; 日期函数vue中检测敏感词,锚点下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

element-ui 的el-button组件中添加自定义颜色和图标的实现方法

这篇文章主要介绍了element-ui 的el-button组件中添加自定义颜色和图标的实现方法,目前的解决方案是:添加一个自定义全局指令,同时在element-ui源码中,加入对应的组件。需要的朋友跟随小编一起看看吧 我使用的element-ui的版本是V1.4.13。 如上图所示,如果使用el-button,加颜色是可以通过设置type属性的值,加图...

Jquery和JS获取ul中li标签

js 获取元素下面所有的li var content=document.getElementById("content"); var items=content.getElementsByTagName("ul"); var itemss=items[2].getElementsByTagName("li");//获取第二个li标签 或 var div=d...

从HTML文件中提取正文的简单方案

http://www.basesnet.com/seo/53从HTML文件中提取正文的简单方案2012-03-07/SEO/HTML文件,提取正文,简单方案/ 1 多种基于html正文提取的思想 一、基于统计的中文网页正文抽取的研究 摘要:信息抽取技术是一种广泛运用于互联网的数据挖掘技术。其目的是从互联网海量数据中抽取有意义、有价值的数据和信息,从而能...

使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件

出处:http://www.cnblogs.com/lichenwei/p/4145696.html Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件。 1、相关文件 关于Mybatis-Generator的下载可以到这...

CSS before和after伪元素

     CSS中有一个特性允许我们添加额外元素而不扰乱文档本身,它们是以CSS选择器的形式出现的,具有标签的表现效果,但是呢又不是真正的标签元素,所以叫做“伪元素”。下面就说一下常见的两个伪元素before和after。 一、伪元素基本用法      在CSS选择器中加上相应伪类选择符就可以了,像这样:#example: before或者#example...

只需一行代码实现增删查改,微软已经让我们很简单。谈AccessDataSource的使用。

这是一个很简单的内容。日常我们总腻烦做增删查改这样的重复性的劳动,如果你的项目不是太大,如果你的团队很小,或许就是你一个人,那么就完全可以参考以下这样简单的方式。微软已经给我们做了。我们只要写一行代码,便实现了增删查改。以下以AccessDataSource为例,你只要写一行代码,便实现一个增删查改的页面。一、我们先建立这个解决方案,使用Access做数据...