【发布时间】:2012-12-28 22:44:09
【问题描述】:
当一个文件被选中时,我的应用程序会调用 android PackageManager,并为用户提供一个应用程序选项来处理文件的处理方式。我想将此选择限制为蓝牙。目前蓝牙是第一个选项,这很好,这一切都有效。我想知道是否可以只向用户展示这个选项。
case REQUEST_FILE_SELECT:
if (requestCode == REQUEST_FILE_SELECT) {
// Get the Uri of the selected file
Uri uri = data.getData();
Log.d(TAG, "File Uri: " + uri.toString());
// Get the path
String path = null;
try {
path = FileUtils.getPath(this, uri);
} catch (URISyntaxException e) {
e.printStackTrace();
}
Log.d(TAG, "File Path: " + path);
// Get the file instance
File mFile = new File(path);
// Evoke the file chooser
List<Intent> targetedShareIntents = new ArrayList<Intent>();
Intent shareIntent = new Intent(
android.content.Intent.ACTION_SEND);
shareIntent.setType("*/*");
// Evoke the package manager
List<ResolveInfo> resInfo = getPackageManager()
.queryIntentActivities(shareIntent,
PackageManager.GET_ACTIVITIES);
if (!resInfo.isEmpty()) {
for (ResolveInfo resolveInfo : resInfo) {
String packageName = resolveInfo.activityInfo.packageName;
if (packageName.equals("com.android.bluetooth")) {
Intent targetedShareIntent = new Intent(
android.content.Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM,
Uri.fromFile(mFile));
targetedShareIntent.setPackage(packageName);
targetedShareIntents.add(targetedShareIntent);
startActivity(Intent.createChooser(shareIntent,
"Share File"));
}
}
}
}
【问题讨论】:
-
ACTION_SEND背后的意义在于让用户控制数据的发送地点和方式。 -
是的,我明白这一点,但我的问题是寻求替代方案。
-
最可能的选择是不使用
ACTION_SEND。毕竟,“蓝牙”不会出现在所有设备上,并且在它所在的那些设备上可能没有相同的功能。所以,如果你真的想通过蓝牙对你的数据做一些事情,那就自己做吧。 -
谢谢,但这是一个蓝牙应用程序。它不适用于没有蓝牙的设备。
-
我指的不是蓝牙技术。我指的是“蓝牙”,您在选择器中看到的条目。在任何给定的 Android 设备上都不一定有“蓝牙”活动会显示在选择器中,并且“蓝牙”活动不一定在每台设备上都做同样的事情(更不用说你认为它做了什么或做什么)用户希望它这样做)。要么允许您的用户选择“发送”数据的位置,要么自己编写蓝牙处理代码以确保它按照您的预期进行。