我有一个使用专门创建的二进制(.gcsb)文件类型的应用程序。这些文件保存在SD卡的文件夹中。
目前,他们使用ES文件浏览器移动或关闭,或者手机制造商的行为类似于USB驱动器的传输实用程序。笨重。我想要的是能够将文件通过电子邮件发送到手机,然后从gmail中打开文件作为附件,这应该启动应用程序,然后将其保存到相应的SD卡文件夹。
我发现了一些关于设置意图的内容 - 希望 - 在gmail中单击“预览”启动应用程序(特别是Open custom Gmail attachment in my Android app),但我完全不确定如何访问文件数据!我想它必须是Intent.get ... Extra()函数之一,但是哪个,以及如何使用它?
答案 0 :(得分:20)
了解如何做到这一点。希望这可以帮助别人。派对矿,部分来自其他职位。它的目标是处理.gcsb文件附件。
意图过滤器是
<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:mimeType="application/octet-stream" />
</intent-filter>
并且活动onCreate()/ onRestart()中的代码是
Intent intent = getIntent();
InputStream is = null;
FileOutputStream os = null;
String fullPath = null;
try {
String action = intent.getAction();
if (!Intent.ACTION_VIEW.equals(action)) {
return;
}
Uri uri = intent.getData();
String scheme = uri.getScheme();
String name = null;
if (scheme.equals("file")) {
List<String> pathSegments = uri.getPathSegments();
if (pathSegments.size() > 0) {
name = pathSegments.get(pathSegments.size() - 1);
}
} else if (scheme.equals("content")) {
Cursor cursor = getContentResolver().query(uri, new String[] {
MediaStore.MediaColumns.DISPLAY_NAME
}, null, null, null);
cursor.moveToFirst();
int nameIndex = cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME);
if (nameIndex >= 0) {
name = cursor.getString(nameIndex);
}
} else {
return;
}
if (name == null) {
return;
}
int n = name.lastIndexOf(".");
String fileName, fileExt;
if (n == -1) {
return;
} else {
fileName = name.substring(0, n);
fileExt = name.substring(n);
if (!fileExt.equals(".gcsb")) {
return;
}
}
fullPath = ""/* create full path to where the file is to go, including name/ext */;
is = getContentResolver().openInputStream(uri);
os = new FileOutputStream(fullPath);
byte[] buffer = new byte[4096];
int count;
while ((count = is.read(buffer)) > 0) {
os.write(buffer, 0, count);
}
os.close();
is.close();
} catch (Exception e) {
if (is != null) {
try {
is.close();
} catch (Exception e1) {
}
}
if (os != null) {
try {
os.close();
} catch (Exception e1) {
}
}
if (fullPath != null) {
File f = new File(fullPath);
f.delete();
}
}
它似乎适用于标准的Android gmail和邮件应用程序。根据是否在gmail中按下“下载”(方案文件)或“预览”(方案内容),可以获得两种不同的文件名。
请注意,将活动设置为单个实例非常重要。
答案 1 :(得分:2)
nwm01223'答案是对的! 一个小小的附录: 他的回答仅适用于ACTION_VIEW。 如果你添加
import java.util.*;
public class primenumber2
{
public static void main(String[] args)
{
int[] int1 = {2,3,4,6,11,13,17,99};
int square=0;
int result=0;
boolean isprime = true;
for(int i=0;i<int1.length;i++)
{
int temp=int1[i];
for(int j=1;j<i;j++)
{
if(temp%j==0)
{
isprime = false;
}
else
isprime = true;
}
if(isprime)
{
System.out.println(temp);
square = temp*temp;
result = result+square;
}
}
System.out.println(result);
}
}
它也适用于ACTION_SEND