package cn.edu.buaa.act.sdp.malwaredetector.activity; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ActivityInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PermissionGroupInfo; import android.content.pm.PermissionInfo; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import java.util.List; import cn.edu.buaa.act.sdp.malwaredetector.Constant; import cn.edu.buaa.act.sdp.malwaredetector.R; import cn.edu.buaa.act.sdp.malwaredetector.entity.PackageInfoWithSize; import cn.edu.buaa.act.sdp.malwaredetector.util.AppLog; import cn.edu.buaa.act.sdp.malwaredetector.util.AppManager; public class AppDetailedInforActivity extends ActionBarActivity implements View.OnClickListener { private ImageView ivAppIcon; private TextView tvAppName; private TextView tvAppVersion; private TextView tvAppPermission; private TextView tvAppComponent; private TextView tvAppFilter; private Button btnLookXml; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_app_detailed_infor); initView(); int position = getIntent().getIntExtra("position", 0); List<PackageInfoWithSize> list = AppManager.getAllInstalledApps(this); PackageInfoWithSize app = list.get(position); ivAppIcon.setImageDrawable(app.getIcon()); tvAppName.setText(app.getAppName()); tvAppVersion.setText("版本 " + app.getVersion()); AppLog.log(Constant.TAG, app.getAppName(), 'd', "static-log.txt"); // TODO get permission group // get the list of permissions StringBuilder permissionName = new StringBuilder(); try { PackageManager pm = getPackageManager(); PackageInfo info = pm.getPackageInfo(app.getPackageName(), PackageManager.GET_PERMISSIONS); String[] requestPermissions = info.requestedPermissions; if (requestPermissions != null) { for (String per : requestPermissions) { permissionName.append(per + "\n"); try { PermissionInfo permissionInfo = pm.getPermissionInfo(per, PackageManager.GET_META_DATA); if (permissionInfo.group != null) { PermissionGroupInfo groupInfo = pm.getPermissionGroupInfo(permissionInfo.group, PackageManager.GET_META_DATA); //permissionName.append(groupInfo.loadLabel(pm).toString() + "\n"); //permissionName.append(permissionInfo.loadLabel(pm).toString() + "\n"); // permissionName.append(permissionInfo.loadDescription(pm).toString() + "\n\n"); } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } } } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } // get the list of components StringBuilder componetNames = new StringBuilder(); try { PackageManager pm = getPackageManager(); PackageInfo info = pm.getPackageInfo(app.getPackageName(), PackageManager.GET_ACTIVITIES); ActivityInfo[] activities = info.activities; if (activities != null) { for (ActivityInfo ainfo : activities) { componetNames.append(ainfo.name + "\n"); } } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } // try { PackageManager pm = getPackageManager(); PackageInfo info = pm.getPackageInfo(app.getPackageName(), PackageManager.GET_SERVICES); ServiceInfo[] serviceInfos = info.services; if (serviceInfos != null) { for (ServiceInfo serviceInfo : serviceInfos) { componetNames.append(serviceInfo.name + "\n"); } } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } // get the list of filters StringBuilder filterNames = new StringBuilder(); PackageManager pm = getPackageManager(); Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.addCategory(Intent.CATEGORY_BROWSABLE); intent.setData(Uri.parse("http://www.google.com")); List<ResolveInfo> infos = pm.queryIntentActivities(intent, PackageManager.GET_RESOLVED_FILTER); if (infos != null) { for (ResolveInfo info : infos) { ActivityInfo ai = info.activityInfo; IntentFilter filter = info.filter; if (filter != null) { filterNames.append(filter.toString() + "\n"); } } } tvAppPermission.setText(permissionName); tvAppComponent.setText(componetNames); tvAppFilter.setText(filterNames); AppLog.log(Constant.TAG, permissionName.toString(), 'd', "static-log.txt"); AppLog.log(Constant.TAG, componetNames.toString(), 'd', "static-log.txt"); AppLog.log(Constant.TAG, filterNames.toString(), 'd', "static-log.txt"); btnLookXml.setOnClickListener(this); } private void initView() { ivAppIcon = (ImageView) findViewById(R.id.app_icon); tvAppName = (TextView) findViewById(R.id.app_name); tvAppVersion = (TextView) findViewById(R.id.app_version); tvAppPermission = (TextView) findViewById(R.id.app_permission); tvAppComponent = (TextView) findViewById(R.id.app_component); tvAppFilter = (TextView) findViewById(R.id.app_filter); btnLookXml = (Button) findViewById(R.id.look_xml); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_app_detailed_infor, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } @Override public void onClick(View v) { switch(v.getId()) { case R.id.look_xml: break; } } }