zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

android intent打开各种文件(txt、apk、ppt、xls和doc)的方法,下面有代码 直接运行

Android文件方法代码 运行 打开 各种 直接
2023-09-14 09:14:00 时间

在这里插入图片描述
1.MainActivity.java中:

public class MainActivity extends Activity implements View.OnClickListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ((Button) findViewById(R.id.button_txt)).setOnClickListener(this);
        ((Button) findViewById(R.id.button_apk)).setOnClickListener(this);
        ((Button) findViewById(R.id.button_ppt)).setOnClickListener(this);
        ((Button) findViewById(R.id.button_xls)).setOnClickListener(this);
        ((Button) findViewById(R.id.button_doc)).setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        String filePath;
        Intent intent;
        switch (v.getId()){
            case R.id.button_txt:
                filePath = "/storage/emulated/0/hello2.txt";
                intent = FileUtils.openFile(this,filePath);
                startActivity(intent);
                break;
            case R.id.button_apk:
                filePath = "/storage/emulated/0/app-debug.apk";
                intent = FileUtils.openFile(this,filePath);
                startActivity(intent);
                break;
            case R.id.button_ppt:
                filePath = "/storage/emulated/0/新建 PPT 演示文稿.ppt";
                intent = FileUtils.openFile(this,filePath);
                startActivity(intent);
                break;
            case R.id.button_xls:
                filePath = "/storage/emulated/0/新建 XLS 工作表.xls";
                intent = FileUtils.openFile(this,filePath);
                startActivity(intent);
                break;
            case R.id.button_doc:
                filePath = "/storage/emulated/0/新建 DOC 文档.doc";
                intent = FileUtils.openFile(this,filePath);
                startActivity(intent);
                break;
        }
    }
}

2.FileUtils.java中:

public class FileUtils {
    //打开类型的文件
    public static Intent openFile(Context context, String filePath) {
        if (filePath == null) {
            return null;
        }
        File file = new File(filePath);
        if (!file.exists())
            return null;
		/* 取得扩展名 */
        String end = file
                .getName()
                .substring(file.getName().lastIndexOf(".") + 1,
                        file.getName().length()).toLowerCase();
        end = end.trim().toLowerCase();
//		System.out.println(end);
		/* 依扩展名的类型决定MimeType */
        if (end.equals("apk")) {
            return getApkFileIntent(context,filePath);
        } else if (end.equals("ppt")) {
            return getPptFileIntent(context,filePath);
        } else if (end.equals("xls")) {
            return getExcelFileIntent(context,filePath);
        } else if (end.equals("doc")) {
            return getWordFileIntent(context,filePath);
        } else if (end.equals("pdf")) {
            return getPdfFileIntent(context,filePath);
        }  else if (end.equals("txt")) {
            return getTextFileIntent(context,filePath, false);
        } else {
            return getAllIntent(context,filePath);
        }
    }
    // Android获取一个用于打开APK文件的intent
    public static Intent getApkFileIntent(Context context,String param) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            Uri contentUri = FileProvider.getUriForFile(context, "com.filepath.intent.fileprovider", new File(param));
            intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
        } else {
            intent.setDataAndType(Uri.fromFile(new File(param)), "application/vnd.android.package-archive");
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        }
        return intent;
    }
    // Android获取一个用于打开PPT文件的intent
    public static Intent getPptFileIntent(Context context,String param) {

        Intent intent = new Intent("android.intent.action.VIEW");
        intent.addCategory("android.intent.category.DEFAULT");
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//        Uri uri = Uri.fromFile(new File(param));
        Uri uri = FileProvider.getUriForFile(context, "com.filepath.intent.fileprovider", new File(param));
        intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
        return intent;
    }
    // Android获取一个用于打开Excel文件的intent
    public static Intent getExcelFileIntent(Context context,String param) {

        Intent intent = new Intent("android.intent.action.VIEW");
        intent.addCategory("android.intent.category.DEFAULT");
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//        Uri uri = Uri.fromFile(new File(param));
        Uri uri = FileProvider.getUriForFile(context, "com.filepath.intent.fileprovider", new File(param));
        intent.setDataAndType(uri, "application/vnd.ms-excel");
        return intent;
    }
    // Android获取一个用于打开Word文件的intent
    public static Intent getWordFileIntent(Context context,String param) {

        Intent intent = new Intent("android.intent.action.VIEW");
        intent.addCategory("android.intent.category.DEFAULT");
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//        Uri uri = Uri.fromFile(new File(param));
        Uri uri = FileProvider.getUriForFile(context, "com.filepath.intent.fileprovider", new File(param));
        intent.setDataAndType(uri, "application/msword");
        return intent;
    }
    // Android获取一个用于打开PDF文件的intent
    public static Intent getPdfFileIntent(Context context,String param) {

        Intent intent = new Intent("android.intent.action.VIEW");
        intent.addCategory("android.intent.category.DEFAULT");
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//        Uri uri = Uri.fromFile(new File(param));
        Uri uri = FileProvider.getUriForFile(context, "com.filepath.intent.fileprovider", new File(param));
        intent.setDataAndType(uri, "application/pdf");
        return intent;
    }
    // Android获取一个用于打开文本文件的intent
    public static Intent getTextFileIntent(Context context,String param, boolean paramBoolean) {

        Intent intent = new Intent("android.intent.action.VIEW");
        intent.addCategory("android.intent.category.DEFAULT");
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        if (paramBoolean) {
            Uri uri1 = Uri.parse(param);
            intent.setDataAndType(uri1, "text/plain");
        } else {
//            Uri uri2 = Uri.fromFile(new File(param));
            Uri uri2 = FileProvider.getUriForFile(context, "com.filepath.intent.fileprovider", new File(param));
            intent.setDataAndType(uri2, "text/plain");
        }
        return intent;
    }
    // Android获取一个用于打开APK文件的intent
    public static Intent getAllIntent(Context context,String param) {

        Intent intent = new Intent();
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setAction(android.content.Intent.ACTION_VIEW);
//        Uri uri = Uri.fromFile(new File(param));
        Uri uri = FileProvider.getUriForFile(context, "com.filepath.intent.fileprovider", new File(param));
        intent.setDataAndType(uri, "*/*");
        return intent;
    }
}

3.fileprovider.java中

public class fileprovider extends FileProvider {
}

4.AndroidManifest.xml中:

......
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
......
<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.filepath.intent.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"/>
        </provider>

在这里插入图片描述
provider_paths.xml中:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <!--<external-path path="Android/data/com.filepath.cursoradapter/" name="files_root" />-->
    <external-path path="." name="external_storage_root" />
</paths>