Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在应用程序安装/打开时注册新文件类型/扩展名_Android_File_File Type Associations - Fatal编程技术网

Android 在应用程序安装/打开时注册新文件类型/扩展名

Android 在应用程序安装/打开时注册新文件类型/扩展名,android,file,file-type-associations,Android,File,File Type Associations,首先让我说,我在这里读过一些类似的问题,但只能部分解决我的问题,仍然有疑问 我不确定自定义文件注册在Android中是如何工作的,我不知道是否可以在应用程序安装中注册新的文件类型,或者只能在打开文件的活动中使用意图过滤器来完成,其次,我不确定是否有可能自动将您自己的自定义文件与您的应用程序关联,或者这是只有用户才能做的事情 这就是说,我正在创建一个自定义文件类型(.aw扩展名)以便用我的应用程序打开,通过下一个意图过滤器,我可以从文件浏览器打开文件——例如,在我的Android 9华为中,但它与

首先让我说,我在这里读过一些类似的问题,但只能部分解决我的问题,仍然有疑问

我不确定自定义文件注册在Android中是如何工作的,我不知道是否可以在应用程序安装中注册新的文件类型,或者只能在打开文件的活动中使用意图过滤器来完成,其次,我不确定是否有可能自动将您自己的自定义文件与您的应用程序关联,或者这是只有用户才能做的事情

这就是说,我正在创建一个自定义文件类型(.aw扩展名)以便用我的应用程序打开,通过下一个意图过滤器,我可以从文件浏览器打开文件——例如,在我的Android 9华为中,但它与其他设备完全不起作用,比如我的旧Android 5平板电脑(在文件点击时显示“无法打开文件”)或者我的朋友安卓9三星。我说这个问题“部分”解决了,因为它似乎不是一个通用的工作意图过滤器

我如何找到一种“所有Android版本”的工作方式来注册自定义文件类型,并告诉我是否有可能在浏览器中看到.aw文件时自动完成注册,或者在任何位置出现图标并打开文件时自动完成注册

这是manifest.xml中的我的意图过滤器

<intent-filter
  android:icon="@drawable/ic_launcher"
  android:label="@string/app_name">
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <data
      android:host="*"
      android:mimeType="application/aw"
      android:scheme="content" />
</intent-filter>
我不确定Android中自定义文件注册是如何工作的

它从来没有工作得特别好,在现代版本的Android上几乎毫无意义。确保用户可以通过其他方式选择要在应用程序中使用的内容,例如“打开”工具栏按钮,该按钮可触发
操作\u打开\u文档
意图

我不知道是否可以在应用程序安装中注册新的文件类型,或者只能在将打开文件的活动中使用意图过滤器进行注册

只能使用
执行此操作。这通常发生在将处理
意图的
上。如果需要的话,可以单独启用/禁用

我不确定是否有可能自动将您自己的自定义文件与您的应用程序关联,或者这是只有用户才能做的事情

拥有
是自动的。不过,很少有应用程序会创建匹配的
意图

我可以从文件浏览器中打开文件,例如,在我的Android 9中

据推测,这是该设备中的一个bug。人类历史上编写的大约零个应用程序会知道您的非官方(也可能是无效的)
application/aw
MIME类型,以创建使用它的
Intent

如何找到“所有Android版本”的工作方式来注册自定义文件类型

没有

每当你在浏览器中看到一个.aw文件时,或者无论在什么地方,你的图标就会出现,你的应用程序就会打开该文件

没有保证的方法可以做到这一点。文件资源管理器如何处理文件取决于文件资源管理器的开发人员,而不是您。许多只适用于常见和流行的MIME类型,其他类型则不适用

欢迎您使用
pathPattern
添加
,以尝试在文件扩展名上进行字面匹配。由于
Uri
不一定要有文件扩展名,因此这在所有情况下都不起作用,但对某些用户和某些文件探索器都有效


一般来说,将这种形式获取到你的应用程序的内容是一个额外的特性,可以由你的一小部分用户使用。主要关注其他一些东西,例如
操作\u打开\u文档
,这对每个人都适用。

非常感谢@commonware。我非常感谢你的帮助,事实上,你给了我很多有用的信息。话虽如此,让我首先告诉你们,我已经在抽屉主菜单中创建了一个“打开文件”项,并且,正如你们已经指出的,我希望这个文件关联功能成为一种替代/额外的方式来实现它,所以我想不需要做更多的工作,我会将你们的答案标记为非常正确。
private String[] getIntentExtras()
{
    Intent intent = getIntent();
    String fileContents = null;
    String action = intent.getAction();
    if(action!=null)
    {
        if (action.equals(Intent.ACTION_VIEW))
        {
            fileContents = AWImport.importData(intent);
            if (fileContents.startsWith("whatever"))
            {
                fileContents = fileContents.replace("whatever", "");
            }
            else
            {
                showErrorOpeningFile();
                return null;
            }
        }
    }
    else
    ...