2011-09-26 2 views
5

मैं इरादे नए इरादे (MediaStore.ACTION_IMAGE_CAPTURE) का उपयोग कर रहा हूं; मेरे आवेदन में उपयोग के लिए एक छवि कैप्चर करने के लिए। मेरे पास मेरे डिवाइस पर दो एप्लिकेशन इंस्टॉल हैं जो इस फ़ंक्शन को निष्पादित कर सकते हैं लेकिन मेरे ऐप को केवल डिफ़ॉल्ट कैमरा का उपयोग करना चाहते हैं।क्या मैं अपने आवेदन को 'पूर्ण क्रिया का उपयोग कर' सूची की पेशकश के बजाय डिफ़ॉल्ट कैमरा लॉन्च करने के लिए मजबूर कर सकता हूं?

क्या ऐसा करने का कोई तरीका है?

उत्तर

0

मुझे यकीन नहीं है कि आप जो करने की कोशिश कर रहे हैं वह सभी उपकरणों में पोर्टेबल है। एंड्रॉइड का एक लक्ष्य उन गतिविधियों के आसान प्रतिस्थापन की अनुमति देना है जो छवि कैप्चर जैसे सेवा अनुरोध। ऐसा कहा जा रहा है, अगर आप केवल अपने डिवाइस के लिए ऐसा करना चाहते हैं, तो आप मीडिया कैप्चर गतिविधि के नाम के इरादे में घटक नाम सेट कर सकते हैं।

+0

थोड़ा यहाँ जोड़ने के लिए, आप आशय आप पहले से ही किसी भी तरह से setComponent –

+1

धन्यवाद जस्टिन कॉल करने के लिए छोड़कर में परिवर्तन नहीं होता है। मुझे लगता है कि मैं डिफ़ॉल्ट सिस्टम कैमरा (com.google.android.camera) के घटक नाम की जांच कर सकता हूं और यदि यह मौजूद है तो सेटकंपोनेंट दृष्टिकोण का उपयोग करें अन्यथा सामान्य दृष्टिकोण पर वापस आते हैं। –

4

जैसा कि डॉ_सुली ने सुझाव दिया था, मैं इसे सिर्फ एक कोड में परिवर्तित कर रहा हूं और यह मेरे लिए अच्छी तरह से काम करता है, अगर प्रत्यक्ष कैमरा एप्लिकेशन तक पहुंचने का मामला है और अन्य भाग उपयोगकर्ता को सिस्टम कैमरा के साथ अन्य कैमरा एप्लिकेशन चुनने की अनुमति देता है।

protected static final int CAMERA_ACTIVITY = 100; 

Intent mIntent = null; 
     if(isPackageExists("com.google.android.camera")){ 
      mIntent= new Intent(); 
      mIntent.setPackage("com.google.android.camera"); 
      mIntent.setAction(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      mIntent.putExtra("output", Uri.fromFile(new File(Environment 
        .getExternalStorageDirectory(), "/myImage" + ".jpg"))); 
     }else{ 
     mIntent = new Intent(
       android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     mIntent.putExtra("output", Uri.fromFile(new File(Environment 
       .getExternalStorageDirectory(), "/myImage" + ".jpg"))); 

     Log.i("in onMenuItemSelected", 
       "Result code = " 
         + Environment.getExternalStorageDirectory()); 
     } 
     startActivityForResult(mIntent, CAMERA_ACTIVITY); 

onActivityResult अंदर

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 
    Log.i("in onActivityResult", "Result code = " + resultCode); 
    if (resultCode == -1) { 
     switch (requestCode) { 
     case CAMERA_ACTIVITY: 
      //do your stuff here, i am just calling the path of stored image 
      String filePath = Environment.getExternalStorageDirectory() 
        + "/myImage" + ".jpg"; 
        } 
        } 
       } 

isPackageExists पैकेज की पुष्टि करेगा मौजूद हैं या नहीं अपना सामान है।

public boolean isPackageExists(String targetPackage){ 
    List<ApplicationInfo> packages; 
    PackageManager pm; 
     pm = getPackageManager();   
     packages = pm.getInstalledApplications(0); 
     for (ApplicationInfo packageInfo : packages) { 
    if(packageInfo.packageName.equals(targetPackage)) return true; 
    }   
    return false; 
} 

या आप मेरे रास्ते में कर सकते हैं इसके बहुत आसान है, यह सब प्रणाली आवेदन फिल्टर करेगा और फिर बाद में आप नाम इसलिए तुलना यह मुश्किल कोडिंग के कारण सभी फोन लेकिन इसके बाद के संस्करण तकनीक पर काम से काम नहीं चलेगा हर फोन पर। बाद में मैंने ऊपर वर्णित कैमरा गतिविधि शुरू करने के लिए इस पैकेज नाम का उपयोग कर सकते हैं।

PackageManager pm = this.getPackageManager(); 

    List<ApplicationInfo> list = getPackageManager().getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES); 
    for (int n=0;n<list.size();n++) { 
     if((list.get(n).flags & ApplicationInfo.FLAG_SYSTEM)==1) 
     { 
      Log.d("Installed Applications", list.get(n).loadLabel(pm).toString()); 
      Log.d("package name", list.get(n).packageName); 
      if(list.get(n).loadLabel(pm).toString().equalsIgnoreCase("Camera")) 
       break; 
     } 
    } 
1
List<ApplicationInfo> list = packageManager.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES); 
    for (int n=0;n<list.size();n++) { 
     if((list.get(n).flags & ApplicationInfo.FLAG_SYSTEM)==1) 
     { 
      Log.d("TAG", "Installed Applications : " + list.get(n).loadLabel(packageManager).toString()); 
      Log.d("TAG", "package name : " + list.get(n).packageName); 
      if(list.get(n).loadLabel(packageManager).toString().equalsIgnoreCase("Camera")) { 
       defaultCameraPackage = list.get(n).packageName; 
       break; 
      } 
     } 
    } 

मैं समाधान निम्नलिखित पाते हैं और उसके पूरी तरह से काम कर रहे।

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
takePictureIntent.setPackage(defaultCameraPackage); 
startActivityForResult(takePictureIntent, actionCode); 

आप उपरोक्त इरादे में पैकेज सेट करके डिफ़ॉल्ट कैमरा फ़िल्टर कर सकते हैं। मैं दो आवेदन लाइन कैमरा और Paper Camera स्थापित करने दोनों क्षुधा पैकेज से चयनकर्ता लेकिन छानने दिखा रहे थे खुले कोड ऊपर केवल कैमरा डिफ़ॉल्ट रूप से यह परीक्षण किया है।

0

डिफ़ॉल्ट कैमरा ऐप पहला ऐप इंस्टॉल किया गया था। तो, camlist में पहला तत्व डिफ़ॉल्ट एप्लिकेशन

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    PackageManager packageManager = MapsActivity.this.getPackageManager(); 
    List<ResolveInfo> listCam = packageManager.queryIntentActivities(intent, 0); 
    intent.setPackage(listCam.get(0).activityInfo.packageName); 
    startActivityForResult(intent,INTENT_REQUESTCODE1);