以下是尋找裝置中是否有安裝某個 package
通常用在判斷當有裝某東西才做某些事時用到,目前知道的方法有兩種…
方法一,列舉出全部的 package 比對
boolean bExists = false;
final List<PackageInfo> packs = _service.getPackageManager().getInstalledPackages(0);
for(int i = 0; i < packs.size(); ++i)
{ 
 final String packageName = packs.get(i).packageName;
 if(packageName != null && packageName.startsWith("com.Ascii.Widget.AsciiApp"))
 {
  bExists = true; break;
 }
}
if(!bExists)
{
 //不存在
}
 方法二,找該 package 的資訊
PackageManager manager = _service.getPackageManager();
Intent intent = new Intent().setPackage("com.Ascii.Widget.AsciiApp");
List<ResolveInfo> infos = manager.queryIntentActivities(intent, PackageManager.GET_INTENT_FILTERS);
if (infos == null || infos.size() < 1)
{
 // 不存在
}
若尋找到此 package 要開啟它來做某些事呢?
開啟的方法就如下列範例,比較需注意的是除了 package Name 之外,
還要指定啟動的 Class Name
// 啟動某個 App,例如由目前的 HomeActivity 啟動 AsciiApp
public class HomeActivity extends Activity
{
 public void ShowAsciiApp()
 {
  try
  {
   Context myContext = this.createPackageContext("com.Ascii.Widget.AsciiApp",  0);   
   Intent intent = new Intent();
   intent.setPackage("com.Ascii.Widget.AsciiApp");
   intent.setClassName(myContext, "com.Ascii.Widget.AsciiApp.MainActivity");
   intent.setAction("android.intent.action.MAIN");
   this.startActivity(intent);
  }
  catch (Exception e)
  {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}
若不知道想開啟的 package 起始類別叫啥米名字,印像中是有方法可以得到的,
好像在上面方法二的 infos 物件中某個 method 可以拿到,
等到空閒時再整理清楚一些。
當然也可以交給作業系統以預設 App 處理,例如 http 就會開啟瀏灠器…
Uri uri = Uri.parse("http://www.google.com.tw");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
 
沒有留言:
張貼留言