从代码开始安装app

时间:2011-04-30 19:54:20

标签: android

你好,我写了一个应用程序,我想整合一个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);    

但我不知道如何开始写生簿(来自市场的应用程序)。而且我还需要保存图片的路径。还有另外一种方法吗?还是开源?

...问候

2 个答案:

答案 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返回的内容(如果有的话)。因此,如果您希望与特定的应用程序集成,最好联系该开发人员并讨论这两个应用程序如何相互连接。另一方面,如果您实现了自己的草图应用程序,则可以根据需要进行集成。