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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM