我现在正在编写我自己的android-launcher,到目前为止,它似乎工作得很好。我可以启动除摄像头以外的所有应用程序。
我正在创建一个新的意图:
Intent intent = context.getPackageManager().getLaunchIntentForPackage("com.android.camera");而且意图不是null。但是当我开始意图的时候
context.startActivity(intent)我的应用程序崩溃了。LogCat:
12-28 17:18:43.711: I/Launch(4166): Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.android.camera/com.android.internal.app.ResolverActivity }
12-28 17:18:43.711: D/AndroidRuntime(4166): Shutting down VM
12-28 17:18:43.711: W/dalvikvm(4166): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0)
12-28 17:18:43.731: E/AndroidRuntime(4166): FATAL EXCEPTION: main
12-28 17:18:43.731: E/AndroidRuntime(4166): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.android.camera/com.android.internal.app.ResolverActivity}; have you declared this activity in your AndroidManifest.xml?我知道我可以用
Intent intent = new Intent();
intent.setCompomponent(new ComponentName(args));但是我不知道我可以使用哪些参数来启动不同的应用程序。
该解决方案应该适用于每个包名称,而不是使用特殊的cameraIntent。
希望有人能帮上忙!
发布于 2012-12-31 00:39:22
我自己把它修好了。我所做的是在点击GO Launcher EX中的相机图标的同时观看LogCat。在日志中,我发现了这一行:
12-30 17:38:19.098: I/ActivityManager(1375): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.camera/.CameraEntry bnds=[300,710][372,800] } from pid 11644我把它放到一个意图中,周围有一个if-block,还有一些trys和catches:
String packageName = "com.android.camera"; //Or whatever package should be launched
if(packageName.equals("com.android.camera")){ //Camera
try{
Intent intent = getPackageManager().getLaunchIntentForPackage("com.android.camera");
startActivity(intent);
}
catch(ActivityNotFoundException e){
Intent intent = new Intent();
ComponentName comp = new ComponentName("com.android.camera", "com.android.camera.CameraEntry");
intent.setComponent(comp);
startActivity(intent);
}
}
else{ //Any other
Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);
startActivity(intent);
}发布于 2012-12-29 02:02:32
尝试使用getInstalledPackages
PackageManager pm = getPackageManager();
// PackageManager
List<PackageInfo> packs = pm
.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
ArrayList<String> arrpackname=new ArrayList<String>();
for (PackageInfo pi : packs) {
if(pi.packageName.toLowerCase().contains("camera") &&
pi.packageName.toLowerCase().contains("android") ){
Intent intent = pm.getLaunchIntentForPackage(pi.packageName);
if (intent != null)
startActivity(intent);
}
} 或者,您可以尝试执行以下操作:
Intent mIntent = new Intent();
ComponentName comp = new ComponentName("com.android.camera",
"com.android.camera.Camera");
mIntent.setComponent(comp);
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mIntent.setFlags(Intent.FLAG_FROM_BACKGROUND);
mIntent.setAction("android.intent.action.VIEW");
startActivity(mIntent);发布于 2012-12-29 01:44:06
为什么不尝试使用捕获图像的代码呢?
capturePhoto.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
}
});我可以以同样的方式工作,或者想默认调用相机应用程序?
https://stackoverflow.com/questions/14073351
复制相似问题