2012-05-29 5 views
6

में प्रोग्रामिंग रूप से 'Google खाता जोड़ें' गतिविधि शुरू करना मैं एक ऐसे एप्लिकेशन को विकसित कर रहा हूं जिसके लिए कुछ विकल्पों के लिए Google खाते की आवश्यकता है। कोई खाता नहीं मिलने पर विकल्प अक्षम हैं, लेकिन मैं उपयोगकर्ता को पॉपअप के माध्यम से पूछकर एक जोड़ने के लिए प्रस्तुत कर रहा हूं, यदि उपयोगकर्ता हाँ पर क्लिक करता है, तो गतिविधि शुरू होनी चाहिए। वैश्विक "खाता जोड़ें" पृष्ठ प्रदर्शित करने के लिए यह ठीक काम कर रहा है, लेकिन मैं इसे अतिरिक्त चरण के लिए अनिश्चित छोड़ना चाहता हूं। आखिरकार, किसी Google खाते की आवश्यकता होने पर किसी Exchange खाते को जोड़ने का विकल्प क्यों मौजूद है, यह केवल भ्रमित है। तो मैं नए Google खाता सेटअप पेज पर डिफ़ॉल्ट करना चाहता हूं।एंड्रॉइड

जावा

try { 
    Intent intent = new Intent(); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intent.setClassName("com.google.android.gsf", "com.google.android.gsf.login.AccountIntroActivity"); 

    //if(getApplicationContext().getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null) { 
     getApplicationContext().startActivity(intent); 
    //} else { 
     //getApplicationContext().startActivity(new Intent(Settings.ACTION_ADD_ACCOUNT).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); 
    //} 
} catch (ActivityNotFoundException e) { 
    e.printStackTrace(); 
} 

जब मैं इस चलाने के लिए, निम्न exeception फेंक दिया जाता है:

05-29 18: 24: 50.741: डब्ल्यू/System.err (10,875): android.content .ActivityNotFoundException: स्पष्ट गतिविधि वर्ग {com.google.android.gsf/com.google.android.gsf.login.AccountIntroActivity} ढूंढने में असमर्थ; क्या आपने इस गतिविधि को अपने AndroidManifest.xml में घोषित किया है?

AndroidManifest.xml

<activity 
     android:name="com.google.android.gsf.login.AccountIntroActivity"/> 

प्रश्न: मैं यहाँ क्या याद आ रही है?

संपादित करें:

मैं addAccount का उपयोग कर, यह, कुछ नहीं होता, कोई त्रुटि फेंक दिया जाता है काम नहीं करता है एक अलग तरह की कोशिश की, कोई नई गतिविधि Google खाते में जोड़ने के लिए शुरू होता है। वैसे, मूल संस्करण में संपूर्ण प्रयास पकड़ ब्लॉक एक AlertDialog/श्रोता में है। जोड़ने, गूगल खाता गतिविधि के वर्ग के नाम बदल सकते हैं या यह पहले से ही विभिन्न Android संस्करण पर अलग हो सकता है -

AccountManager acm = AccountManager.get(); 
acm.addAccount("com.google", null, null, null, null, null, null);   

उत्तर

6

ठीक है, खाता प्रबंधक का उपयोग करने में समस्या यह थी कि विधि संदर्भ में गतिविधि संदर्भ का उपयोग मेरे द्वारा नहीं किया जा रहा था, या सही ढंग से नहीं। तथ्य यह है कि यह एक DialogInterface में इस्तेमाल किया गया था को देखते हुए, यह काम करता है:

private void popup() { 
    AlertDialog.Builder helpBuilder = new AlertDialog.Builder(this); 
    helpBuilder.setTitle("Add Gmail account"); 
    helpBuilder.setMessage("These options rely on a Gmail account, but you 
    don't seem to have one configured. Would you like to configure one now?"); 

    helpBuilder.setPositiveButton("Yes", 
    new DialogInterface.OnClickListener() { 
     //@Override 
     public void onClick(DialogInterface dialog, int which) { 
      //try/ catch block was here 
      AccountManager acm = AccountManager.get(getApplicationContext()); 
      acm.addAccount("com.google", null, null, null, thisclassname.this, 
      null, null); 
      } 
    }); 

    helpBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      // close the dialog, return to activity 
     } 
    });  

    AlertDialog helpDialog = helpBuilder.create(); 
    helpDialog.show(); 
}//end method 

यह शायद कुछ और काम करने की जरूरत वास्तव में कॉन्फ़िगर किया गया खाता नाम का उपयोग करने में सक्षम हो, लेकिन अब के लिए, इस प्रश्न का उत्तर देता

अफसोस की बात है, इसके लिए एक अनुमति की आवश्यकता है, लेकिन मुझे लगता है कि यह चीजें हैं

+0

मुझे डी *** की तरह लगता है, लेकिन मुझे लगता है कि मुझे अभी जवाब के रूप में अपना जवाब झंडा देना है। आपके सभी धैर्य के लिए धन्यवाद और @ निकोले एलेनकोव की मदद करें! – slinden77

+0

"thisclassname" एक वास्तविक वर्ग है? –

4

आप प्रभावी रूप से एक निजी एपीआई का उपयोग करने की कोशिश कर रहे हैं। यह Google सेवाओं के पैकेज में से एक में स्थित है, और आपको निश्चित रूप से अपना नाम अपने मैनिफेस्ट में नहीं जोड़ना चाहिए। संक्षेप में, यह एक हैक है, ऐसा मत करो। AccountManager.addAcount("com.google",...) आपके लिए काम नहीं करता है (आपको MANAGE_ACCOUNTS अनुमति की आवश्यकता है)?

+0

मुझे पता है कि आप सही हैं, लेकिन मैं अभी भी अपना रास्ता पसंद करता हूं। मैंने addAccount विधि की कोशिश की, लेकिन स्पष्ट रूप से, यह सिर्फ मेरे लिए काम नहीं किया। इसके अलावा, इसके लिए एक अतिरिक्त अनुमति की आवश्यकता है, जो मुझे व्यर्थ लगता है। मैं addAccountExplicitly विधि के लिए इस अनुमति को समझ सकता हूं, क्योंकि यह चुपचाप एक खाता जोड़ता है, लेकिन सभी addAccount एक नई गतिविधि का आह्वान करता है, जो इसे अपने काम को संभालता है, वास्तव में एप्लिकेशन द्वारा कुछ भी प्रबंधित/संशोधित/बनाया नहीं जाता है। लेकिन मान लीजिए कि मैं अपना दिमाग बदलता हूं, क्या आप एक उदाहरण पोस्ट कर सकते हैं जो काम करना चाहिए? मैंने इसे कॉमफ़ेस प्रकार और आराम नल के साथ करने की कोशिश की, – slinden77

+0

काम नहीं किया, मैं आपका बिंदु देखता हूं, लेकिन आप वास्तव में उपयोगकर्ता के संपर्क के बावजूद एक खाता _adding_ कर रहे हैं, इसलिए यह समझ में आता है।मुझे पता है कि यह कुछ उपयोगकर्ताओं को आकर्षित कर सकता है हालांकि। मुझे वापस जांचना होगा, लेकिन आईआईआरसी, जब तक आपके पास अनुमति हो, "com.google" और बाकी 'शून्य' का काम करना चाहिए। आप क्या त्रुटि प्राप्त कर रहे हैं। –

+0

आप सही हैं, एंड्रॉइड डेवलपर साइट स्पष्ट रूप से बताती है कि नई गतिविधि लॉन्च करने के लिए अनुमतियां आवश्यक हैं। मैंने intent.setClassName (com.google.android.gsf, ...) को (com.google.android.gsf.login) को बदलकर मेरी समस्या को बाधित कर दिया। मेरा सुराग कंसोल में था जहां मैंने यह पता लगाने की कोशिश की कि जब मैं अतिरिक्त कदम, वैश्विक ऐड खाता पृष्ठ का उपयोग करता था तो क्या हो रहा था। अब मुझे एक नई समस्या है, यह मुझे पासवर्ड के लिए पूछता है और Google सर्वर के साथ संवाद करने में सक्षम नहीं होने के बारे में तुरंत एक त्रुटि प्रदर्शित करता है। जब मैं addAccount विधि का उपयोग करता हूं तो मुझे कोई त्रुटि नहीं मिल रही है ... लेकिन फिर भी यह काम नहीं करता है ... thx! – slinden77