0

我正在开发一个将“手势”与活动相关联的应用程序(例如 Dolphin Browser 与 url 相关联)。我想要做的是允许用户使用 Action.PICK_ACTIVITY 选择一个活动:

    Intent data = new Intent(Intent.ACTION_MAIN);
        data.addCategory(Intent.CATEGORY_LAUNCHER);
        Intent intent = new Intent(Intent.ACTION_PICK_ACTIVITY);
        intent.putExtra(Intent.EXTRA_INTENT, data);
        startActivityForResult(intent, PICK_ACTIVITY);
...
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == PICK_ACTIVITY && resultCode == RESULT_OK) {
        Gesture gesture = new Gesture();
        gesture.intent = data;
        Intent intent = new Intent(this, GestureEditorActivity.class);
                 intent.putExtra("com.example.gesture.Gesture",gesture.toByteArray());
        startActivity(intent);
    }
}

然后,当用户绘制相关手势时,我开始活动:

Intent intent = GestureList.getInstance(getApplicationContext()).getIntentForGesture(gesture);//intent corresponds to data in onActivityResult method
    if(intent != null)
        try {
            startActivity(intent);
        } catch (ActivityNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    else
        Toast.makeText(this, R.string.unrecognized_gesture, Toast.LENGTH_LONG).show();

但我得到了一个 ActivityNotFoundException :

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.MAIN dat=#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;component=com.android.calculator2/.Calculator;end }

这是我的 getIntentForGesture 方法:

public Intent getIntentForGesture(Gesture gesture)
{

    float bestDist = Float.MAX_VALUE;
    Gesture bestGesture = null;
    for(Gesture g:this)
    {
        float dist = gesture.distance(g);
        if(dist < bestDist)
        {
            bestDist = dist;
            bestGesture = g;
        }
    }

    if(bestGesture != null)
        return bestGesture.intent;
    else
        return null;
}

抱歉我的英语不好,提前感谢您的回答

4

2 回答 2

0

找不到计算器活动。可能是您的清单文件中的问题,因此您可以尝试:

选项1:

检查一切都写得很好。错误消息指出:

No Activity found to handle Intent { act=android.intent.action.MAIN dat=#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;component=**com.android.calculator2/.Calculator**;end }

那个斜线/可能是错误。

选项#2:

您的情况的关键是您正在尝试从另一个包中打开一个活动(在这个特定的手势中,计算器),所以您可以尝试检查是否可以像这样启动计算器应用程序:

Intent calcInt = new Intent(); 
calcInt.setClassName("com.android.calculator2", "com.android.calculator2.Calculator"); 
startActivity(calcInt); 

如果计算器没有使用这个简单的代码启动,那么我敢打赌该设备没有安装默认计算器。

选项#3:

发布您的 Android 清单文件,以便我们检查。

于 2013-06-01T22:50:12.400 回答
0

FLAG_ACTIVITY_NEW_TASK您必须为您的意图添加标志

Intent intent = GestureList.getInstance(getApplicationContext()).getIntentForGesture(gesture);//intent corresponds to data in onActivityResult method
if (intent != null) {
    try {
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    } catch (ActivityNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
} else {
    Toast.makeText(this, R.string.unrecognized_gesture, Toast.LENGTH_LONG).show();
}
于 2013-06-01T22:28:27.010 回答