.puz 文件选择器 - Android

Posted

技术标签:

【中文标题】.puz 文件选择器 - Android【英文标题】:.puz file picker- Android 【发布时间】:2016-05-04 17:54:07 【问题描述】:

我正在开发一个接受 .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();
        
    

【问题讨论】:

【参考方案1】:

将以下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-filter。例如,您可能需要添加:

<data android:pathPattern="/.*\\..*\\.puz"/>
<data android:pathPattern="/.*\\..*\\..*\\.puz"/>
<data android:pathPattern="/.*\\..*\\..*\\..*\\.puz"/>
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\.puz"/>
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\.puz"/>

用于包含更多点或位于隐藏目录中的路径。 (见here)

【讨论】:

【参考方案2】:

据我了解 - 您需要将 .puz 扩展名与您的应用程序相关联。以下是有关您的意图过滤器的相关示例:Android intent filter: associate app with file extension

【讨论】:

以上是关于.puz 文件选择器 - Android的主要内容,如果未能解决你的问题,请参考以下文章

Android编程 打开本地文件 文件选择器

Android文件选择器[关闭]

Xamarin android 中文件选择器的示例代码

Charles - Android 多媒体选择器

处理文件选择器 android 6.0 webview

简单的 Android 目录选择器 - 如何?