⑴ android 如何让应用程序在全部应用程序列表里显示跟隐藏!
之前有个客户的需求特别怪,要求应用不在全部应用程序列表里显示,通过拨打指定的电话号码形式启动应用,开始的想发就是在manifest.xml里的第一个activity里不添加<action android:name=android.intent.action.MAIN / <category android:name=android.intent.category.LAUNCHER /这两个intentfilter。发现在4.0以上的版本就会出现错误!4.0会认为你这个是不安全的信息,无法启动。后来在PackageManager里发现了setComponentEnabledSetting这个方法,可以达到效果!看代码吧!
⑵ 如何获得Android手机的软件安装列表
packageManager.getInstalledApplications()返回一个列表都是安装在设备上的应用程序包。如果我们把 flag GET_UNINSTALLED_PACKAGES设定,一个列表中的所有应用,包括那些设置为dont_delete_data(部分已安装的应戚让州用程序的数据目录)将返回。
你可以看到高蔽附件中的截图,我们将创建一个列表显示所有已安装的应用程序。
snippet_list_row.xml--------------------这个布局是由ListView适配器用于表示应用程序的细节。它显示应用程序图标、应用程序名称和应用程序包。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/app_icon" android:layout_width="50dp" android:layout_height="50dp" android:padding="3dp" android:scaleType="滑告centerCrop" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_vertical" android:orientation="vertical" android:paddingLeft="5dp" > <TextView android:id="@+id/app_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:textStyle="bold" /> <TextView android:id="@+id/app_paackage" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical" /> </LinearLayout></LinearLayout>
AllAppsActivity.java ##这是用于初始化和列表已安装的应用程序的主要应用程序类。从packagemanage得到应用细节列表是一个耗时的任务,我们将在AsyncTask里面做。同时,类使用自定义适配器“自定义listview applicationadapter”。 package com.javatechig.listapps;import java.util.ArrayList;import java.util.List;import android.app.AlertDialog;import android.app.ListActivity;import android.app.ProgressDialog;import android.content.ActivityNotFoundException;import android.content.DialogInterface;import android.content.Intent;import android.content.pm.ApplicationInfo;import android.content.pm.PackageManager;import android.net.Uri;import android.os.AsyncTask;import android.os.Bundle;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;import android.widget.ListView;import android.widget.Toast;public class AllAppsActivity extends ListActivity { private PackageManager packageManager = null; private List<ApplicationInfo> applist = null; private ApplicationAdapter listadaptor = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); packageManager = getPackageManager(); new LoadApplications().execute(); } public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; } public boolean onOptionsItemSelected(MenuItem item) { boolean result = true; switch (item.getItemId()) { case R.id.menu_about: { displayAboutDialog(); break; } default: { result = super.onOptionsItemSelected(item); break; } } return result; } private void displayAboutDialog() { final AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(getString(R.string.about_title)); builder.setMessage(getString(R.string.about_desc)); builder.setPositiveButton("Know More", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://stacktips.com")); startActivity(browserIntent); dialog.cancel(); } }); builder.setNegativeButton("No Thanks!", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); builder.show(); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); ApplicationInfo app = applist.get(position); try { Intent intent = packageManager .getLaunchIntentForPackage(app.packageName); if (null != intent) { startActivity(intent); } } catch (ActivityNotFoundException e) { Toast.makeText(AllAppsActivity.this, e.getMessage(), Toast.LENGTH_LONG).show(); } catch (Exception e) { Toast.makeText(AllAppsActivity.this, e.getMessage(), Toast.LENGTH_LONG).show(); } } private List<ApplicationInfo> checkForLaunchIntent(List<ApplicationInfo> list) { ArrayList<ApplicationInfo> applist = new ArrayList<ApplicationInfo>(); for (ApplicationInfo info : list) { try { if (null != packageManager.getLaunchIntentForPackage(info.packageName)) { applist.add(info); } } catch (Exception e) { e.printStackTrace(); } } return applist; } private class LoadApplications extends AsyncTask<Void, Void, Void> { private ProgressDialog progress = null; @Override protected Void doInBackground(Void... params) { applist = checkForLaunchIntent(packageManager.getInstalledApplications(PackageManager.GET_META_DATA)); listadaptor = new ApplicationAdapter(AllAppsActivity.this, R.layout.snippet_list_row, applist); return null; } @Override protected void onCancelled() { super.onCancelled(); } @Override protected void onPostExecute(Void result) { setListAdapter(listadaptor); progress.dismiss(); super.onPostExecute(result); } @Override protected void onPreExecute() { progress = ProgressDialog.show(AllAppsActivity.this, null, "Loading application info..."); super.onPreExecute(); } @Override protected void onProgressUpdate(Void... values) { super.onProgressUpdate(values); } }}
package com.javatechig.listapps;import java.util.List;import android.content.Context;import android.content.pm.ApplicationInfo;import android.content.pm.PackageManager;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.TextView;public class ApplicationAdapter extends ArrayAdapter<ApplicationInfo> { private List<ApplicationInfo> appsList = null; private Context context; private PackageManager packageManager; public ApplicationAdapter(Context context, int textViewResourceId, List<ApplicationInfo> appsList) { super(context, textViewResourceId, appsList); this.context = context; this.appsList = appsList; packageManager = context.getPackageManager(); } @Override public int getCount() { return ((null != appsList) ? appsList.size() : 0); } @Override public ApplicationInfo getItem(int position) { return ((null != appsList) ? appsList.get(position) : null); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (null == view) { LayoutInflater layoutInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = layoutInflater.inflate(R.layout.snippet_list_row, null); } ApplicationInfo applicationInfo = appsList.get(position); if (null != applicationInfo) { TextView appName = (TextView) view.findViewById(R.id.app_name); TextView packageName = (TextView) view.findViewById(R.id.app_paackage); ImageView iconview = (ImageView) view.findViewById(R.id.app_icon); appName.setText(applicationInfo.loadLabel(packageManager)); packageName.setText(applicationInfo.packageName); iconview.setImageDrawable(applicationInfo.loadIcon(packageManager)); } return view; }};
⑶ [Android][App不显示在最近使用过的应用程序列表中]
为什么想要App不显示在最近使用过的应用程序列表中?我们知道如果在最近使用过的应用程序列表中将APP划掉,那么这个APP就会被销毁。为了延长APP常驻时间,就希望隐藏APP,不让用户在最近使用过的应用程序列表中将APP销毁。但是这只是一个小手段,用户还是可以到系统设置的应用中销毁APP,不要妄想通过这个方法来保活APP.
实现上面的内容只需要在AndroidManifest中的Activity标签中添加android:excludeFromRecents="true"。
任务是否会在最近使用的应用程序的列表("最近的应用程序")中显示。也就是,当这个活动是根活动的一个新任务,这个属性决定了任务应不应该出现在列表中最近的应用程序。设置"true"如果这个任务应该被排除在名单,设置"false"如果它应该被包括。默认值为"false"。
经过测试,当在被LAUNCHER的Activity设置了android:excludeFromRecents="true",App不显示在最近使用过的应用程序列表中。也就是如下设置
如果MainActivity是LAUNCHER的Activity,而SecondActivity是MainActivity里的一个Button被点击后才启动的,如果在注册清单了给SecondActivity设置了android:excludeFromRecents="true",是无效的,如下设置
但是如果在注册清单里的SecondActivity里设置了android:launchMode="singleInstance",那么,当当前显示的是SecondActivity的时候,App是不会显示在最近使用过的应用程序列表中。
这也正好验证了上面的一句话“当这个活动是根活动的一个新任务,这个属性决定了任务应不应该出现在列表中最近的应用程序。”也就是说只有当这个Activity是处于任务栈根部的时候android:excludeFromRecents="true"才会起作用。但是,如果加了android:launchMode="singleInstance"当我们点击桌面的APP图标的时候,显示的是MainActivity而不是SecondActivity.
最后展示一下什么是最近使用过的应用程序列表:
怎样防止App在后台运行,点击应用桌面图标重新启动?这个问题之前有碰到过,这篇 文章 有解释。本来打算解决上面“加了android:launchMode="singleInstance"后,当APP在后台运行,点击应用桌面图标的时候显示的不是APP进入后台时显示的界面”的问题,但是并没有用,这里记录一下,以后有时间再研究吧。
http://download.csdn.net/detail/lgywsdy/9876908
⑷ Android手机系统自带的应用程序有哪些。
因不同版本的Android系统和不同品牌手机的定制,会有差异导致系统自带程序有差异,但大体上有以下程序:
*AccountAndSyncSettings.apk 同步与账户设定(绝不能删除)
*ApplicationsProvider.apk 应用程序支持服务 (绝不能删除)
Bluetooth.apk 蓝牙(删除后蓝牙功能消失)
Browser.apk 系统自带浏览器(可用其他手机浏览器替代)
Calculator.apk 计算器(可删,可用其他替代)
Calendar.apk 日历(可删)
CalendarProvider.apk 日历程序支持服务(可删)
*Camera.apk 自带相机 (绝不能删除)
*CertInstaller.apk 证书服务 (绝不能删除)
Contacts.apk 通讯簿/联系人(用第三方通讯簿的可删)
*ContactsProvider.apk 通讯簿/联系人数据存储服务 (绝不能删除)
*DefaultContainerService.apk 默认通讯簿服务(绝不能删除)
DeskClock.apk 自带闹钟(用第三方闹钟的可删)
*DownloadProvider.apk 下载管理器(绝不能删除)
*DrmProvider.apk DRM受保护数据存储服务(绝不能删除)
DSPManager.apk DSP音频管理(可删)
Email.apk Email(不用自带Email接受邮件的可删)
FileManager.apk 简易文件管理器(可删,可用ES文件管理器替代)
Gallery3D.apk 3D图片浏览器 (可删)
GenieWidget.apk 天气与新闻(可删)
Gmail.apk Gmail(可删)
GoogleBackupTransport.apk ***(未知程序,可删)
GoogleCalendarSyncAdapter.apk 存储日历讯息(可删)
GoogleContactsSyncAdapter.apk 存储联系人讯息(可删)
GoogleFeedback.apk ***(据说删除后开机会提示GoogleFeedback.apk,根据自身情况决定是否删除)
GooglePartnerSetup.apk Google助手(可删)
GooglePinyinIME.apk Google拼音(可删,用其他输入法替代)
GoogleQuickSearchBox.apk Google搜索(可删)
GoogleServicesFramework.apk 同步支持服务(删除后无法同步联系人,且不能登录Google)
HTMLViewer.apk HTML浏览器(可删)
kickback.apk 辅助功能
LauncherPro.apk 原生桌面(可删)
LiveWall**sPicker.apk 动态壁纸(可删)
Maps.apk Google地图(可删)
MarketUpdater.apk 市场升级(不确定)
*MediaProvider.apk 媒体数据存储服务(绝不能删除)
MediaUploader.apk 媒体升级(可删)
Mms.apk 自带讯息(可删)
Music.apk 自带音乐(可删,用自己喜欢的播放器吧)
NetworkLocation.apk 网络位置(可删)
OneTimeInitializer.apk ***(未知,可删)
*PackageInstaller.apk 程序安装(绝不能删除)
*Phone.apk 电话拨号程序(绝不能删除)
PhoneGuard.apk 拨号卫士(可删)
PicoTts.apk 可删(文字语言转换的语音合成引擎,设定-语音输入与输出中)
Protips.apk 桌面小绿人插件(可删)
*QuickMgr.apk 一键设定(长按menu的后弹出的那个,绝不能删除)
*Settings.apk 系统设定(绝不能删除)
*SettingsProvider.apk 设定服务程序 (绝不能删除)
*SetupWizard.apk 开机引导(在定制Rom时不可删,刷好机可用Root Explorer删掉)
SMSPopup.apk 简讯泡泡(就是简讯来时弹出的那个,其实就是个弹出框架)
soundback.apk 辅助功能(可删)
SoundRecorder.apk 录音机(可用第三方录音软件替代)
Stk.apk SIM卡服务(可删,有机友把联系人复制在SIM卡上的就不要删它)
Street.apk 街道(可删)
*Superuser.apk 授权程序(就是程序行表上面那个,用这个来获取Root的)
Talk.apk 系统服务项(可删)
talkback.apk 辅助功能(可删)
*TelephonyProvider.apk 拨号记录存储服务(绝不能删除)
Term.apk 超级终端(可删,不过不建议,可以用来刷Recovery)
TtsService.apk Text-to-speech服务(可删)
Updater.apk 在线升级(可删)
UserDictionaryProvider.apk 用户数据字典服务(可删)
Vending.apk 电子市场(可删)
VoiceSearch.apk 语音搜索(可删)
提示: 带*号的不可以删除,否则会出现严重问题,例如手机卡死,死机,无法开机等情况。