你好,我写了一个应用程序,我想整合一个sketch-app来绘制一些东西并将文件或路径传递回我的应用程序。目前,该应用程序可以存储视频,图片,传感器数据......我喜欢添加存储草图的功能。我找到了这个代码
final Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
final ComponentName cn = new ComponentName("com.android.settings", "com.android.settings.fuelgauge.PowerUsageSummary");
intent.setComponent(cn);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity( intent);
但我不知道如何开始写生簿(来自市场的应用程序)。而且我还需要保存图片的路径。还有另外一种方法吗?还是开源?
...问候
答案 0 :(得分:1)
您需要检测到系统可以处理意图。
public static boolean canHandleIntent(final Context context, final Intent intent) {
if (intent != null) {
final PackageManager pm = context.getPackageManager();
if (pm != null) {
if (pm.queryIntentActivities(intent, 0).size() > 0) {
return true;
}
}
}
return false;
}
如果返回false,则应提示用户从市场下载应用程序。 调用
//Market.getViewPackageOnMarket("org.otherapp.sketchapp");
public class Market {
public static final String Application_BaseMarketUri = "market://details?id=";
public static final Intent getViewPackageOnMarket(final String package_name) {
final Intent result = new Intent(Intent.ACTION_VIEW);
result.setData(Uri.parse(Application_BaseMarketUri + package_name));
return result;
}
}
你还需要使用startActivityForResult,在你的启动活动中你需要添加这些东西....
public class MyKillerAppActivity extends Activity {
// Declare constant for the activity result.
public static final int ACTIVITYRESULT_GETSKETCH = 1;
// Call the activity ....
public void someMethod() {
startActivityForResult(intent, ACTIVITYRESULT_GETSKETCH);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK) {
if(requestCode == ACTIVITYRESULT_GETSKETCH) {
handleGetSketchResult(data);
} /* Handle other results if you need to. */
}
}
}
这有点满口,但还有更多!您需要解释从应用程序返回的数据。我不知道格式是针对您正在研究的草图应用程序,但这里是一个如何从图库中获取数据的示例。 Gallery应用程序返回内容提供者位置以加载用户选择的图像。此代码从内容提供程序中找到文件路径,然后打开该文件并将其加载到Bitmap对象中以供使用。
public static Bitmap onActivityResult_getImage(Context context, Intent data) {
Bitmap result = null;
Uri dataUri = data.getData();
final String filePath = findPictureFilePath(context, dataUri);
if(filePath != null) {
result = BitmapFactory.decodeFile(filePath);
}
return result;
}
private static String findPictureFilePath(Context context, Uri dataUri) {
String filePath = null;
final String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = null;
try {
cursor = context.getContentResolver().query(dataUri, projection, null, null, null);
int data_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
if(cursor.moveToFirst()) {
filePath = cursor.getString(data_index);
}
} finally {
if(cursor != null) {
cursor.close();
}
}
return filePath;
}
答案 1 :(得分:1)
所以写生簿不是你的应用程序吗?
要启动另一个程序,您需要知道它使用的intent过滤器或程序包名称。 Sketchbook的开发人员将能够为您提供此信息(如果他们希望共享它)。
现在,当从另一个应用程序获取数据时,该应用程序向您返回任何内容的唯一方法是开发人员是这样做的。由开发人员决定Activity返回的内容(如果有的话)。因此,如果您希望与特定的应用程序集成,最好联系该开发人员并讨论这两个应用程序如何相互连接。另一方面,如果您实现了自己的草图应用程序,则可以根据需要进行集成。