我想使用意图选择器在我的应用程序中打开任何文件 - 不幸的是,来自选择器的提议是......很奇怪。选择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);
这里有什么问题?
答案 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);
}
});
}
对我而言,这解决了这个问题。