最近由于项目需求,需要实现的功能大体如下:
借助QQ,微信的文件接收功能,使用户在接收到文件之后可以跳转到我们的App中,进行其他相关的业务.
好了不多说,直接上代码:
1.首先需要在AndroidManifest.xml中声明
<activity android:name={ActivityName}>
<!--doc-->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/msword"/>
</intent-filter>
<!--pdf-->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/pdf"/>
</intent-filter>
<!--ppt-->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/vnd.ms-powerpoint"/>
</intent-filter>
<!--xls-->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/vnd.ms-excel"/>
</intent-filter>
<!--xlsx-->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/>
</intent-filter>
<!--docx-->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document"/>
</intent-filter>
<!--pptx-->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation"/>
</intent-filter>
</activity>
声明的作用:告诉其他的app你可以(View)打开这类的文件,而具体是哪一类文件,借助Action但关键还是借助 MIME 类型
做完了上面的操作,已经可以触发其他应用的打开方式了,但是还不够
2.到声明的Activity下接受其他App传递的消息
void onCreate (Bundle savedInstanceState) {
...
// 获得 intent, action 和 MIME type
Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
if (Intent.ACTION_VIEW.equals(action) && type != null) {
if ("application/msword".equals(type)) {
handle_Doc(intent); // 处理doc
}
...
}
}
private void handle_Doc(Intent intent) {
Uri data = intent.getData();
String path = data.getPath();//文件路径
...
}