Android Intent选择器 - 错误的命题

时间:2016-07-07 07:46:53

标签: android android-intent gallery filechooser

我想使用意图选择器在我的应用程序中打开任何文件 - 不幸的是,来自选择器的提议是......很奇怪。选择png文件后,它只显示一个选项 - Drive PDF Viewer。但是当我尝试使用默认文件资源管理器打开相同的文件时,它正确地建议使用Galery或照片。

String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext.toLowerCase());
Log.i(TAG, mime); // <------------ image/png
Intent intent= new Intent(Intent.ACTION_VIEW);
intent.setType(mime);
intent.setData(Uri.fromFile(file));  // <----- png file
Intent chooser = Intent.createChooser(intent, "Choose an application to open with:");
chooser.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(chooser);

这里有什么问题?

4 个答案:

答案 0 :(得分:2)

使用setDataAndType

尝试此操作
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "image/*");
Intent chooser = Intent.createChooser(intent, "Choose an application to open with:");
context.startActivity(chooser);

请在类Intent中查看方法setType(String type)的Javadoc:
...
此方法会自动清除之前设置的所有数据(例如,通过setData(Uri))。
...

答案 1 :(得分:0)

试试这个,

String[] mimetypes = {"image/*"};
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);

这可能有助于你

答案 2 :(得分:0)

尝试addind这个insted mime

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Image"),REQUEST_TAKE_GALLERY_IMAGE);

答案 3 :(得分:0)

当我使用以下代码时,我也看到了同样的消息:

public class MainActivity extends AppCompatActivity {
intent = new Intent(MainActivity.this, SecondActivity.class);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.coordinator_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    TextView textView = (TextView) findViewById(R.id.gotoA);
    textView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            intent.putExtra("show 1",true);
            startActivity(intent);
        }
    });

    TextView textView1 = (TextView) findViewById(R.id.gotoB);
    textView1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            intent.putExtra("show 2",true);
            startActivity(intent);
        }
    });
}

所以我把意图构造器带到了我使用该意图实例的地方。

public class MainActivity extends AppCompatActivity {
Intent intent;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.coordinator_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    TextView textView = (TextView) findViewById(R.id.gotoA);
    textView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            intent = new Intent(MainActivity.this, SecondActivity.class);
            intent.putExtra("show 1",true);
            startActivity(intent);
        }
    });

    TextView textView1 = (TextView) findViewById(R.id.gotoB);
    textView1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            intent = new Intent(MainActivity.this, SecondActivity.class);
            intent.putExtra("show 2",true);
            startActivity(intent);
        }
    });
}

对我而言,这解决了这个问题。