在应用程序之间传输文件 (.txt)

Transfer file (.txt) between apps

一个应用程序在通过它共享时正在导出文本 (.txt) 文件,我可以看到 Gmail、Dropbox、drive、share it 等应用程序通过该应用程序共享它。我想在我的应用程序中导入该文本文件以进一步修改它。 txt文件。 我应该在 manifest 或 main activity 中实现什么? 我应该使用 INTENT 过滤器还是应该使用 getUriForFile() 方法来接收文本文件? 我的应用程序将如何出现在导出文本文件的其他应用程序共享列表中?

我认为您必须将您的应用程序与文件扩展名相关联,为此请执行以下操作:

<data android:scheme="file" /> //Means local file
<data android:mimeType="*/*"/> //This accept any mimeType
<data android:pathPattern=".*\.txt" /> //Your excepted extention

之后打开您的 Manifest 并添加以下行(您必须向目标添加一个意图过滤器 activity):

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

希望对您有所帮助。

您可以使用以下 intent-filter 将任何文件从另一个应用程序导入您的清单

            <intent-filter>
            <action android:name="android.intent.action.SEND"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:mimeType="*/*"/>
            <data android:mimeType="text/plain"/>

然后在 activity 中使用以下代码获取文本文件的 URI

    private Uri getUriForFile() {
    Intent intent = getIntent();
    String action = intent.getAction();
    String type = intent.getType();
    if (TextUtils.equals(Intent.ACTION_SEND, action) && !TextUtils.isEmpty(type)) {

        Uri uri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
        if (uri != null) {
            Log.e("uri",uri.toString());
            return  uri;
        }
    }
    return null;
}

UPDATE

如果 activity 是您的启动器 activity 则使用以下 Intent 过滤器

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         <intent-filter>
            <action android:name="android.intent.action.SEND_MULTIPLE"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:mimeType="*/*"/>
            <data android:mimeType="text/plain"/>
        </intent-filter>
    </activity>