首页 > 编程技术 > android

android检测包名和类名是否存在的方法

发布时间:2016-9-20 19:59

本文章来给大家介绍android检测包名和类名是否存在的方法,有需要了解的同学可进入参考参考。

1.对包名的判断,异常则说明不存在:

 代码如下 复制代码


  try { 
    PackageManager pm = getPackageManager();
    pm.getPackageInfo("com.org", PackageManager.GET_ACTIVITIES);
  } catch (NameNotFoundException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  }


2.对类名的判断,异常则说明不存在:

 代码如下 复制代码


  try {
  Class.forName("com.org.MainActivity");
} catch (ClassNotFoundException e) {
  // TODO Auto-generated catch block
    return;
}

Android中使用ant混淆编译方法有需要的同学可参考参考。

1.拿一个普通项目来说,首先为它加上ant编译功能。

 代码如下 复制代码

android update project --name project_name -t 3 -p D:/temp/project_name

此时会在项目根目录自动生成一个名为build.xml的ant脚本。上面的project_name是你的项目名称。

2.加入混淆功能

就第一步来说,在命令行中已经可以使用ant进行编译了。因为Android中是这样的,在输入命令ant debug的时候会自动调用D:/android-sdk-windows/tools/ant/main_rules.xml目录下的规则文件,所以无需自己写ant脚本了。既然它会调用默认的规则文件(默认文件没有加入混淆功能),那么我们想要混淆,直接在这个规则文件上修改就好了。在名为-dex的target后加入一个target,代码如下:

 代码如下 复制代码
1 <target name="optimize" depends="compile">    <jar basedir="${out.classes.absolute.dir}" destfile="temp.jar">    <java jar="D:/android-sdk-windows/tools/proguard/lib/proguard.jar" fork="true" failonerror="true"><jvmarg value="-Dmaximum.inlined.code.length=32">        <arg value="-injars temp.jar"><arg value="-outjars optimized.jar"><arg value="-libraryjars '${android.jar}'"><!-- value="-libraryjars ${library-jar}/some_lib_used.jar"> --><arg value="-dontpreverify"><arg value="-dontoptimize"><arg value="-dontusemixedcaseclassnames"><arg value="-repackageclasses"><arg value="-allowaccessmodification">        <arg value="-keep public class * extends android.app.Activity">          <arg value="-keep public class * extends android.app.Service">          <arg value="-keep public class * extends android.content.BroadcastReceiver">          <arg value="-keep public class * extends android.content.ContentProvider">          <arg value="-keep public class * extends android.view.View">         <arg value="-optimizationpasses 1">        <arg value="-verbose"><arg value="-dontskipnonpubliclibraryclasses"><arg value="-dontskipnonpubliclibraryclassmembers"><arg value="-ignorewarning">    </arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></!--></arg></arg></arg></jvmarg></java>    <delete file="temp.jar">    <delete dir="${out.classes.absolute.dir}">    <mkdir dir="${out.classes.absolute.dir}">    <unzip" width=100% src="optimized.jar" mce_src="optimized.jar" dest="${out.classes.absolute.dir}">    <delete file="optimized.jar"></delete></unzip></mkdir></delete></delete></jar></target>

修改上面代码涉及到路径的地方,改成本地对应的路径。<arg value="-ignorewarning"/>这一行是自己加入的,意思是忽略警告。

接着在名为-dex的target中进行一个混淆依赖,加入后代码如下:

 代码如下 复制代码
1 <target name="-dex" depends="compile, optimize, -post-compile, -obfuscate" unless="do.not.compile">        <if condition="${manifest.hasCode}">            <then>                <dex-helper>            </dex-helper></then>            <else>                <echo>hasCode = false. Skipping...</echo>            </else>        </if></target>

实际上加入的只是optimize,意思是这个target依赖target optimize。

3.开始编译

可以在命令行中编译了,编译后把class.dex进行反编译,可以看出来混淆成功。不知道为什么在我们的项目中反编译不回来,但是可以保证混淆是成功了。我拿过其他例子项目编译后反编译过,可以看下图:(不好意思,注册一星期之内不能上传图片)

在安卓开发时我碰到一个问题就是需要实现全屏,但又需要我们来判断出用户是使用了全屏或非全屏了,下面我分别找了两段代码,大家可参考。

先来看一个android屏幕全屏实现代码

 代码如下 复制代码

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
setContentView(R.layout.newslists);
newsListLayout = findViewById(R.id.newslistlayout);
newsListLayout.setBackgroundColor(Color.MAGENTA);

newsNameList = (ListView) findViewById(R.id.newsnamelist);
model = new Model(0, 6);
nameListAdapter = new NewsNameListAdapter(this, model);
newsNameList.setAdapter(nameListAdapter);

showPage = (TextView) findViewById(R.id.newslistshowpage);
updatePage(model.getIndex());
}

现在我们还可以来判断是全屏或非全屏

 代码如下 复制代码

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);      
       
        int v = this.getWindow().getAttributes().flags;
        // 全屏 66816 - 非全屏 65792
        if(v != 66816){//非全屏
         this.getWindow().setFlags(
                    WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }else{//取消全屏
         this.getWindow().clearFlags(
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }

    }  

本文章来给大家但要在Android开发中实现获取本机电话号码的实现,这里我们必须是通过SDK来获取哦,有需要了解的朋友可参考。

注:根据Android的安全机制,在使用TelephonyManager时,必须在AndroidManifest.xml中添加
name="READ_PHONE_STATE" /> 否则无法获得系统的许可。

Android开发平台中,可通过TelephonyManager 获取本机号码。

 代码如下 复制代码

private String getPhoneNumber(){
TelephonyManager mTelephonyMgr;
mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
return mTelephonyMgr.getLine1Number();
}

或这样写

 代码如下 复制代码
TelephonyManager phoneMgr=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
txtPhoneNumber.setText(phoneMgr.getLine1Number()); //txtPhoneNumber

是一个EditText 用于显示手机号

本文章来给大家介绍两段Android实现图片循环播放程序代码,有需要了解的朋友可进入参考。

SDK后个不错的实例

 代码如下 复制代码

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleWithFixedDelay(new runner(), 0, 1, TimeUnit.SECONDS);
//或者用scheduler.scheduleAtFixedRate(new runner(),0,1, TimeUnit.SECONDS);

//接着我们要实现Runnable方法,也就是准时变动现在播放图片的ID

public class runner implements Runnable
{
public void run()

  {

// TODO Auto-generated method stub
currIndex = (currIndex+1)%bitmapId.length;
bofang.this.postInvalidate();//刷新屏幕
}
}

Gallery 中的图片循环播放图片的实现

主要讲的就是一个循环播放图片的实现,我们这里主要还是用到了arraylisy,利用arraylist来控制里面的图片位置,这样就相对简单和容易控制循环了,我们只要牵扯到自定义的arrayadapter还是要注意继承getview在里面设置一个变量参数,就可以来实现变化,这才是最关键的。我们来看看代码吧:

 代码如下 复制代码
public class Splash extends Activity {
ArrayList objects = new ArrayList();
Gallery g;
int i = 0;
@Override
public void onCreate(Bundle icicle) { super.onCreate(icicle);
setContentView(R.layout.photos);
g = (Gallery) findViewById(R.id.gallery);
objects.add(getResources().getDrawable(R.drawable.icon));
objects.add(getResources().getDrawable(R.drawable.icon));
objects.add(getResources().getDrawable(R.drawable.icon));
objects.add(getResources().getDrawable(R.drawable.icon));
objects.add(getResources().getDrawable(R.drawable.icon));
objects.add(getResources().getDrawable(R.drawable.icon));
g.setAdapter(new CustomAdapter(this, objects));
g.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView arg0, View arg1,
int arg2, long arg3) {
Log.i(“”, “selected ” + arg2);
}
@Override
public void onNothingSelected(AdapterView arg0) {}
});
}
@Override
public void onBackPressed() {
g.setSelection(i++);
}
private class CustomAdapter extends BaseAdapter {
private Context mCtx;
private List objects;
public int getCount() {
return this.objects.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public CustomAdapter(Context context, ArrayList objects) {
super();
mCtx = context;
this.objects = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView row = (ImageView) convertView;
if (row == null) {
row = new ImageView(mCtx);
row.setBackgroundDrawable(objects.get(position));
}
return row;
}
}
}

viewpager 循环播放图片 本站有很多种例子了,这里就不介绍了

标签:[!--infotagslink--]

您可能感兴趣的文章: