1,、在launcher中隐藏不需要的widget,例如隐藏“路况”
在packages/apps/Launcher2/src/com/android/launcher2/AppsCustomizePagedView.java中
在updatePackages() 中
有一下代码
for (AppWidgetProviderInfo widget : widgets) {
if (widget.minWidth > 0 && widget.minHeight > 0) {
if(widget.toString().contains("TrafficAppWidget")) //路况widget的名字包括字符串“TrafficAppWidget”
{
continue;
}
mWidgets.add(widget);
} else {
Log.e(LOG_TAG, "Widget " + widget.provider + " has invalid dimensions (" +
widget.minWidth + ", " + widget.minHeight + ")");
}
2.是机器进入recover模式,并且重启
final String s = locales[i];
final int len = s.length();
if (len == 5) {
String language = s.substring(0, 2);
String country = s.substring(3, 5);
if(language.equals("es"))
{
continue;
}
if(language.equals("pt"))
{
continue;
}
final Locale l = new Locale(language, country);
if (findActivity(data, info.componentName)) {
return;
}
.......
if("com.spreadwin.factorytest.JH".equals(info.componentName.getPackageName())||
"com.spreadwin.s.test".equals(info.componentName.getPackageName()))
{
return;
}
added.add(info);
}
final PackageManager packageManager = context.getPackageManager();
final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
if(packageName.equals("com.spreadwin.factorytest.JH")||packageName.equals("com.spreadwin.s.test"))
{
mainIntent.setPackage(packageName);
Log.i("zhou", "findActivitiesForPackage--"+packageName);
}
else
{
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
mainIntent.setPackage(packageName);
}
final List<ResolveInfo> apps = packageManager.queryIntentActivities(mainIntent, 0);
return apps != null ? apps : new ArrayList<ResolveInfo>();
}
6.在launcher中的launcher.java文件中注册T卡的插拔广播
在oncreate里面加入registersdcard()函数。
private void registersdcard() {
if(sdcardReceiver==null)
{
sdcardReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_MEDIA_MOUNTED))
{
// Log.i("sdcard", "sdcard ----mount");
// AppConfigCommon.sdcardflag=true;
Intent intent_1=new Intent();
intent_1.setAction("com.spreadwin.sdcard.in");
context.sendBroadcast(intent_1);
File chumo_file=new File("/mnt/extsd/chumo.ini");
if(chumo_file.exists())
{
Intent chumointent=new Intent();
chumointent.setClassName("org.zeroxlab.util.tscal", "org.zeroxlab.util.tscal.TSCalibration");
chumointent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(chumointent);
}
}else if(intent.getAction().equals(Intent.ACTION_MEDIA_REMOVED)
||intent.getAction().equals(Intent.ACTION_MEDIA_UNMOUNTED)
||intent.getAction().equals(Intent.ACTION_MEDIA_BAD_REMOVAL))
{
// Log.i("sdcard", "sdcard ----unmount");
// AppConfigCommon.sdcardflag=false;
Intent intent_2=new Intent();
intent_2.setAction("com.spreadwin.sdcard.out");
context.sendBroadcast(intent_2);
}
}
};
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);
filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
filter.addAction(Intent.ACTION_MEDIA_REMOVED);
filter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
filter.addDataScheme("file");
registerReceiver(sdcardReceiver, filter);
}
}
7.在launcher中实现插拔T卡时,进行安装卸载,其实有一个类叫LauncherModel.java,他是继续
@Override
public void onReceive(Context context, Intent intent) {
if (DEBUG_LOADERS) Log.d(TAG, "onReceive intent=" + intent);
final String action = intent.getAction();
if (Intent.ACTION_PACKAGE_CHANGED.equals(action)
|| Intent.ACTION_PACKAGE_REMOVED.equals(action)
|| Intent.ACTION_PACKAGE_ADDED.equals(action)) {
final String packageName = intent.getData().getSchemeSpecificPart();
final boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);
int op = PackageUpdatedTask.OP_NONE;
if (packageName == null || packageName.length() == 0) {
// they sent us a bad intent
return;
}
if (Intent.ACTION_PACKAGE_CHANGED.equals(action)) {
op = PackageUpdatedTask.OP_UPDATE;
} else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) {
if (!replacing) {
op = PackageUpdatedTask.OP_REMOVE;
}
// else, we are replacing the package, so a PACKAGE_ADDED will be sent
// later, we will update the package at this time
} else if (Intent.ACTION_PACKAGE_ADDED.equals(action)) {
if (!replacing) {
op = PackageUpdatedTask.OP_ADD;
} else {
op = PackageUpdatedTask.OP_UPDATE;
}
}
if (op != PackageUpdatedTask.OP_NONE) {
enqueuePackageUpdated(new PackageUpdatedTask(op, new String[] { packageName }));
}
}
一下部分就是接收到了第6条中发过来的广播。
else if("com.spreadwin.sdcard.in".equals(action)||"com.spreadwin.sdcard.out".equals(action))
{
final String packagename2="com.spreadwin.s.test";
final String packagename3="com.spreadwin.factorytest.JH";
int op = PackageUpdatedTask.OP_NONE;
if ("com.spreadwin.sdcard.in".equals(action)) {
op = PackageUpdatedTask.OP_ADD;
// Log.i("out", "com.spreadwin.sdcard.in");
} else if ("com.spreadwin.sdcard.out".equals(action)) {
// Log.i("out", "com.spreadwin.sdcard.out");
op = PackageUpdatedTask.OP_REMOVE;
}
// else, we are replacing the package, so a PACKAGE_ADDED will be sent
// later, we will update the package at this time
if (op != PackageUpdatedTask.OP_NONE) {
{
enqueuePackageUpdated(new PackageUpdatedTask(op, new String[] { packagename2,packagename3}));
}
}
}
........................省掉
}
内部类 private class PackageUpdatedTask implements Runnable ,在run()方法中进行安装和卸载操作
public void run() {
final Context context = mApp;
final String[] packages = mPackages;
final int N = packages.length;
switch (mOp) {
case OP_ADD:
for (int i=0; i<N; i++) {
if (DEBUG_LOADERS) Log.d(TAG, "mAllAppsList.addPackage " + packages[i]);
// mAllAppsList.addPackage(context, packages[i]);
tcardfile=new File("/mnt/extsd/setting.ini");
if(!tcardfile.exists())
{
// Log.i("yang", "tcardfile.exists---no add");
//判断tcardfile文件是否存在,不存在时,遇到这两个包就不进行加载,其他包仍然进行加载
for(int j=0;j<mAllAppsList.size()-1;j++)
{
if("com.spreadwin.factorytest.JH".equals(mAllAppsList.get(j).componentName.getPackageName())||
"com.spreadwin.s.test".equals(mAllAppsList.get(j).componentName.getPackageName()) )
{
continue;
}
else
{
mAllAppsList.addPackage(context, packages[i]);
continue;
}
}
}
//如果tcardfile文件存在,遇到这两个把就进行加载
else if(tcardfile.exists())
{
// Log.i("yang", "tcardfile.exists---add");
for(int j=0;j<mAllAppsList.size()-1;j++)
{
if("com.spreadwin.factorytest.JH".equals(mAllAppsList.get(j).componentName.getPackageName())||
"com.spreadwin.s.test".equals(mAllAppsList.get(j).componentName.getPackageName()) )
{
mAllAppsList.addPackage(context, packages[i]);
continue;
}
else
{
mAllAppsList.addPackage(context, packages[i]);
continue;
}
}
}
}
break;
case OP_UPDATE:
for (int i=0; i<N; i++) {
if (DEBUG_LOADERS) Log.d(TAG, "mAllAppsList.updatePackage " + packages[i]);
mAllAppsList.updatePackage(context, packages[i]);
}
break;
case OP_REMOVE:
case OP_UNAVAILABLE:
for (int i=0; i<N; i++) {
if (DEBUG_LOADERS) Log.d(TAG, "mAllAppsList.removePackage " + packages[i]);
if(packages[i].equals("com.android.camera"))
{
AppConfigCommon.cameraexits=false;
}
for(int j=0;j<mAllAppsList.size()-1;j++)
{
if("com.spreadwin.factorytest.JH".equals(mAllAppsList.get(j).componentName.getPackageName()))
{
mAllAppsList.removePackage(packages[i],1);
continue;
}
if("com.spreadwin.s.test".equals(mAllAppsList.get(j).componentName.getPackageName()))
{
mAllAppsList.removePackage(packages[i],1);
continue;
}
}
mAllAppsList.removePackage(packages[i]);
}
break;
}
。。。。。。。省掉
8.实现7之前要先在LauncherApplication.java中的oncreate()中加入这个launchermodle的注册