android获取系统应用
1. 如何在一个android应用里面调用一个系统的应用程序呢
//调用系统照相机
public void cameraInfo(){
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
//照片保存的路径及保存的名称
intent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(new File("/sdcard/JetMobileDev/camera.jpg"));
startActivityForResult(intent, 1);
}
2. 通过PHP怎样取到android系统下apk应用的包名,版本号等信息
应用场景:1、在界面中显示应用程序的版本号;2、用户启动该应用,后台判断该应用是否是最新版本。上述情景都需要在程序中自动获取到应用的版本号。思路简介:在Android中,应用程序的版本号是在AndroidManifest.xml文件中进行配置的
3. 安卓手机如何把下载的软件装到系统里(变成系统固定软件)。
1、首先解锁手机,然后在手机桌面中找到并打开【手机管家】软件。
4. Android 怎么获取所有正在运行的应用程序
在framework中想添加这个功能,所以写了个appliction来实现一下获取正在运行的应用程序: 还是先看图吧: 这个app主要是简单的实现了获取非系统的应用程序和一些常用的系统应用程序,显示在一个listview中,并添加了点击(回复到你打开的界面)和长按事件(关闭应用程序)。 看看代码吧: 直接贴出来再加上注释吧(直接写在一个文件里): package andorid/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="40dip" android:layout_height="40dip" /> <LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textStyle="bold" /> <TextView android:id="@+id/info" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout> main: <?xml version="1/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/list_view" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" ></ListView> </LinearLayout> 在manifest文件中要加以个权限: <uses-permission android:name="android.permission.RESTART_PACKAGES" /> 主要是前面的am.killBackgroundProcesses(packageName);方法要这个权限。
5. android用什么方法获取本地软件跟系统软件
在电脑上安装一个手机助手安卓版就可以了
6. Android应用程序怎样获取读取系统文件的权限
1、必须是Android系统开发人员,否则你无法修改init.rc等文件。 2、你的应用程序必须要获得system权限。
在应用层 你要想用代码获得系统文件权限,除非你手机root了
要么你自己坐rom。。。。 自己修改 init,rc
具体可以参考这篇博文:http://blog.sina.com.cn/s/blog_5f35912f0100w4ld.html
7. 如何获取android 进程信息
1.获取系统的可用内存和总内存。
获取系统内存中应用的信息,需要用到ActivityManager这个类,然而当你用这个类拿数据的时候你会发现,拿到的数据不正确。用这个类的API获取系统的总内存和可用内存会出现数据不正确的情况。除了这个类,Android手机中有文件描述了这些信息——/proc/meminfo。meminfo文件中详细的记录了安卓手机的一些数据,包括可用内存和总内存。附上代码:
public static long getTotalMemSize() {
long size=0;
File file = new File("/proc/meminfo");
try {
BufferedReader buffer = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String memInfo = buffer.readLine();
int startIndex = memInfo.indexOf(":");
int endIndex = memInfo.indexOf("k");
memInfo = memInfo.substring(startIndex + 1, endIndex).trim();
size = Long.parseLong(memInfo);
size *= 1024;
buffer.close();
} catch (java.io.IOException e) {
e.printStackTrace();
}
return size;
}
public static long getAviableMemSize() {
long size=0;
File file = new File("/proc/meminfo");
try {
BufferedReader buffer = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String memInfos=new String();
int i=0;
while ((memInfos=buffer.readLine())!=null){
i++;
if (i==2){
memInfo = memInfos;
}
}
int startIndex = memInfo.indexOf(":");
int endIndex = memInfo.indexOf("k");
memInfo = memInfo.substring(startIndex + 1, endIndex).trim();
size = Long.parseLong(memInfo);
size *= 1024;
buffer.close();
} catch (java.io.IOException e) {
e.printStackTrace();
}
return size;
}
操作很简单分别是读取第一行的数据和第二行的数据,将字符串分去出,将所得值乘以1024变为byte类型。
2.获取内存中运行应用的信息
首先,自然要有一个Bean文件用于存储这些信息,之后通过ActivityManager的getRunningAppProcesses()方法得到一个RunningAppProcessInfo的List。便利这个List去除我们想要的数据,存在我们的Bean文件夹中。
public static List<TaskBean> getAllTask() {
List<TaskBean>taskList=new ArrayList<>();
List<ActivityManager.RunningAppProcessInfo>runList=UIUtils.getActManager().getRunningAppProcesses();
try {
for (ActivityManager.RunningAppProcessInfo r:runList) {
TaskBean taskBean = new TaskBean();
String processName = r.processName;
taskBean.setPackageName(processName);
PackageInfo packageInfo = UIUtils.getPacManager().getPackageInfo(processName, 0);
taskBean.setIcon(packageInfo.applicationInfo.loadIcon(UIUtils.getPacManager()));
taskBean.setName(packageInfo.applicationInfo.loadLabel(UIUtils.getPacManager()).toString());
Debug.MemoryInfo[] processInfo=UIUtils.getActManager().getProcessMemoryInfo(new int[]{r.pid});
taskBean.setMemSize(processInfo[0].getTotalPrivateDirty()*1024);
if ((packageInfo.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)!=0){
taskBean.setSystem(true);
}else {
taskBean.setUser(true);
}
if (taskList != null) {
taskList.add(taskBean);
for (int i=0;i<taskList.size();i++) {
if (taskList.get(i).getPackageName().equals(Constants.PACKAGE_INFO)){
taskList.remove(i);
}
}
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return taskList;
}
好了,大功告成。当你开开心心的拿到手机上调试的时候你会发现,一个数据都没有。原来,在Android5.0之后,谷歌处于完全考虑已经弃用了通过如上方法拿到进程中的信息。那么又应该怎么做呢?
public static List<TaskBean> getTaskInfos() {
List<AndroidAppProcess> processInfos = ProcessManager.getRunningAppProcesses();
List<TaskBean> taskinfos = new ArrayList<TaskBean>();
// 遍历运行的程序,并且获取其中的信息
for (AndroidAppProcess processInfo : processInfos) {
TaskBean taskinfo = new TaskBean();
// 应用程序的包名
String packname = processInfo.name;
taskinfo.setPackageName(packname);
// 湖区应用程序的内存 信息
android.os.Debug.MemoryInfo[] memoryInfos = UIUtils.getActManager()
.getProcessMemoryInfo(new int[] { processInfo.pid });
long memsize = memoryInfos[0].getTotalPrivateDirty() * 1024L;
taskinfo.setMemSize(memsize);
taskinfo.setPackageName(processInfo.getPackageName());
try {
// 获取应用程序信息
ApplicationInfo applicationInfo = UIUtils.getPacManager().getApplicationInfo(
packname, 0);
Drawable icon = applicationInfo.loadIcon(UIUtils.getPacManager());
taskinfo.setIcon(icon);
String name = applicationInfo.loadLabel(UIUtils.getPacManager()).toString();
taskinfo.setName(name);
if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
// 用户进程
taskinfo.setUser(true);
} else {
// 系统进程
taskinfo.setSystem(true);
}
} catch (PackageManager.NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// 系统内核进程 没有名称
taskinfo.setName(packname);
Drawable icon = UIUtils.getContext().getResources().getDrawable(
R.drawable.ic_launcher);
taskinfo.setIcon(icon);
}
if (taskinfo != null) {
taskinfos.add(taskinfo);
for (int i=0;i<taskinfos.size();i++) {
if (taskinfos.get(i).getPackageName().equals(Constants.PACKAGE_INFO)){
taskinfos.remove(i);
}
}
}
}
return taskinfos;
}
好了,接下来只需要判断安装的版本就可以了:
int sysVersion = Integer.parseInt(Build.VERSION.SDK);
taskList = sysVersion > 21 ? TaskManagerEngine.getTaskInfos() : TaskManagerEngine.getAllTask();
好了,大功告成。数据就能正常拿到了。
8. 如何获得Android系统自带的应用程序的包名
下载一个叫“Link2sd”的应用程序,安装后即可看到手机内应用的包名了,望能采纳谢谢!
9. android应用怎么获取系统权限
在 android 的API中有提供
SystemClock.setCurrentTimeMillis()函数来修改系统时间,可惜无论你怎么调用这个函数都是没用的,无论模拟器还是真
机,在logcat中总会得到"Unable to open alarm driver: Permission denied
".这个函数需要root权限或者运行与系统进程中才可以用。
本来以为就没有办法在应用程序这一层改系统时间了,后来在网上搜了好久,知道这个目的还是可以达到的。
第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:
1. 在应用程序的AndroidManifest.xml中的manifest节点中加入android:sharedUserId="android.uid.system"这个属性。
2. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行
3. 使用mm命令来编译,生成的apk就有修改系统时间的权限了。
第二个方法麻烦点,不过不用开虚拟机跑到源码环境下用make来编译:
1. 同上,加入android:sharedUserId="android.uid.system"这个属性。
2. 使用eclipse编译出apk文件,但是这个apk文件是不能用的。
3. 用压缩软件打开apk文件,删掉META-INF目录下的CERT.SF和CERT.RSA两个文件。
4.
使用目标系统的platform密钥来重新给apk文件签名。这步比较麻烦,首先找到密钥文件,在我的Android源码目录中的位置
是"build\target\proct\security",下面的platform.pk8和platform.x509.pem两个文件。然
后用Android提供的Signapk工具来签名,signapk的源代码是在"build\tools\signapk"下,用法为"signapk
platform.x509.pem platform.pk8 input.apk
output.apk",文件名最好使用绝对路径防止找不到,也可以修改源代码直接使用。
这样最后得到的apk和第一个方法是一样的。
10. Android获取到手机应用图标并显示在GridView中。现在想通过点击相应图标进入对应应用程序,应该怎么样实现
这个很简单,给你主要代码
PackageManager pm = getPackageManager(); // 得到PackageManager对象
// List<ApplicationInfo> packs = pm.getInstalledApplications(0); //
// 得到系统安装的所有程序包的PackageInfo对象
List<PackageInfo> packs = pm.getInstalledPackages(0); // 得到用户安装的所有程序包的PackageInfo对象
for (PackageInfo pi : packs) {
map = new HashMap<String, Object>();
// 显示用户安装的应用程序,而不显示系统程序
if ((pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0
&& (pi.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 0) {
// 这将会显示所有安装的应用程序,不包括系统应用程序
/**
* 获得文件大小 publicSourceDir获得路径,再通过该路径创建一个文件new File(String dir),
* 得到该文件长度除以1024则取得该应用的大小。
* 取得程序大小,通过application的publicSourceDir获得。
* 取得程序时间,通过application的SourceDir获得。
*/
String dir = pi.applicationInfo.publicSourceDir;
int size = Integer.valueOf((int) new File(dir).length());
long date = new Date(new File(dir).lastModified()).getTime();
map.put("appName", pi.applicationInfo.loadLabel(pm));// 应用程序名称
map.put("icon", pi.applicationInfo.loadIcon(pm));// 图标
map.put("versionName", "版本 :" + pi.versionName);// 应用程序版本\
map.put("appSize2", size);// 应用程序大小
map.put("packages", pi.applicationInfo.packageName); // 应用程序包名
map.put("appSize", "大小 :" + ToSzie(size));// 应用程序大小
map.put("appDate", date);// 应用程序时间
items.add(map);
}
}
启动 :
String path ="package:"+v.getTag();
Uri packageURI = Uri.parse(path);
Intent uninstallIntent = new Intent(this packageURI);
context.startActivity(uninstallIntent);