Android 获得一个应用的权限

  今天也许是一个值得高兴的日子,但是我却不知道有什么值得高兴的,但是室友们却在打麻将庆祝,好吧。我这是找个借口表达室友们打麻将的不满,吐槽完毕,开始码字,首先,先链接一个网址http://blog.youkuaiyun.com/stonecao/article/details/6425019 这里讲的是关于aidl这个玩意的解释,请看官们耐心的去看看,看完之后,就能对aidl有个初步了解,从而开始正题

在开始前,还有一个小小的要求,放心,不是要鱼丸什么的,只是要求各位看官去看看关于packmanager的简单介绍,我就不累赘了,大家自己去百度百度吧。

接下来开始讲讲菜逼的我是怎么做的,首先,自己定义一个class,用来装要用的数据,我就直接上代码了


public class Appinfo implements Serializable{
    private String packageName;//包名
    private boolean isSystemApp;//是不是系统的app
    private long cachesize;
    private long appsize;
    private long datasize;
    private Drawable icon;//图片
    private String appName;//显示的名字,比如微信
    public Drawable getIcon() {
        return icon;
    }
    public void setIcon(Drawable icon) {
        this.icon = icon;
    }
    public String getAppName() {
        return appName;
    }
    public void setAppName(String appName) {
        this.appName = appName;
    }
    public String getPackageName() {
        return packageName;
    }
    public void setPackageName(String packageName) {
        this.packageName = packageName;
    }
    public boolean isSystemApp() {
        return isSystemApp;
    }
    public void setSystemApp(boolean isSystemApp) {
        this.isSystemApp = isSystemApp;
    }
    public long getCachesize() {
        return cachesize;
    }
    public void setCachesize(long cachesize) {
        this.cachesize = cachesize;
    }
    public long getAppsize() {
        return appsize;
    }
    public void setAppsize(long appsize) {
        this.appsize = appsize;
    }
    public long getDatasize() {
        return datasize;
    }
    public void setDatasize(long datasize) {
        this.datasize = datasize;
    }

}

在这里,大家可以不用实现序列化这个接口的,我是因为有自己用途,在我定义的东西里,醉重要的是一个packname;顾名思义这是包名;如“com.example.a”这种格式的字符串;按照我的做法,用packmanager后得到了packname后。开始正题了

先上一段百度找到的代码:

    Class clazz = getClass().getClassLoader().loadClass("android.widget.AppSecurityPermissions");
            Constructor constructor = clazz.getConstructor(new Class[] { Context.class, String.class });
            Object object = constructor.newInstance(new Object[] { this, name });
            Method method = clazz.getDeclaredMethod("getPermissionsView", new Class[] {});
            View view = (View) method.invoke(object, new Object[] {});

这段代码看下就可以知道是返回一个view的,所以最后得靠自己把它加到布局文件里面,这段代码的作用,是通过

name这个包名以及java的反射机制来获得视图(对于java的反射机制,欢迎大家去了解了解,因为android有时也会用到反射机制),所以不用改太多的代码,只需要改成自己的包名,还有加上try--catch;在这里推荐各位使用代码动态的控制布局,这点还是上点代码吧

public class ShowApp extends Activity {
    android.widget.LinearLayout.LayoutParams layoutParams1;
    String name;
    long datasize;
    long cachesize;
    GetPermission getpermission;
    View v;
    LinearLayout relativelayout;
    TextView textview1, textview2, textview3;

    @Override

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try {
            layoutParams1 = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            relativelayout = new LinearLayout(this);
            relativelayout.setOrientation(LinearLayout.VERTICAL);
            relativelayout.setGravity(Gravity.VERTICAL_GRAVITY_MASK);        
            textview1 = new TextView(this);
            textview2 = new TextView(this);
            textview3 = new TextView(this);
            name = getIntent().getStringExtra("list");
            cachesize = getIntent().getLongExtra("cachesize", 0);
            datasize = getIntent().getLongExtra("datasize", 0);
            textview1.setText("" + cachesize);
            textview2.setText("" + datasize);
            Class clazz = getClass().getClassLoader().loadClass("android.widget.AppSecurityPermissions");
            Constructor constructor = clazz.getConstructor(new Class[] { Context.class, String.class });
            Object object = constructor.newInstance(new Object[] { this, name });
            Method method = clazz.getDeclaredMethod("getPermissionsView", new Class[] {});
            View view = (View) method.invoke(object, new Object[] {});
            relativelayout.addView(textview1, layoutParams1);

            relativelayout.addView(textview2, layoutParams1);
            relativelayout.addView(view);

            setContentView(relativelayout);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在这里基本告诫,最后上上效果图,写的有点啰嗦,是为了照顾一些跟我一样的菜鸟,希望大家不要喷,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值