您的位置:首页 > 编程语言

几个项目中用到的代码片段

2016-01-30 12:17 274 查看

打印调用栈

LogUtils.e("CHENZHENG", Log.getStackTraceString(new Throwable()));


监听网络变化

1,注册监听器:

mConnectivityManager = (ConnectivityManager)context
.getSystemService(Context.CONNECTIVITY_SERVICE);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
mContext.registerReceiver(this, intentFilter);


2。接收

public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (null == extras) {
return;
}

if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
NetworkInfo networkInfo = mConnectivityManager.getActiveNetworkInfo();
if (networkInfo == null) {
onConnectivityLost();
return;
}

State state = networkInfo.getState();
if (state == State.CONNECTED) {
synchronized (mLock) {
mLock.notifyAll();
}
onConnectivityRestored(networkInfo.getType());
} else if (state == State.DISCONNECTED) {
onConnectivityLost();
}
} else if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
NetworkInfo networkInfo = (NetworkInfo) extras.get(WifiManager.EXTRA_NETWORK_INFO);
if (networkInfo == null) return;
State state = networkInfo.getState();
if (state == State.CONNECTED) {
for (WifiConnectedCallback callback : mListWifiConnected) {
callback.call();
}
}
}
}


检测Android 中的某个 Intent 是否有效

public static boolean isIntentAvailable(Context context, String action) {
final PackageManager packageManager = context.getPackageManager();
final Intent intent = new Intent(action);
List<ResolveInfo> list =
packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}


获取所有已安装的应用

public static boolean showAllInstalledPackage(@NonNull Context context) {
PackageManager pm;
if ((pm = context.getApplicationContext().getPackageManager()) == null) {
return false;
}
List<PackageInfo> packages = pm.getInstalledPackages(0);
for (PackageInfo info : packages) {
String name = info.packageName.toLowerCase(Locale.ENGLISH);
Log.e("CHENZHENG",name);
}
return false;
}


自定义Drawable 设置listview的divider

可以设置divider和listview不等宽

<?xml version="1.0" encoding="utf-8"?>

<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<!--divider的背景色-->
<item
android:drawable="@color/background_color"
/>
<!--divider颜色-->
<item
android:drawable="@color/divider_color"
android:right="@dimen/click_area_padding_small"
android:left="@dimen/click_area_padding_small"
/>
</layer-list>


HandlerThread的正确退出方法(sdk18以前只有quit)

if (mHandlerThread != null && mHandlerThread.isAlive()) {
boolean findSafely = false;
Class clazz = mHandlerThread.getClass();
try {
Method m1 = clazz.getDeclaredMethod("quitSafely");
if(m1 != null)
{
findSafely = true;
}
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(!findSafely)
{
mHandlerThread.quit();
}
else
{
mHandlerThread.quitSafely();
}
}


ListView的点击Item时的背景色

android:listSelector="@drawable/conversation_unread_selector"


通过ApplyPatch批量更新数据库

public void changeSelectedItemsReadStatus() {
final ArrayList<ContentProviderOperation> updateTask = new ArrayList<ContentProviderOperation>();
updateReadStatus(updateTask, false);
try {
mActivity.getContentResolver().applyBatch(EmailContent.AUTHORITY, updateTask);
} catch (Exception e) {
e.printStackTrace();
}
}

private void updateReadStatus(ArrayList<ContentProviderOperation> updateTask, boolean isRead) {
ContentProviderOperation updateMessage;
for (Long emailID : emailModel.mItems) {
ContentValues emailValues = new ContentValues();
emailValues.put(EmailContent.MessageColumns.FLAG_READ, isRead ? 1 : 0);
updateMessage = ContentProviderOperation.newUpdate(EmailContent.Message.CONTENT_URI).withValues(emailValues)
.withSelection(EmailContent.MessageColumns.ID + "=?", new String[]{Long.toString(emailID)})
.build();
updateTask.add(updateMessage);
}
}


两种触发添加联系人的Intent

1,直接进入添加联系人页面

final Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
intent.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
intent.putExtra(ContactsContract.Intents.Insert.EMAIL, "example@example.com");

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(intent);
}
});


2,如果有该联系人,浏览,如果没有,弹出添加页面

Uri createUri = Uri.fromParts("mailto","13520011106@126.com", null);
Uri createUri = Uri.fromParts("tel", "13520011106", null);
final Intent intent = new Intent(ContactsContract.Intents.SHOW_OR_CREATE_CONTACT, createUri);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(intent);
}
});


3,新建联系人

final Intent intent = new Intent(Intent.ACTION_INSERT);
intent.setType("vnd.android.cursor.dir/person");
intent.setType("vnd.android.cursor.dir/contact");
intent.setType("vnd.android.cursor.dir/raw_contact");
intent.putExtra(ContactsContract.Intents.Insert.EMAIL, "example@example.com");

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(intent);
}
});


4,编辑联系人

final Intent intent=new Intent(Intent.ACTION_EDIT,Uri.parse("content://com.android.contacts/contacts/"+"1"));

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(intent);
}
});


5,使用QuickContactBadge

if (contactUri == null) {
mContactBadge.assignContactFromEmail(mEmailAddress,
true);
} else {
mContactBadge.assignContactUri(contactUri);
}

mContactBadge.performClick();


如何判断一个文件路径是隐藏文件

public static boolean isHidden(String path) {
if (TextUtils.isEmpty(path)) {
throw new IllegalArgumentException("An invalid file path");
}

int fsPos = path.lastIndexOf(File.separator);
if (fsPos != -1 && (fsPos != path.length() - 1)) {
String name = path.substring(fsPos + 1);
if (name.startsWith(".") && !name.equals(".") && !name.equals("..")) {
return true;
}
}
return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: