我正在开发一个将“手势”与活动相关联的应用程序(例如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;
}
抱歉我的英语不好,并提前感谢您的答案
答案 0 :(得分: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();
}
答案 1 :(得分: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 Manifest文件,以便我们检查。