2011-05-23 11 views
24

मैं ऐसे एप्लिकेशन पर काम कर रहा हूं जिसे इनबॉक्स या प्रेषित फ़ोल्डर में एक नया एमएमएस सहेजने/बनाने में सक्षम होना चाहिए, लेकिन मैं रास्ता नहीं समझ सकता।इनबॉक्स में एमएमएस को सहेजें/बनाएं एंड्रॉइड

मैं निम्नलिखित कोड की कोशिश की लेकिन यह मेरे अपवाद दिया:

ContentValues values = new ContentValues(); 
values.put("address", "xxxxxxxxxxx"); 
values.put("body", "body 3"); 
values.put("read", "0"); 
getContentResolver().insert(Uri.parse("content://mms/inbox"), values); 

और अपवाद है:

ERROR/Database(118): Error inserting read=0 body=body 3 msg_box=1 date=1306153444 address=xxxxxxxxxxx 
ERROR/Database(118): android.database.sqlite.SQLiteException: table pdu has no column named body: , while compiling: INSERT INTO pdu(read, body, msg_box, date, address) VALUES(?, ?, ?, ?, ?); 
ERROR/Database(118):  at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 
ERROR/Database(118):  at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91) 
ERROR/Database(118):  at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64) 
ERROR/Database(118):  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80) 
ERROR/Database(118):  at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:36) 
ERROR/Database(118):  at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1145) 
ERROR/Database(118):  at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1536) 
ERROR/Database(118):  at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1410) 
ERROR/Database(118):  at com.android.providers.telephony.MmsProvider.insert(MmsProvider.java:347) 
ERROR/Database(118):  at android.content.ContentProvider$Transport.insert(ContentProvider.java:174) 
ERROR/Database(118):  at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:146) 
ERROR/Database(118):  at android.os.Binder.execTransact(Binder.java:288) 
ERROR/Database(118):  at dalvik.system.NativeStart.run(Native Method) 
ERROR/MmsProvider(118): MmsProvider.insert: failed! read=0 body=body 3 msg_box=1 date=1306153444 address=xxxxxxxxxxx 

अपडेट करें: अपवाद लाइन को हटाने के द्वारा हटाया: values.put("body","body 3") लेकिन मैं कर सकते हैं ' संदेशों में किसी भी एमएमएस देखें।

+1

अपवाद को लाइन को हटाकर हटाया गया: value.put ("body", "body 3"); लेकिन संदेशों में किसी भी एमएमएस नहीं देख सकते हैं। और किसी भी चित्र या वीडियो डालने के लिए क्या करना है ???? – Farhan

+0

इरादे के माध्यम से एमएमएस भेजने के लिए आप अनुवर्ती लिंक का उपयोग कर सकते हैं: http://androiddevcentral.com/source-code/137/send-an-MMS-via-Intents –

+0

ठीक है, thanx कार्तिक लेकिन मैं अपने में सहेजना/बनाना चाहता हूं इनबॉक्स या भेजा फ़ोल्डर। @ सभी, लोग आते हैं, एक भी जवाब नहीं .. :( – Farhan

उत्तर

5

मुझे एक ही समस्या थी। हालांकि मैंने सफलतापूर्वक एक एमएमएस बनाया और बहाल किया। यह मूल रूप से डेटाबेस के विपरीत हेरफेर है।मुझे आशा है कि आप डेटाबेस से एमएमएस प्राप्त कर सकते हैं, है ना? आपको बस डेटाबेस टेबल में उपयुक्त मान वापस रखना होगा। आप mmssms.db में डेटाबेस टेबल के बारे में जानकारी प्राप्त कर सकते हैं। एक बार जब आप mmssms.db को समझ लेते हैं, तो एमएमएस डालना बहुत आसान होता है।

+0

कोड स्निपेट का उल्लेख कर सकते हैं, यह आसान होगा ... –

-6

सबसे पहले जब आप एक स्क्रीन बनाते हैं जिसे आप एमएमएस स्क्रीन के रूप में उपयोग करना चाहते हैं। तब जब आप इसे पूरा करने के लिए पूरा कर लेते हैं तो उस एमएमएस को उस व्यक्ति को भेजने के लिए जिसे आप चाहते हैं। यहां आप पहली बार अपनी परियोजना पर एक बीटीएन_मेल बटन घोषित करें।

btn_email = (बटन) findViewById (R.id.btn_email);

फिर इस बटन पर ऑनक्लिकेंट लिखें जो अन्य व्यक्ति को एमएमएस भेजने में मदद कर सकेगा।

एमएमएस कोड भेजें:

btn_email.setOnClickListener (नई View.OnClickListener() { @Override सार्वजनिक शून्य onClick (देखें v) { // TODO स्वत: निर्मित विधि ठूंठ System.out। println ("ईमेल बटन सिर्फ दबाया जाता है ..");।

    Intent sendIntent = new Intent(Intent.ACTION_SEND); 

        //Mime type of the attachment (or) u can use sendIntent.setType("*/*") 

        sendIntent.setType("image/jpeg"); 

        //Subject for the message or Email 

        sendIntent.putExtra(Intent.EXTRA_SUBJECT, "My Picture"); 

        //Full Path to the attachment 

        sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://mnt/"+mUrl)); 

        //Use a chooser to decide whether email or mms 

        startActivity(Intent.createChooser(sendIntent, "Email:")); 
       } 

      }); 

यहाँ कोड अन्य व्यक्ति के लिए एमएमएस भेज देंगे जो अपने sdcard पथ के रूप में है इस कोड को आशय कोड का उपयोग कर रहा है एंड्रॉइड डिफ़ॉल्ट ईमेल भेजने स्क्रीन का उपयोग करेंगे।

इस तरह से आप अन्य व्यक्ति को एमएमएस भेज सकते हैं।

अब जो तुम, कि अन्य व्यक्ति को भेजने के रूप में आपको लगता है कि स्क्रीन आप आप सिर्फ इतना है कि पूरे स्क्रीन पर कब्जा बनाया है जो विकसित है कि कण एमएमएस को बचाने के लिए ... और एसडी कार्ड की तरह में बचाने ..

जैसे :

btn_save = (बटन) findViewById (R.id.btn_save);

btn_save.setOnClickListener(new OnClickListener() 
    { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     System.out.println("the save button is just pressed.."); 

     saveImageToSD(); 
     Toast.makeText(Create_Screen_Birthday.this,"Image successfully saved",Toast.LENGTH_LONG).show();  
    } 

    }); 

संरक्षित शून्य saveImageToSD() { // TODO स्वत: निर्मित विधि ठूंठ

System.out.println("NOW you are on the saveimage to sd card method called block.."); 

    try 
    { 
     //String fileName = "myBitmapImage2.png"; 
     int Current_Hour,Current_Minute,Current_Second; 
     RelativeLayout settext_relative; 

     settext_relative = (RelativeLayout)findViewById(R.id.settext_relative); 



     final Calendar c = Calendar.getInstance(); 

     Current_Hour = c.get(Calendar.HOUR); 
     Current_Minute = c.get(Calendar.MINUTE); 
     Current_Second = c.get(Calendar.SECOND); 


     System.out.println("the value of Current_Year = "+Current_Hour); 
     System.out.println("the value of Current_Month = "+Current_Minute); 
     System.out.println("the value of Current_Date = "+Current_Second); 



     fileName = "Birthday_Card"+"_"+Current_Hour+"_"+Current_Minute+"_"+Current_Second+".png"; 
     String path = "/sdcard/E-card/Birthday_Cards/"; 

      newfileName = path + fileName; 
     System.out.println("the value of newfilename = "+newfileName); 


     System.out.println("The Filename on save card on sdcard = "+fileName); 

     FileOutputStream outStream = null; 
     File file = new File(path); 
     file.mkdirs(); 

     File outputFile = new File(file, fileName); 
     outputFile.createNewFile(); 

     outStream = new FileOutputStream(outputFile); 

     BufferedOutputStream bos = new BufferedOutputStream(outStream); 



     RL.setDrawingCacheEnabled(true); 

    bitmap = Bitmap.createBitmap(RL.getDrawingCache()); 

     bitmap.compress(Bitmap.CompressFormat.PNG, 100,bos); 

     RL.setDrawingCacheEnabled(false); 

     bos.flush(); 
     bos.close(); 

     btn_preview.setVisibility(View.VISIBLE); 

     btn_save.setVisibility(View.GONE); 
    } 

    catch(Exception ex) 
    { 
     ex.printStackTrace(); 
    }  

} 

इस उपरोक्त कोड स्क्रीन जो आप तो बस आप बस का उपयोग भेज सकते हैं या उस छवि को लाने है कि बचत होगी आपके एसडीकार्ड विशिष्ट पथ नाम से

+0

मुझे लगता है कि आप वास्तव में सवाल नहीं समझ पाए ... मैं इनबॉक्स में एक एमएमएस बनाना चाहता हूं , ऐसा होना चाहिए: कुछ कोड चलाएं, उसके बाद इनबॉक्स/प्रेषित के साथ डिफ़ॉल्ट संदेश फ़ोल्डर में एक नई प्रविष्टि बनाई गई है ..... – Farhan

2

एमएमएस का शरीर content://mms/part/ में संग्रहीत है। this code देखें कि इसे कैसे पढ़ा जाए, लेकिन याद रखें कि यह सब अनियंत्रित, असमर्थित है और बिना किसी सूचना के बदल सकता है।

+0

हाँ आप सही हैं और इनबॉक्स फ़ोल्डर में नए एमएमएस बनाने के बारे में क्या है ??? – Farhan

संबंधित मुद्दे