2017-07-31 7 views
-1

私のアプリのサイドバーに表示するユーザーのフルネームが必要な学校向けプロジェクトを行っています。私は、スタックオーバーフローで見つかったが、私は形と呼ばれる活動を開くたびに、アプリはちょうどクラッシュ複数のフォーラムからユーザーのフルネームにアクセスする方法

Cursor c = this.getContentResolver().query(ContactsContract.Profile.CONTENT_URI, null, null, null, null); 
    int count = c.getCount(); 
    String[] columnNames = c.getColumnNames(); 
    boolean b = c.moveToFirst(); 
    int position = c.getPosition(); 
    if (count == 1 && position == 0) { 
     for (int j = 0; j < columnNames.length; j++) { 
      String columnName = columnNames[j]; 
      //nameView.setText(columnName); 

     } 
    } 
    c.close(); 

を試してみました。

get accountなどと呼ばれるアクセス許可がありますが、それを使用する方法はわかりませんし、それを見つけることもできませんでした。

ご協力いただければ幸いです!前もって感謝します!

+0

あなたがマニフェストファイルに –

答えて

0

GET_ACCOUNTSは、Android 6.0のCONTACTS権限グループに移動されました。したがって、連絡先の許可を要求する必要があります。あなたは、ユーザーが許可を受け入れるか、またはそれを拒否し、あなたのonRequestPermissionsResult一度API> = 23のデバイスのためにあなたは、その後、実行時にポップアップを取得しますが、それを行うたら、あなたは以下のコードを使用することができます任意の許可

public boolean isStoragePermissionGranted() { 
if (Build.VERSION.SDK_INT >= 23) { 

    if (checkSelfPermission(Manifest.permission.READ_CONTACTS) 
      == PackageManager.PERMISSION_GRANTED) { 
     Log.v(TAG,"Permission is granted"); 
     return true; 
    } else { 

     Log.v(TAG,"Permission is revoked"); 
     ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.READ_CONTACTS}, 1); 
     return false; 
    } 
} 
else { //permission is automatically granted on sdk<23 upon installation 
    Log.v(TAG,"Permission is granted"); 
    return true; 
} 
} 

の要求にメソッドが呼び出されます。だからここでは、ユーザーが許可をアプリに与えたかどうかのチェックを処理しなければならない。

GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
GoogleSignInAccount acct = result.getSignInAccount(); 
String personName = acct.getDisplayName(); 
String personGivenName = acct.getGivenName(); 
String personFamilyName = acct.getFamilyName(); 
+0

おかげで多くのことをREAD_Contactsの許可を追加しましたが、ときに私 - はいあなたはあなたにも、以下の操作を行うことができ、ユーザの詳細情報を取得するには、あなたのロジックと

@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case 0: boolean isPerpermissionForAllGranted = false; if (grantResults.length > 0 && permissions.length==grantResults.length) { for (int i = 0; i < permissions.length; i++){ if (grantResults[i] == PackageManager.PERMISSION_GRANTED){ isPerpermissionForAllGranted=true; }else{ isPerpermissionForAllGranted=false; } } Log.e("value", "Permission Granted, Now get user account"); } else { isPerpermissionForAllGranted=true; Log.e("value", "Permission Denied"); } if(isPerpermissionForAllGranted){ // do your stuff here } break; } } 

を続けることができるかどうか私のコードをあなたのコードに入れてくれたら、私は文字列[] cに割り当てられた "android name"の値を取得しますが、ユーザーの名前を表示します。私はそれをエミュレータの問題かもしれないと思っていたが、運がなかったと私の電話でこれを実行している。助言がありますか? –

+0

うまくいきます。私は本当にあなたがそのコードで何をしているのかわかりません。私は私のプログラムに追加すると、すべてが赤で、私のアプリはいずれもコンパイルしません –

+0

コードのどの部分。権限を取得するか、ユーザー名を取得しますか?あなたが提供した2番目のコードの –

関連する問題