1. 程式人生 > >Android 自定義型別檔案與程式關聯

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