.puz 文件选择器- Android
.puz file picker- Android
我正在开发一个填字游戏应用程序,它接受 .puz 文件作为输入。我尝试了以下代码,其中应用程序不接受来自默认文件管理器的 .puz 文件,而它接受并在通过第三方文件管理器发送时开始游戏,例如ES文件管理器。有没有办法让它通过默认文件管理器接受输入?
public void loadFile(View view){
Intent intent = new Intent(MediaStore.Files.FileColumns.DATA);
intent.setType("*/*");
intent.putExtra("CONTENT_TYPE", "*/*");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select PUZ file"), 1);
}
//selected file will be processed here
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 1){
if(resultCode == RESULT_OK){
String path = getPath(data.getData());
if(path!=null&&path.endsWith("puz")) {
try {
PuzzleDatabaseHelper dbHelper = WordsWithCrossesApplication.getDatabaseHelper();
Intent intent = new Intent(Intent.ACTION_EDIT, null, this, PlayActivity.class);
intent.putExtra(PlayActivity.EXTRA_PUZZLE_ID, dbHelper.addPuzzle(new File(path),"dilip","",0));
this.startActivity(intent);
} catch (Exception e) {
}
}
else
Toast.makeText(this, "Invalid Format or Try different File Manager to select file", Toast.LENGTH_SHORT).show();
}
}
}
据我了解 - 您需要将您的 .puz 扩展名与您的应用程序相关联。以下是有关您的意图过滤器的相关示例:Android intent filter: associate app with file extension
将以下 intent-filter
添加到 AndroidManifest
中的相关 activity
标签:
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data
android:host="*"
android:mimeType="*/*"
android:scheme="file"/>
<data android:pathPattern="/.*\.puz"/>
<data android:pathPattern="/.*\.PUZ"/>
</intent-filter>
在 onCreate(Bundle)
中添加以下代码以检查 Activity
是否从另一个应用程序启动:
if (getIntent().getData() != null) {
String path = getIntent().getData().getPath();
if (path != null && path.toLowerCase(Locale.ENGLISH).endsWith(".puz")) {
File puz = new File(path);
// TODO: do stuff with puz
}
}
注意: 文件管理器可能会使用不同的方法来查找可以处理特定 intent/file 的应用程序。如果您的应用程序未显示在某个文件管理器中,请尝试调整您的 intent-filter
。例如,您可能需要添加:
<data android:pathPattern="/.*\..*\.puz"/>
<data android:pathPattern="/.*\..*\..*\.puz"/>
<data android:pathPattern="/.*\..*\..*\..*\.puz"/>
<data android:pathPattern="/.*\..*\..*\..*\..*\.puz"/>
<data android:pathPattern="/.*\..*\..*\..*\..*\..*\.puz"/>
对于包含更多点或位于隐藏目录中的路径。 (参见 here)
我正在开发一个填字游戏应用程序,它接受 .puz 文件作为输入。我尝试了以下代码,其中应用程序不接受来自默认文件管理器的 .puz 文件,而它接受并在通过第三方文件管理器发送时开始游戏,例如ES文件管理器。有没有办法让它通过默认文件管理器接受输入?
public void loadFile(View view){
Intent intent = new Intent(MediaStore.Files.FileColumns.DATA);
intent.setType("*/*");
intent.putExtra("CONTENT_TYPE", "*/*");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select PUZ file"), 1);
}
//selected file will be processed here
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 1){
if(resultCode == RESULT_OK){
String path = getPath(data.getData());
if(path!=null&&path.endsWith("puz")) {
try {
PuzzleDatabaseHelper dbHelper = WordsWithCrossesApplication.getDatabaseHelper();
Intent intent = new Intent(Intent.ACTION_EDIT, null, this, PlayActivity.class);
intent.putExtra(PlayActivity.EXTRA_PUZZLE_ID, dbHelper.addPuzzle(new File(path),"dilip","",0));
this.startActivity(intent);
} catch (Exception e) {
}
}
else
Toast.makeText(this, "Invalid Format or Try different File Manager to select file", Toast.LENGTH_SHORT).show();
}
}
}
据我了解 - 您需要将您的 .puz 扩展名与您的应用程序相关联。以下是有关您的意图过滤器的相关示例:Android intent filter: associate app with file extension
将以下 intent-filter
添加到 AndroidManifest
中的相关 activity
标签:
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data
android:host="*"
android:mimeType="*/*"
android:scheme="file"/>
<data android:pathPattern="/.*\.puz"/>
<data android:pathPattern="/.*\.PUZ"/>
</intent-filter>
在 onCreate(Bundle)
中添加以下代码以检查 Activity
是否从另一个应用程序启动:
if (getIntent().getData() != null) {
String path = getIntent().getData().getPath();
if (path != null && path.toLowerCase(Locale.ENGLISH).endsWith(".puz")) {
File puz = new File(path);
// TODO: do stuff with puz
}
}
注意: 文件管理器可能会使用不同的方法来查找可以处理特定 intent/file 的应用程序。如果您的应用程序未显示在某个文件管理器中,请尝试调整您的 intent-filter
。例如,您可能需要添加:
<data android:pathPattern="/.*\..*\.puz"/>
<data android:pathPattern="/.*\..*\..*\.puz"/>
<data android:pathPattern="/.*\..*\..*\..*\.puz"/>
<data android:pathPattern="/.*\..*\..*\..*\..*\.puz"/>
<data android:pathPattern="/.*\..*\..*\..*\..*\..*\.puz"/>
对于包含更多点或位于隐藏目录中的路径。 (参见 here)