⑴ 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 語音搜索(可刪)
提示: 帶*號的不可以刪除,否則會出現嚴重問題,例如手機卡死,死機,無法開機等情況。