android代码碎片(—)

一、SharedPreferences

定义

SharedPreferences preferences = getSharedPreferences("mySelectedApps", MODE_WORLD_READABLE);

使用

Editor editor = preferences.edit();

editor.putString(nameAndPackageString, labelString);//把包名和应用名存储
editor.commit();

editor.remove(nameAndPackageString); //移除
editor.commit();

editor.clear(); //清空
editor.commit();


获取已定义的SharedPreferences

SharedPreferences prefs = myContext.getSharedPreferences("mySelectedApps", Context.MODE_WORLD_READABLE);

使用

private Map<String, String> selectMap = new HashMap<String, String>();

selectMap = (Map<String, String>)prefs.getAll();//通过getAll()方法获取对应的HashMap


二、HashMap的遍历

法一:

Iterator iter = selectMap.entrySet().iterator();

while (iter.hasNext()){

Map.Entry entry = (Map.Entry) iter.next();

 item.nameAndPackage = (String) entry.getKey();

 item.label = (String) entry.getValue();
}

法二:

 for (Object o : tempMap.keySet()) {
 System.out.println("key=" + o + " value=" + tempMap.get(o));
  }

三、根据设置为Main action的Activity来获取系统所有应用


private PackageManager mPackageManager;

private List<ResolveInfo> mAllApps; //保存所有Apps的数据

private void bindAllApps() {

mPackageManager = getPackageManager();  

        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);  

        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);  

        mAllApps = mPackageManager.queryIntentActivities(mainIntent, 0);  

        Collections.sort(mAllApps, new ResolveInfo.DisplayNameComparator(mPackageManager)); 
}

获取应用程序相关信息

ResolveInfo res = mAllApps.get(i);

item.name = res.activityInfo.name; //Activity的名称

item.packageName= res.activityInfo.packageName; //包名

item.appIcon = res.loadIcon(mPackageManager); //图标

item.label  = (String) res.loadLabel(mPackageManager);//应用名

由包名获取应用的图标

 ApplicationInfo applicationInfo = null;

try {

applicationInfo = pm.getApplicationInfo(item.packageName, PackageManager.GET_META_DATA);

} catch (NameNotFoundException e) {
e.printStackTrace();
}
if(applicationInfo != null)
item.appIcon =  pm.getApplicationIcon(applicationInfo);

ps:一个app里面有可能有几个Main属性的Activity,就像拨号与联系人,它们图标和名称都不一样,但其实是属于一个app,他们包名一样,如果我们用读取main的方法来读取所有的app,那么就可以读取出多个。这多个其实是一个app,它们的AndroidManifest.xml不同,作为了不同的入口。

四、进入应用程序的方式

普通调用另一个Activity

Intent intent = new Intent(MainActivity.this, Game.class);

startActivity(intent);


包名+Activity名的方式调用

ComponentName componentName = new ComponentName(i.packageName, i.name); 

 Intent ii = new Intent();

ii.setComponent(componentName);

startActivity(ii);


单由包名调用

Intent ii = getPackageManager().getLaunchIntentForPackage(i.packageName);

 startActivity(ii); 

五、安装、卸载、更新应用程序的广播

注册广播
IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);

filter.addAction(Intent.ACTION_PACKAGE_REMOVED);

filter.addAction(Intent.ACTION_PACKAGE_CHANGED);

filter.addDataScheme("package");

registerReceiver(myAppReceiver, filter);


定义广播

public class AppInstallReceiver extends BroadcastReceiver {

   public void onReceive(Context context, Intent intent) {
       PackageManager manager = context.getPackageManager();
       String PkgName = intent.getData().getSchemeSpecificPart();;
       if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) {
           Toast.makeText(context, "安装成功"+PkgName, Toast.LENGTH_LONG).show();
       }
       else if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED)) {
           Toast.makeText(context, "卸载成功"+ PkgName, Toast.LENGTH_LONG).show();
       }
       else if (intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)) {
           Toast.makeText(context, "替换成功"+PkgName, Toast.LENGTH_LONG).show();
       }
   }
}

注销广播在onDestroy()中

unregisterReceiver(myAppReceiver);

六、设置单独显示时间的线程

private Handler mHandler;

Boolean stopThread=false;

oncreate方法
 HandlerThread thread = new HandlerThread("MyHandlerThread"); 
 thread.start();//创建一个HandlerThread并启动它
//使用HandlerThread的looper对象创建Handler,如果使用默认的构造方法,很有可能阻塞UI线程  
mHandler = new Handler(thread.getLooper());

 //显示时间的线程
    Runnable mBackgroundRunnable = new Runnable() {
public void run() {
while(!stopThread){
           handler.sendMessage(new Message());
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();

}

    };

private Handler handler = new Handler() {
        public void handleMessage(Message msg) {
        //大写的HH是24小时制,小写是12小时制
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");      
String date = sDateFormat.format(new java.util.Date());
dateTime.setText(date);
        }  
    }; 

protected void onResume() {
        stopThread=false;
        mHandler.post(mBackgroundRunnable);//将线程post到Handler中 
    super.onResume();
 }

七、usb监听广播

private File usbPath_rockchip = new File("/mnt/usb_storage/USB_DISK0");
private File usbPath_amlogic = new File("/storage/external_storage/sda1");

//注册usb监听广播
        IntentFilter iFilter = new IntentFilter();
        iFilter.addAction(Intent.ACTION_MEDIA_EJECT);
        iFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
        iFilter.addAction(Intent.ACTION_MEDIA_REMOVED);
        iFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
        iFilter.addDataScheme("file");
        usbReceiver = new USBBroadCastReceiver();
        registerReceiver(usbReceiver, iFilter);
//第一次的检测
try {
if(getUSB(usbPath_rockchip) || getUSB(usbPath_amlogic))
usbButton.setSelected(true);
} catch (Exception e) {
}

private boolean getUSB(File path) {
boolean isUsb = false;
if (path.isDirectory()) {
try {
File[] files = path.listFiles();


if (files.length > 0)
isUsb = true;
else {
isUsb = false;
}
} catch (Exception e) {
return false;
}
}
return isUsb;
}
        
//判断是否有usb存储设备的广播
private class USBBroadCastReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    if (action.equals(Intent.ACTION_MEDIA_MOUNTED)){
    Toast.makeText(context, "USB连接", Toast.LENGTH_LONG).show();
    usbButton.setSelected(true);
    }
    else{
    usbButton.setSelected(false);
    }
     
    }
}

八、有线网络和无线网络的检测

private int firsWebtFlage = 0; //是否第一次检测网络状况
private int firstWifiFlage = 0;

//注册网络广播
        IntentFilter iFilter2 = new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION);
        iFilter2.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
        netReceiver = new ConnectionChangeReceiver();
        registerReceiver(netReceiver, iFilter2);    

//判断网络的广播
public class ConnectionChangeReceiver extends BroadcastReceiver {   

        public void onReceive( Context context, Intent intent ) {   

            ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);   

            NetworkInfo activeNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_ETHERNET);   

            NetworkInfo mWifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);   

            Log.v("检测网络", " ");

            //判断是否连上有线网络

            if (activeNetInfo != null && activeNetInfo.isConnected()){

            if(firsWebtFlage != 0 && intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION))

            Toast.makeText(context, "连上有线网络" + firsWebtFlage, Toast.LENGTH_LONG).show();

            else

            firsWebtFlage++;

    webButton.setSelected(true);

            }

            else

            webButton.setSelected(false);

          //判断是否连上WiFi

            if( mWifi != null && mWifi.isConnected()){

            if(firstWifiFlage != 0 && intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION))

            Toast.makeText(context, "连上WiFi" + firsWebtFlage, Toast.LENGTH_LONG).show();

            else

            firstWifiFlage++;

    wifiButton.setSelected(true);

            }

            else

    wifiButton.setSelected(false); 

      }   

   }

九、AlertDialog的使用

private void openNewGameDialog() {
new AlertDialog.Builder(this)
.setTitle(R.string.new_game_title)
.setItems(R.array.difficulty, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
startGame(which);
}
}).show();
}
values文件下的arrays.xml
<?xml version="1.0" encoding="utf-8"?>

<resources>

    <array name="difficulty">

        <item>@string/easy_label</item>

        <item>@string/medium_label</item>

        <item>@string/hard_label</item>

    </array>

</resources>

十、获取窗口大小

Display display = getWindow().getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
mSreenWidth = outMetrics.widthPixels ;

十一、手势

private GestureDetector dector;
oncreate()中:
dector = new GestureDetector(this, this);
实现OnGestureListener诸多方法,其中
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
Log.v("onFling", " ");
if(e1.getX() - e2.getX() > 70){
next();
return true;
}
else if(e2.getX() - e1.getX() > 70 ){
prev();
return true;
}
return false;
}
public boolean onTouchEvent(MotionEvent event){
Log.v("onFling", " ");
return dector.onTouchEvent(event);
}

发布了102 篇原创文章 · 获赞 14 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/fofu33/article/details/40041541
今日推荐