2012-05-29 6 views
6

特定のオプションについてはGoogleアカウントが必要なアプリケーションを開発しています。 アカウントが検出されないときはオプションが無効になっていますが、ポップアップで尋ねてユーザーを追加するように提示しています。ユーザーが「はい」をクリックすると、アクティビティが開始されます。 グローバルな「アカウントを追加」ページを表示するのにうまくいきますが、余計な手順でそれをスキップします。結局のところ、なぜ誰かに、Googleアカウントが必要な場合にExchangeアカウントを追加するオプションを提示すると、それはちょっと混乱します。そこで、新しいGoogleアカウント設定ページをデフォルトにしたいと思います。Androidで「Add Google Account」アクティビティをプログラムで開始する

のJava

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がスローされます。

5月29日18:24:50.741:W/System.errの(10875):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"/> 

QUESTION:は私がここで何をしないのですか?

EDIT:

私はのaddAccountを使用して別の方法を試してみましたが、これは動作しません何も起こりません、エラーがスローされていない、新たな活動には、Googleアカウントを追加するために開始しません。ちなみに、元のバージョンのtry catchブロック全体は、AlertDialog /リスナーにあります。

あなたが効果的に民間のAPIを使用しようとしている
AccountManager acm = AccountManager.get(); 
acm.addAccount("com.google", null, null, null, null, null, null);   

答えて

6

[OK]をAccountManagerの方法を使用して、問題は、アクティビティコンテキストが私のメソッド呼び出しでまったく使用されていないか、または正しくありませんでした。それは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 

これはおそらく、いくつかのより多くの仕事を実際に構成されたアカウント名を使用できるようにする必要がありますが、今のところ、これはQ.

に答えます残念ながら、これには許可が必要ですが、それはちょうどものだと思います。

+0

私はd ***のように感じますが、私は自分の答えを今答えたようにフラグを立てなければならないと思います。あなたの忍耐と@Nikolay Elenkovをお手伝いしてくれてありがとう! – slinden77

+0

"thisclassname"は実際のクラスですか? –

4

- 追加のGoogleアカウントアクティビティのクラス名が変更される可能性があり、またはそれは、すでに別のAndroidのバージョンでは異なる場合があります。 Googleサービスパッケージの1つにあります。マニフェストにその名前を追加しないでください。要するに、これはハックです、しないでください。 AccountManager.addAcount("com.google",...)はあなたのために働きません(あなたはMANAGE_ACCOUNTSの許可が必要です)?

+0

私はあなたが正しいと知っていますが、私はまだ自分の道を好む。私はaddAccountメソッドを試しましたが、率直に言って、それは私のためにはうまくいきませんでした。それとは別に、これには余分な許可が必要です。 addAccountExplicitlyメソッドのこのアクセス許可は、アカウントを静かに追加するためのものですが、すべてのaddAccountは新しいアクティビティを呼び出すため、実際にはアプリケーション自体によって管理/変更/作成されることはありません。しかし、私が自分の考えを変えたと仮定してみましょう。私はそれを試してみましたが、com.google typeとrest null、didnt workで試しました – slinden77

+0

私はあなたの意見を見ていますが、実際にはユーザーのやりとりではあります。私はそれがいくつかのユーザーを思わせるかもしれないことを知っている。私はもう一度チェックしなければなりませんが、IIRCは、あなたが許可を得ている限り、 "com.google"と残りの "null"が動作するはずです。あなたはどんなエラーを出していますか? –

+0

あなたはそうです。Android開発者サイトでは、新しいアクティビティを開始するために必要なアクセス許可が明示されています。私はintent.setClassName(com.google.android.gsf、...)を(com.google.android.gsf.login)に変更することで、私の問題を回避することができました。私の手がかりはコンソールにあり、追加ステップを使用したときに何が起きているのか把握しようとしました。今私は新しい問題を抱えています。パスワードを要求され、すぐにGoogleサーバーと通信できないというエラーが表示されます。 addAccountメソッドを使用してもエラーは発生しませんが、まだ動作しません.thx! – slinden77

関連する問題