1

私は今、自分の 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 を使用せずに、すべてのパッケージ名で機能するはずです。

誰でも助けてくれることを願っています!

4

3 に答える 3

1

使用してみてください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-28T18:02:32.380 に答える
0

私はそれを自分で機能させました。私がやったことは、GOランチャー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 ブロックといくつかの試行とキャッチを使用して、それをインテントに入れました。

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-30T16:39:21.703 に答える
0

画像をキャプチャするコードを試してみませんか?

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);
            }
        });

同じ方法で作業できますか、それともデフォルトでカメラ アプリを呼び出したいですか?

于 2012-12-28T17:44:06.383 に答える