解决方案 »

  1.   

    但是你可以先搜索一下有没有对应的intent filter,如果没有找到就提示用户。
      

  2.   

    刚学android不久,请问该怎么搜索
      

  3.   

    出处package com.example.packagemanager;
     
    import java.util.Collections;
    import java.util.List;import android.app.Activity;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.content.pm.ResolveInfo;
    import android.os.Bundle;public class MainActivity extends Activity {    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            getAppInfo();
        }    private void getAppInfo() {
            // 获取PackageManager对象
            PackageManager pm = this.getPackageManager();
            // 设置<intent-filter>标签内需要满足的条件
            Intent intent = new Intent(Intent.ACTION_MAIN, null);
            intent.addCategory(Intent.CATEGORY_DEFAULT);        // 通过queryIntentActivities获取ResolveInfo对象
            List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent,
                    PackageManager.MATCH_DEFAULT_ONLY);        // 调用系统排序,根据name排序
            // 该排序很重要,否则只能显示系统应用,不能显示第三方应用
            // 其实我测试发现有没有其实是一样的,就是输出的顺序是乱的
            Collections.sort(resolveInfos,
                    new ResolveInfo.DisplayNameComparator(pm));        for (ResolveInfo resolveInfo : resolveInfos) {
                String appName = resolveInfo.loadLabel(pm).toString();// 获取应用名称
                String packageName = resolveInfo.activityInfo.packageName;// 包名
                String className = resolveInfo.activityInfo.name;// 入口类名
                System.out.println("程序名:" + appName + " 包名:" + packageName
                        + " 入口类名:" + className);
            }
        } 
    }
      

  4.   

    或者捕捉startActivity的异常,但是这种方式比较粗暴。
      

  5.   


    Intent intent = new Intent("android.intent.action.VIEW");
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("oneshot", 0);
    intent.putExtra("configchange", 0);
    Uri uri = Uri.fromFile(file);
    intent.setDataAndType(uri, "video/*");
    startActivity(intent);我是在做一个文件管理器,点击文件时调用系统软件,比如上面的代码那样打开视频文件时调用视频软件,可是当系统没有安装视频软件时程序就停止运行了,求指教
      

  6.   


    try {
        //把你7楼的代码放在这里
    } catch (Exception e) {
        //提示用户没有找到
    }
      

  7.   

    何必呢,直接使用// 获取PackageManager对象
            PackageManager pm = this.getPackageManager();
            // 设置<intent-filter>标签内需要满足的条件
            Intent intent = new Intent(Intent.ACTION_MAIN, null);
            intent.addCategory(Intent.CATEGORY_DEFAULT);
            if(intent.resolveActivity(pm)!=null){
                startActivity(intent);
            }else{
                //在这里处理没有可打开程序的事件
            }这样先通过 intent.resolve 查询事件可否处理,然后再启动事件,或者自行处理就好了