示例#1
1
  /**
   * Create a chooser intent to select the source to get image from.<br>
   * The source can be camera's (ACTION_IMAGE_CAPTURE) or gallery's (ACTION_GET_CONTENT).<br>
   * All possible sources are added to the intent chooser.
   */
  public Intent getPickImageChooserIntent() {

    // Determine Uri of camera image to save.
    Uri outputFileUri = getCaptureImageOutputUri();

    List<Intent> allIntents = new ArrayList<>();
    PackageManager packageManager = getActivity().getPackageManager();

    // collect all camera intents
    Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
    for (ResolveInfo res : listCam) {
      Intent intent = new Intent(captureIntent);
      intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
      intent.setPackage(res.activityInfo.packageName);
      if (outputFileUri != null) {
        intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
      }
      allIntents.add(intent);
    }

    // collect all gallery intents
    Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
    galleryIntent.setType("image/*");
    List<ResolveInfo> listGallery = packageManager.queryIntentActivities(galleryIntent, 0);
    for (ResolveInfo res : listGallery) {
      Intent intent = new Intent(galleryIntent);
      intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
      intent.setPackage(res.activityInfo.packageName);
      allIntents.add(intent);
    }

    // the main intent is the last in the list (f*****g android) so pickup the useless one
    Intent mainIntent = allIntents.get(allIntents.size() - 1);
    for (Intent intent : allIntents) {
      if (intent
          .getComponent()
          .getClassName()
          .equals("com.android.documentsui.DocumentsActivity")) {
        mainIntent = intent;
        break;
      }
    }
    allIntents.remove(mainIntent);

    // Create a chooser from the main intent
    Intent chooserIntent = Intent.createChooser(mainIntent, getString(R.string.choose_photos));

    // Add all other intents
    chooserIntent.putExtra(
        Intent.EXTRA_INITIAL_INTENTS, allIntents.toArray(new Parcelable[allIntents.size()]));

    return chooserIntent;
  }
示例#2
1
 public boolean showFileChooser(
     final String mimeType,
     final String chooserTitle,
     final boolean allowMultiple,
     final boolean mustCanRead) {
   if (mimeType == null || choosing) {
     return false;
   }
   choosing = true;
   // 檢查是否有可用的Activity
   final PackageManager packageManager = activity.getPackageManager();
   final Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
   intent.setType(mimeType);
   List<ResolveInfo> list =
       packageManager.queryIntentActivities(intent, PackageManager.GET_ACTIVITIES);
   if (list.size() > 0) {
     this.mustCanRead = mustCanRead;
     // 如果有可用的Activity
     Intent picker = new Intent(Intent.ACTION_GET_CONTENT);
     picker.setType(mimeType);
     picker.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, allowMultiple);
     picker.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
     // 使用Intent Chooser
     Intent destIntent = Intent.createChooser(picker, chooserTitle);
     activity.startActivityForResult(destIntent, ACTIVITY_FILE_CHOOSER);
     return true;
   } else {
     return false;
   }
 }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    final PackageManager pm = getPackageManager();
    if (pm == null) {
      launchInternalPicker();
      return;
    }

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("application/zip");

    try {
      if (pm.queryIntentActivities(intent, PackageManager.GET_ACTIVITIES).size() > 0) {
        intent = new Intent();
        intent.setType("application/zip");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(intent, REQUEST_PICK_FILE);
      } else {
        throw new ActivityNotFoundException();
      }
    } catch (ActivityNotFoundException e) {
      Timber.e(e, "No activity found to handle file picking! Falling back to default!");
      launchInternalPicker();
    }
  }
 @Override
 public boolean isSpecializedHandlerAvailable(Intent intent) {
   try {
     PackageManager pm = mActivity.getPackageManager();
     List<ResolveInfo> handlers =
         pm.queryIntentActivities(intent, PackageManager.GET_RESOLVED_FILTER);
     if (handlers == null || handlers.size() == 0) {
       return false;
     }
     for (ResolveInfo resolveInfo : handlers) {
       IntentFilter filter = resolveInfo.filter;
       if (filter == null) {
         // No intent filter matches this intent?
         // Error on the side of staying in the browser, ignore
         continue;
       }
       if (filter.countDataAuthorities() == 0 || filter.countDataPaths() == 0) {
         // Generic handler, skip
         continue;
       }
       return true;
     }
   } catch (RuntimeException e) {
     logTransactionTooLargeOrRethrow(e, intent);
   }
   return false;
 }
 public static String e(Context context) {
   if (d == null) {
     StringBuilder stringBuilder = new StringBuilder();
     PackageManager packageManager = context.getPackageManager();
     List queryIntentActivities =
         packageManager.queryIntentActivities(
             new Intent("android.intent.action.VIEW", Uri.parse("geo:0,0?q=donuts")),
             Menu.CATEGORY_CONTAINER);
     if (queryIntentActivities == null || queryIntentActivities.isEmpty()) {
       stringBuilder.append("m");
     }
     List queryIntentActivities2 =
         packageManager.queryIntentActivities(
             new Intent(
                 "android.intent.action.VIEW", Uri.parse("market://search?q=pname:com.google")),
             Menu.CATEGORY_CONTAINER);
     if (queryIntentActivities2 == null || queryIntentActivities2.isEmpty()) {
       if (stringBuilder.length() > 0) {
         stringBuilder.append(",");
       }
       stringBuilder.append("a");
     }
     d = stringBuilder.toString();
   }
   return d;
 }
示例#6
0
  /**
   * Builds an entire list (suitable for display) of activities that are searchable, by iterating
   * the entire set of ACTION_SEARCH & ACTION_WEB_SEARCH intents.
   *
   * <p>Also clears the hash of all activities -> searches which will refill as the user clicks
   * "search".
   *
   * <p>This should only be done at startup and again if we know that the list has changed.
   *
   * <p>TODO: every activity that provides a ACTION_SEARCH intent should also provide searchability
   * meta-data. There are a bunch of checks here that, if data is not found, silently skip to the
   * next activity. This won't help a developer trying to figure out why their activity isn't
   * showing up in the list, but an exception here is too rough. I would like to find a better
   * notification mechanism.
   *
   * <p>TODO: sort the list somehow? UI choice.
   */
  public void buildSearchableList() {
    // These will become the new values at the end of the method
    HashMap<ComponentName, SearchableInfo> newSearchablesMap =
        new HashMap<ComponentName, SearchableInfo>();
    ArrayList<SearchableInfo> newSearchablesList = new ArrayList<SearchableInfo>();
    ArrayList<SearchableInfo> newSearchablesInGlobalSearchList = new ArrayList<SearchableInfo>();

    final PackageManager pm = mContext.getPackageManager();

    // Use intent resolver to generate list of ACTION_SEARCH & ACTION_WEB_SEARCH receivers.
    List<ResolveInfo> searchList;
    final Intent intent = new Intent(Intent.ACTION_SEARCH);
    searchList = pm.queryIntentActivities(intent, PackageManager.GET_META_DATA);

    List<ResolveInfo> webSearchInfoList;
    final Intent webSearchIntent = new Intent(Intent.ACTION_WEB_SEARCH);
    webSearchInfoList = pm.queryIntentActivities(webSearchIntent, PackageManager.GET_META_DATA);

    // analyze each one, generate a Searchables record, and record
    if (searchList != null || webSearchInfoList != null) {
      int search_count = (searchList == null ? 0 : searchList.size());
      int web_search_count = (webSearchInfoList == null ? 0 : webSearchInfoList.size());
      int count = search_count + web_search_count;
      for (int ii = 0; ii < count; ii++) {
        // for each component, try to find metadata
        ResolveInfo info =
            (ii < search_count) ? searchList.get(ii) : webSearchInfoList.get(ii - search_count);
        ActivityInfo ai = info.activityInfo;
        // Check first to avoid duplicate entries.
        if (newSearchablesMap.get(new ComponentName(ai.packageName, ai.name)) == null) {
          SearchableInfo searchable = SearchableInfo.getActivityMetaData(mContext, ai);
          if (searchable != null) {
            newSearchablesList.add(searchable);
            newSearchablesMap.put(searchable.getSearchActivity(), searchable);
            if (searchable.shouldIncludeInGlobalSearch()) {
              newSearchablesInGlobalSearchList.add(searchable);
            }
          }
        }
      }
    }

    List<ResolveInfo> newGlobalSearchActivities = findGlobalSearchActivities();

    // Find the global search activity
    ComponentName newGlobalSearchActivity = findGlobalSearchActivity(newGlobalSearchActivities);

    // Find the web search activity
    ComponentName newWebSearchActivity = findWebSearchActivity(newGlobalSearchActivity);

    // Store a consistent set of new values
    synchronized (this) {
      mSearchablesMap = newSearchablesMap;
      mSearchablesList = newSearchablesList;
      mSearchablesInGlobalSearchList = newSearchablesInGlobalSearchList;
      mGlobalSearchActivities = newGlobalSearchActivities;
      mCurrentGlobalSearchActivity = newGlobalSearchActivity;
      mWebSearchActivity = newWebSearchActivity;
    }
  }
示例#7
0
 public static String getDefaultPkgName(MainAppContext appContext) {
   String defaultPkgName = null;
   PackageManager pm = appContext.mContainerContext.getPackageManager();
   Intent intent = new Intent(MediaStore.INTENT_ACTION_MUSIC_PLAYER);
   List<ResolveInfo> resolveInfos =
       pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
   if (resolveInfos != null) {
     for (int i = 0; i < resolveInfos.size(); i++) {
       if ((resolveInfos.get(i).activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)
           > 0) {
         defaultPkgName = resolveInfos.get(i).activityInfo.packageName;
         return defaultPkgName;
       }
     }
   } else {
     intent = new Intent(Intent.ACTION_MAIN);
     intent.addCategory(Intent.CATEGORY_APP_MUSIC);
     resolveInfos = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
     for (int i = 0; i < resolveInfos.size(); i++) {
       if ((resolveInfos.get(i).activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)
           > 0) {
         defaultPkgName = resolveInfos.get(i).activityInfo.packageName;
         return defaultPkgName;
       }
     }
   }
   return null;
 }
示例#8
0
 /**
  * Indicates whether the specified action can be used as an intent. This method queries the
  * package manager for installed packages that can respond to an intent with the specified action.
  * If no suitable package is found, this method returns false.
  * http://android-developers.blogspot.com/2009/01/can-i-use-this-intent.html
  *
  * @param context The application's environment.
  * @param action The Intent action to check for availability.
  * @return True if an Intent with the specified action can be sent and responded to, false
  *     otherwise.
  */
 public static boolean isIntentAvailable(Context context, String action) {
   final PackageManager packageManager = context.getPackageManager();
   final Intent intent = new Intent(action);
   List<ResolveInfo> list =
       packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
   return list.size() > 0;
 }
示例#9
0
 public static boolean isIntentAvailable(Intent intent) {
   final PackageManager packageManager = A.getApp().getPackageManager();
   List<ResolveInfo> list =
       packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
   // Logger.d(TAG, "isIntentAvailable(" + intent + "), res:" + list.size());
   return list.size() > 0;
 }
示例#10
0
  public static Map<String, DynActivityPlugin> getDynActivityPlugins(Context ctxt, String action) {
    if (!CACHED_ACTIVITY_RESOLUTION.containsKey(action)) {
      HashMap<String, DynActivityPlugin> plugins = new HashMap<String, DynActivityPlugin>();

      PackageManager packageManager = ctxt.getPackageManager();
      Intent it = new Intent(action);

      List<ResolveInfo> availables = packageManager.queryIntentActivities(it, 0);
      for (ResolveInfo resInfo : availables) {
        ActivityInfo actInfos = resInfo.activityInfo;
        if (packageManager.checkPermission(SipManager.PERMISSION_USE_SIP, actInfos.packageName)
            == PackageManager.PERMISSION_GRANTED) {
          ComponentName cmp = new ComponentName(actInfos.packageName, actInfos.name);
          DynActivityPlugin dynInfos;
          dynInfos =
              new DynActivityPlugin(
                  actInfos.loadLabel(packageManager).toString(), action, cmp, actInfos.metaData);
          plugins.put(cmp.flattenToString(), dynInfos);
        }
      }
      CACHED_ACTIVITY_RESOLUTION.put(action, plugins);
    }

    return CACHED_ACTIVITY_RESOLUTION.get(action);
  }
示例#11
0
  private void runApp(List<MainListItem> items) {
    // 起動中のアプリ情報を取得
    Intent it = new Intent(Intent.ACTION_MAIN);
    it.addCategory(Intent.CATEGORY_LAUNCHER);
    List<RunningAppProcessInfo> runningApp = activityManager.getRunningAppProcesses();
    List<RunningServiceInfo> runningService = activityManager.getRunningServices(100);
    List<ResolveInfo> appList = packageManager.queryIntentActivities(it, 0);

    if (runningApp != null) {
      for (RunningAppProcessInfo app : runningApp) {
        try {
          // アプリ名をリストに追加
          ApplicationInfo appInfo = packageManager.getApplicationInfo(app.processName, 0);
          items.add(
              new MainListItem(
                  packageManager.getApplicationIcon(appInfo),
                  returnLabel(app.processName),
                  app.processName,
                  app.pid,
                  usageMemory(app.pid),
                  0,
                  true,
                  app.importance,
                  serviceClassNames(runningService, app),
                  mainClassName(appList, app)));
        } catch (NameNotFoundException e) {
          e.printStackTrace();
        }
      }
    }
  }
  /**
   * 获取当前安装的dock风格包基础信息,每次重新扫描,调用者调用完后要对此返回列表清空
   *
   * @return
   */
  public ArrayList<StyleBaseInfo> getAllStyleBaseInfos() {
    ArrayList<StyleBaseInfo> mList = new ArrayList<StyleBaseInfo>();

    Intent intent = new Intent(ICustomAction.ACTION_PKG_NAME);
    intent.addCategory(Intent.CATEGORY_DEFAULT);

    PackageManager pm = mContext.getPackageManager();
    List<ResolveInfo> styles = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);

    int size = styles.size();
    for (int i = 0; i < size; i++) {
      String appPackageName = styles.get(i).activityInfo.packageName;
      String appName = (String) pm.getApplicationLabel(styles.get(i).activityInfo.applicationInfo);
      if (null != appPackageName && null != appName) {
        DockStylePkgInfo info = new DockStylePkgInfo();
        info.mPkgName = appPackageName;
        info.mStyleName = appName;
        mList.add(info);
      }
    }
    styles.clear();
    styles = null;

    return mList;
  }
示例#13
0
 /**
  * Send a URL up to Android to be handled by a browser.
  *
  * @param link The URL to be opened.
  */
 private void execURL(String link) {
   Uri webLink = Uri.parse(link);
   Intent openLink = new Intent(Intent.ACTION_VIEW, webLink);
   PackageManager pm = getPackageManager();
   List<ResolveInfo> handlers = pm.queryIntentActivities(openLink, 0);
   if (handlers.size() > 0) startActivity(openLink);
 }
  private void checkAppKeySetup() {
    // Check to make sure that we have a valid app key
    if (APP_KEY.startsWith("CHANGE") || APP_SECRET.startsWith("CHANGE")) {
      showToast(
          "You must apply for an app key and secret from developers.dropbox.com, and add them to the DBRoulette ap before trying it.");
      finish();
      return;
    }

    // Check if the app has set up its manifest properly.
    Intent testIntent = new Intent(Intent.ACTION_VIEW);
    String scheme = "db-" + APP_KEY;
    String uri = scheme + "://" + AuthActivity.AUTH_VERSION + "/test";
    testIntent.setData(Uri.parse(uri));
    PackageManager pm = getPackageManager();
    if (0 == pm.queryIntentActivities(testIntent, 0).size()) {
      showToast(
          "URL scheme in your app's "
              + "manifest is not set up correctly. You should have a "
              + "com.dropbox.client2.android.AuthActivity with the "
              + "scheme: "
              + scheme);
      finish();
    }
  }
 private boolean callWeChat() {
   Uri contentUrl = Uri.parse(ConfigUtil.getString(Keys.URL_WECHAT));
   Intent intent = new Intent(Intent.ACTION_VIEW);
   intent.addCategory(Intent.CATEGORY_BROWSABLE);
   intent.setData(contentUrl);
   PackageManager pm = getPackageManager();
   List<ResolveInfo> resInfo = pm.queryIntentActivities(intent, 0);
   Collections.sort(resInfo, new ResolveInfo.DisplayNameComparator(pm));
   List<Intent> targetedIntents = new ArrayList<Intent>();
   for (ResolveInfo info : resInfo) {
     Intent targeted = new Intent(Intent.ACTION_VIEW);
     ActivityInfo activityInfo = info.activityInfo;
     if (activityInfo.packageName.equals("com.tencent.mm")) {
       targeted.setData(contentUrl);
       targeted.setPackage(activityInfo.packageName);
       targeted.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
       targetedIntents.add(targeted);
     }
   }
   if (targetedIntents.isEmpty()) {
     return false;
   }
   Intent chooser =
       Intent.createChooser(targetedIntents.remove(0), getString(R.string.title_choose_wechat));
   chooser.setClassName("android", "com.android.internal.app.ResolverActivity");
   chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedIntents.toArray(new Parcelable[] {}));
   try {
     startActivity(chooser);
   } catch (ActivityNotFoundException e) {
     return false;
   }
   return true;
 }
  /** {@inheritDoc} */
  @Override
  public void openActivityOrFragment(final Intent intent) {
    final PackageManager pm = getPackageManager();
    List<ResolveInfo> resolveInfoList =
        pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
    for (ResolveInfo resolveInfo : resolveInfoList) {
      final FragmentReplaceInfo fri =
          onSubstituteFragmentForActivityLaunch(resolveInfo.activityInfo.name);
      if (fri != null) {
        final Bundle arguments = intentToFragmentArguments(intent);
        final FragmentManager fm = getSupportFragmentManager();

        try {
          Fragment fragment = (Fragment) fri.getFragmentClass().newInstance();
          fragment.setArguments(arguments);

          FragmentTransaction ft = fm.beginTransaction();
          ft.replace(fri.getContainerId(), fragment, fri.getFragmentTag());
          onBeforeCommitReplaceFragment(fm, ft, fragment);
          ft.commit();
        } catch (InstantiationException e) {
          throw new IllegalStateException("Error creating new fragment.", e);
        } catch (IllegalAccessException e) {
          throw new IllegalStateException("Error creating new fragment.", e);
        }
        return;
      }
    }
    super.openActivityOrFragment(intent);
  }
    @Override
    protected List<AppInfo> doInBackground(Void... v) {
      final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
      mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

      final PackageManager pm = getPackageManager();
      final List<ResolveInfo> apps = pm.queryIntentActivities(mainIntent, 0);
      final List<AppInfo> appList = new ArrayList<AppInfo>(apps.size());
      for (ResolveInfo info : apps) {
        final String packageName = info.activityInfo.packageName;
        if (packageName == null) {
          continue;
        }
        final String activityFqcn = info.activityInfo.name;
        final CharSequence label = info.loadLabel(pm);
        final Drawable icon = info.activityInfo.loadIcon(pm);

        final AppInfo appInfo = new AppInfo(label.toString(), icon, activityFqcn, packageName);
        appList.add(appInfo);
      }
      Collections.sort(
          appList,
          new Comparator<AppInfo>() {
            @Override
            public int compare(AppInfo app1, AppInfo app2) {
              return app1.getLabel().compareTo(app2.getLabel());
            }
          });

      return appList;
    }
示例#18
0
  /**
   * This method create a intent for posting a tweet on twitter by using the twitter app.
   *
   * @param tweetMessage message which should be posted
   */
  public static void tweetWithApp(String tweetMessage) {
    if (tweetMessage != null) {
      Intent tweetIntent = new Intent(Intent.ACTION_SEND);
      tweetIntent.putExtra(Intent.EXTRA_TEXT, tweetMessage);
      tweetIntent.setType("text/plain");
      tweetIntent.setFlags(
          Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

      PackageManager packManager = CreateContextForResource.getContext().getPackageManager();
      List<ResolveInfo> resolvedInfoList =
          packManager.queryIntentActivities(tweetIntent, PackageManager.MATCH_DEFAULT_ONLY);

      boolean resolved = false;
      for (ResolveInfo resolveInfo : resolvedInfoList) {
        if (resolveInfo.activityInfo.packageName.startsWith("com.twitter.android")) {
          tweetIntent.setClassName(
              resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name);
          resolved = true;
          break;
        }
      }
      if (resolved) {
        CreateContextForResource.getContext().startActivity(tweetIntent);
      } else {
        Toast.makeText(
                CreateContextForResource.getContext(),
                CreateContextForResource.getStringFromID(R.string.twitter_not_found),
                Toast.LENGTH_LONG)
            .show();
      }
    }
  }
示例#19
0
  protected List getData() {
    List<Map> myData = new ArrayList<Map>();

    Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
    mainIntent.setPackage(getPackageName());
    mainIntent.addCategory(Intent.CATEGORY_SAMPLE_CODE);

    PackageManager pm = getPackageManager();
    List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0);

    if (null == list) return myData;

    int len = list.size();

    String pkg = getPackageName();
    for (int i = 0; i < len; i++) {
      ResolveInfo info = list.get(i);
      CharSequence labelSeq = info.loadLabel(pm);
      if (info.activityInfo.packageName.equals(pkg) == false) {
        continue;
      }
      String label = labelSeq != null ? labelSeq.toString() : info.activityInfo.name;

      addItem(
          myData,
          label,
          activityIntent(info.activityInfo.applicationInfo.packageName, info.activityInfo.name));
    }

    Collections.sort(myData, sDisplayNameComparator);

    return myData;
  }
 /**
  * 判断系统中是否存在可以启动的相机应用
  *
  * @return 存在返回true,不存在返回false
  */
 public boolean hasCamera() {
   PackageManager packageManager = mActivity.getPackageManager();
   Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
   List<ResolveInfo> list =
       packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
   return list.size() > 0;
 }
示例#21
0
    /**
     * Get the {@link Entry} best associated with the given {@link Action}, or create and populate a
     * new one if it doesn't exist.
     */
    protected Entry getEntry(Action action) {
      final String mimeType = action.getMimeType();
      Entry entry = mCache.get(mimeType);
      if (entry != null) return entry;
      entry = new Entry();

      final Intent intent = action.getIntent();
      if (intent != null) {
        final List<ResolveInfo> matches =
            mPackageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);

        // Pick first match, otherwise best found
        ResolveInfo bestResolve = null;
        final int size = matches.size();
        if (size == 1) {
          bestResolve = matches.get(0);
        } else if (size > 1) {
          bestResolve = getBestResolve(intent, matches);
        }

        if (bestResolve != null) {
          final Drawable icon = bestResolve.loadIcon(mPackageManager);

          entry.bestResolve = bestResolve;
          entry.icon = new SoftReference<Drawable>(icon);
        }
      }

      mCache.put(mimeType, entry);
      return entry;
    }
示例#22
0
  final void openGoogleShopper(String query) {

    // Construct Intent to launch Shopper
    Intent intent = new Intent(Intent.ACTION_SEARCH);
    intent.setClassName(GOOGLE_SHOPPER_PACKAGE, GOOGLE_SHOPPER_ACTIVITY);
    intent.putExtra(SearchManager.QUERY, query);

    // Is it available?
    PackageManager pm = activity.getPackageManager();
    Collection<?> availableApps =
        pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);

    if (availableApps != null && !availableApps.isEmpty()) {
      // If something can handle it, start it
      activity.startActivity(intent);
    } else {
      // Otherwise offer to install it from Market.
      AlertDialog.Builder builder = new AlertDialog.Builder(activity);
      builder.setTitle(R.string.msg_google_shopper_missing);
      builder.setMessage(R.string.msg_install_google_shopper);
      builder.setIcon(R.drawable.shopper_icon);
      builder.setPositiveButton(R.string.button_ok, shopperMarketListener);
      builder.setNegativeButton(R.string.button_cancel, null);
      builder.show();
    }
  }
 private void openInMaps() {
   // get preferences
   SharedPreferences sharedPrefs =
       PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext());
   // build location from preferences
   Uri location = Uri.parse("geo:0,0?q=" + sharedPrefs.getString("location", "94043"));
   // build intent
   Intent intent = new Intent(Intent.ACTION_VIEW, location);
   // make sure theres an app available to respond by checking list of apps that can handle it is >
   // 0
   PackageManager packageManager = getActivity().getPackageManager();
   List activities =
       packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
   boolean isIntentSafe = activities.size() > 0;
   // start the intent only if its safe
   if (isIntentSafe) {
     startActivity(intent);
   } else {
     Toast.makeText(
             getActivity().getApplicationContext(),
             "Not apps to launch activity",
             Toast.LENGTH_LONG)
         .show();
   }
 }
 public void testContentUri() {
   Context context = getContext();
   PackageManager packageManager = context.getPackageManager();
   Intent intent = new Intent(Intent.ACTION_VIEW, ContactsContract.Contacts.CONTENT_URI);
   List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(intent, 0);
   assertFalse("Device does not support the activity intent: " + intent, resolveInfos.isEmpty());
 }
示例#25
0
 public static List<ResolveInfo> findActivitiesForPackage(Context context, String packageName) {
   final PackageManager packageManager = context.getPackageManager();
   final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
   mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
   mainIntent.setPackage(packageName);
   final List<ResolveInfo> apps = packageManager.queryIntentActivities(mainIntent, 0);
   return apps != null ? apps : new ArrayList<ResolveInfo>();
 }
示例#26
0
 /**
  * Returns all launchers of the specified package
  *
  * @param context The android context
  * @param packageName The package name
  * @return The resolve information of the specified package
  */
 @TargetApi(Build.VERSION_CODES.DONUT)
 public static List<ResolveInfo> getLaunchers(final Context context, final String packageName) {
   final PackageManager pm = context.getPackageManager();
   final Intent query = new Intent(Intent.ACTION_MAIN);
   query.addCategory(Intent.CATEGORY_LAUNCHER);
   query.setPackage(packageName);
   return pm.queryIntentActivities(query, 0);
 }
 private static boolean isIntentAvailable(Context context, Intent intent) {
   PackageManager mgr = context.getPackageManager();
   if (mgr != null) {
     List<ResolveInfo> list = mgr.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
     return list.size() > 0;
   }
   return false;
 }
  private boolean isIntentHandlerAvailable(Intent intent) {

    PackageManager pm = getActivity().getPackageManager();

    List<ResolveInfo> list = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);

    return list.size() > 0;
  }
 public static Drawable getIconForIntent(final Context context, Intent i) {
   PackageManager pm = context.getPackageManager();
   List<ResolveInfo> infos = pm.queryIntentActivities(i, PackageManager.MATCH_DEFAULT_ONLY);
   if (infos.size() > 0) {
     return infos.get(0).loadIcon(pm);
   }
   return null;
 }
示例#30
0
  // intentに適したactivityを一覧で引いてくる処理。
  private ArrayList<HashMap<String, String>> getSuitableActivities() {
    ArrayList<HashMap<String, String>> apps = new ArrayList<HashMap<String, String>>();

    //
    List<ResolveInfo> list = new ArrayList<ResolveInfo>();
    ResolveInfo info;
    HashMap<String, String> appinfo;
    //
    final PackageManager pm = this.getPackageManager();
    final Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.addCategory(Intent.CATEGORY_BROWSABLE);
    intent.setData(Uri.parse("http://cnn.com/"));
    List<ResolveInfo> list_src =
        pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);

    if (list_src == null) {
      return apps;
    }

    // いったんソートする
    Collections.sort(list_src, new ResolveInfo.DisplayNameComparator(pm));

    // listに対し、lastBrowserに等しいpackageNameを持っている要素を先頭に持ってくる
    for (int i = 0; i < list_src.size(); i++) {
      info = list_src.get(i);
      if (mLastBrowser.equals((String) info.activityInfo.applicationInfo.packageName)) {
        list.add(list_src.get(i));
      }
    }
    // それ以外を後から追加する
    for (int i = 0; i < list_src.size(); i++) {
      info = list_src.get(i);
      if (!mLastBrowser.equals((String) info.activityInfo.applicationInfo.packageName)) {
        list.add(list_src.get(i));
      }
    }

    // アクティビティ情報の取得
    for (int i = 0; i < list.size(); i++) {
      appinfo = new HashMap<String, String>();
      info = list.get(i);
      //
      appinfo.put("label", (String) info.loadLabel(pm));
      // Log.d(TAG, "gsa:label:" + (String) info.loadLabel(pm));
      //
      appinfo.put("packageName", (String) info.activityInfo.applicationInfo.packageName);
      // Log.d(TAG, "gsa:pName:"
      //		+ (String) info.activityInfo.applicationInfo.packageName);
      //
      appinfo.put("activityInfo", (String) info.activityInfo.name);
      // Log.d(TAG, "gsa:aName:" + (String) info.activityInfo.name);
      //
      apps.add(appinfo);
    }

    return apps;
  }