我在真正的Nexus 5设备Android 6.0.1中观察到以下奇怪的结果
我在推出应用程序时运行以下简单代码.
Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+ AccountManager accountManager = AccountManager.get(this); Account[] accounts = accountManager.getAccounts();
上面的代码工作正常,如果我将我设置targetSdkVersion
为22,21,19.它返回非空数组.
但是,当我改变targetSdkVersion
和测试时
defaultConfig { applicationId "org.yccheok.myapplication" minSdkVersion 19 targetSdkVersion 23 versionCode 1 versionName "1.0" }
上面的代码返回0长度数组!
知道为什么在编译时会出现问题targetSdkVersion=23
.
请注意,在产生问题期间,无论何时更改targetSdkVersion
并通过Android Studio运行,您都需要清除应用数据,清除应用缓存并手动卸载所有用户.
以下是在Nexus 5设备Android 6.0.1中重现问题的步骤
通过File - > New - > New Projetct在Android Studio中创建项目...
选择"空白活动"
apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { applicationId "org.yccheok.myapplication" minSdkVersion 19 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.android.support:design:23.1.1' }
import android.accounts.Account; import android.accounts.AccountManager; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Patterns; import android.view.View; import android.view.Menu; import android.view.MenuItem; import java.util.regex.Pattern; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); int targetSdkVersion = 0; try { PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0); targetSdkVersion = packageInfo.applicationInfo.targetSdkVersion; } catch (PackageManager.NameNotFoundException e) { android.util.Log.i("CHEOK", e.getMessage()); } Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+ AccountManager accountManager = AccountManager.get(this); Account[] accounts = accountManager.getAccounts(); android.util.Log.i("CHEOK", targetSdkVersion + " : numnber of accoutn by ??? = " + accounts.length); for (Account account : accounts) { if (emailPattern.matcher(account.name).matches()) { String possibleEmail = account.name; android.util.Log.i("CHEOK", "possibleEmail = " + possibleEmail); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
知道为什么targetSdkVersion 23通过accountManager.getAccounts()返回0长度数组