Android 自定义类型文件与程序关联

0x01 功能


 实现在其他应用中打开某个后缀名的文件 可以直接跳转到本应用中的某个activity进行处理

 

0x01 实现


   首先创建一个activity ,然后在manifest里对该activity项编辑,加入

  

<intent-filter >
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="file"/>
    <data android:host="*" />
    <data android:pathPattern=".*\\.file" />
</intent-filter>

  这里定义的是以.file为后缀的文件,需要对自己需要的后缀名进行修改,其中pathPattern可以设置为多个,用于应对各种情况,

  完善后如下

<activity android:name=".UpdateFwActivity"
            android:screenOrientation="portrait"
            android:label="固件升级"
            >
            <intent-filter>
                <action
                    android:name="android.intent.action.VIEW" />
                <category
                    android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="*/*" />
                <data android:host="*" />
                <data android:scheme="file" />
                <data android:pathPattern="/.*\.fw" />
                <data android:pathPattern="/.*\..*\.fw" />
                <data
                    android:pathPattern="/.*\..*\..*\.fw" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\.fw" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\.fw" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\.fw" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\.fw" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\..*\.fw" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\..*\..*\.fw" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\..*\..*\..*\.fw" />
                <data android:pathPattern="/.*\.ft" />
                <data android:pathPattern="/.*\..*\.ft" />
                <data
                    android:pathPattern="/.*\..*\..*\.ft" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\.ft" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\.ft" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\.ft" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\.ft" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\..*\.ft" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\..*\..*\.ft" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\..*\..*\..*\.ft" />
                <data android:pathPattern="/.*\.res" />
                <data
                    android:pathPattern="/.*\..*\.res" />
                <data
                    android:pathPattern="/.*\..*\..*\.res" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\.res" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\.res" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\.res" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\.res" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\..*\.res" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\..*\..*\.res" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\..*\..*\..*\.res" />
            </intent-filter>
            <intent-filter>
                <action
                    android:name="android.intent.action.VIEW" />
                <category
                    android:name="android.intent.category.DEFAULT" />
                <data android:host="*" />
                <data android:scheme="file" />
                <data android:pathPattern="/.*\.fw" />
                <data android:pathPattern="/.*\..*\.fw" />
                <data
                    android:pathPattern="/.*\..*\..*\.fw" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\.fw" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\.fw" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\.fw" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\.fw" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\..*\.fw" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\..*\..*\.fw" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\..*\..*\..*\.fw" />
                <data android:pathPattern="/.*\.ft" />
                <data android:pathPattern="/.*\..*\.ft" />
                <data
                    android:pathPattern="/.*\..*\..*\.ft" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\.ft" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\.ft" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\.ft" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\.ft" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\..*\.ft" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\..*\..*\.ft" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\..*\..*\..*\.ft" />
                <data android:pathPattern="/.*\.res" />
                <data
                    android:pathPattern="/.*\..*\.res" />
                <data
                    android:pathPattern="/.*\..*\..*\.res" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\.res" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\.res" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\.res" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\.res" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\..*\.res" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\..*\..*\.res" />
                <data
                    android:pathPattern="/.*\..*\..*\..*\..*\..*\..*\..*\..*\..*\.res" />
            </intent-filter>
            <intent-filter>
                <action
                    android:name="android.intent.action.VIEW" />
                <category
                    android:name="android.intent.category.DEFAULT" />
                <data
                    android:mimeType="application/octet-stream" />
            </intent-filter>
            <intent-filter>
                <action
                    android:name="android.intent.action.VIEW" />
                <category
                    android:name="android.intent.category.DEFAULT" />
                <data
                    android:mimeType="application/zip" />
                <data
                    android:mimeType="application/x-zip-compressed" />
            </intent-filter>
            <intent-filter>
                <action
                    android:name="android.intent.action.SEND" />
                <category
                    android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="*/*" />
            </intent-filter>

        </activity>

  

可以直接从intent中拿到文件的路径

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_update_fw);
        super.setTitle("res/fw 安装器");

        Intent v3=this.getIntent();
        String v1 = v3.getDataString();
        Toast.makeText(UpdateFwActivity.this,v1,Toast.LENGTH_LONG).show();

    }

  

0x03 效果


   

 

参考:

https://github.com/Freeyourgadget/Gadgetbridge/blob/master/app/src/main/AndroidManifest.xml

 

posted @ 2018-11-26 14:01  张小河  阅读(2450)  评论(0编辑  收藏  举报