2017-04-18 101 views
0

請幫助...我是新來的android開發...我有我的問題搜索,但沒有得到任何解決方案... 我也試過: Didn't understand it如何獲得安裝的應用程序的權限

我已經得到所有已安裝的應用程序的列表,所以現在我想表現出一個TextView每個應用程序的所有權限,當點擊它

列出所有已安裝的應用程序:

主要活動:

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ListView userInstalledApps = (ListView)findViewById(R.id.installed_app_list); 

    List<AppList> installedApps = getInstalledApps(); 
    AppAdapter installedAppAdapter = new AppAdapter(MainActivity.this, installedApps); 
    userInstalledApps.setAdapter(installedAppAdapter); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

private List<AppList> getInstalledApps() { 
    List<AppList> res = new ArrayList<AppList>(); 
    List<PackageInfo> packs = getPackageManager().getInstalledPackages(0); 
    for (int i = 0; i < packs.size(); i++) { 
     PackageInfo p = packs.get(i); 
     if ((isSystemPackage(p) == false)) { 
      String appName = p.applicationInfo.loadLabel(getPackageManager()).toString(); 
      Drawable icon = p.applicationInfo.loadIcon(getPackageManager()); 
      res.add(new AppList(appName, icon)); 
     } 
    } 
    return res; 
} 

private boolean isSystemPackage(PackageInfo pkgInfo) { 
    return ((pkgInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) ? true : false; 
} 


} 

APPLIST類別:

public class AppList { 

private String name; 
Drawable icon; 

public AppList(String name, Drawable icon) { 
    this.name = name; 
    this.icon = icon; 
} 

public String getName() { 
    return name; 
} 

public Drawable getIcon() { 
    return icon; 
} 

}

AppAdapter:

public class AppAdapter extends BaseAdapter { 

private LayoutInflater layoutInflater; 
private List<AppList> listStorage; 

public AppAdapter(Context context, List<AppList> customizedListView) { 
    layoutInflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    listStorage = customizedListView; 
} 

@Override 
public int getCount() { 
    return listStorage.size(); 
} 

@Override 
public Object getItem(int position) { 
    return position; 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder listViewHolder; 
    if(convertView == null){ 
     listViewHolder = new ViewHolder(); 
     convertView = layoutInflater.inflate(R.layout.installed_app_list, parent, false); 

     listViewHolder.textInListView = (TextView)convertView.findViewById(R.id.list_app_name); 
     listViewHolder.imageInListView = (ImageView)convertView.findViewById(R.id.app_icon); 
     convertView.setTag(listViewHolder); 
    }else{ 
     listViewHolder = (ViewHolder)convertView.getTag(); 
    } 
    listViewHolder.textInListView.setText(listStorage.get(position).getName()); 
    listViewHolder.imageInListView.setImageDrawable(listStorage.get(position).getIcon()); 

    return convertView; 
} 

static class ViewHolder{ 

    TextView textInListView; 
    ImageView imageInListView; 
} 
} 

activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#eceaea"> 

<ListView 
    android:id="@+id/installed_app_list" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_alignParentTop="true" 
    android:scrollbars="none" /> 

    </RelativeLayout> 

installed_apps_list.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<ImageView 
    android:id="@+id/app_icon" 
    android:layout_width="48dp" 
    android:layout_height="48dp" 
    android:contentDescription="@string/hello_world" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginLeft="16dp" 
    android:layout_marginTop="16dp" 
    android:paddingBottom="8dp"/> 

<TextView 
    android:id="@+id/list_app_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textStyle="bold" 
    android:textSize="16dp" 
    android:textColor="#000000" 
    android:layout_toRightOf="@+id/app_icon" 
    android:layout_alignTop="@+id/app_icon" 
    android:layout_marginLeft="16dp" 
    android:layout_marginTop="2dp" 
    android:text="@string/hello_world"/> 

    </RelativeLayout> 

這是我做了什麼....我的意思是我得到的所有安裝的應用程序現在我想 每個應用點擊任何列出的應用程序時的權限....

+0

你在清單採取必要的權限? –

+0

不,我沒有..... – Baadsha

+0

你得到安裝包嗎? –

回答

0

您需要檢索PackageName以及Permissions如下所示。

PackageManager pm = getPackageManager(); 
List<ApplicationInfo> packages =pm.getInstalledApplications(PackageManager.GET_META_DATA); 

for (ApplicationInfo applicationInfo : packages) 
{ 
    Log.d("test", "App: " + applicationInfo.name + " Package: " + applicationInfo.packageName); 

    try 
    { 
     PackageInfo packageInfo = pm.getPackageInfo(applicationInfo.packageName, PackageManager.GET_PERMISSIONS); 

     //Get Permissions 
     String[] requestedPermissions = packageInfo.requestedPermissions; 

     if(requestedPermissions != null) 
     { 
     for (int i = 0; i < requestedPermissions.length; i++) 
     { 
      Log.d("test", requestedPermissions[i]); 
     } 
     } 
    } 
    catch (NameNotFoundException e) 
    { 
     e.printStackTrace(); 
    } 
} 

添加field許可,您的情態類AppList和填充它。在你的列表視圖userInstalledApps

添加監聽器這樣

userInstalledApps.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
     { 
      AppList appList = installedAppAdapter.getItem(position); 
      String permissions = appList.getPermission(); 
      //Do whatever you want with permissions here. 
     } 
    }); 

請通過這段代碼

@Override 
public AppList getItem(int position) { 
    return listStorage.get(position); 
} 

如下代碼您需要檢查使用改正你的AppAdapter類替代各自的代碼與此

private List<AppList> getInstalledApps() 
{ 
    List<AppList> res = new ArrayList<AppList>(); 
    List<PackageInfo> packs = getPackageManager().getInstalledPackages(0); 
    for (int i = 0; i < packs.size(); i++) { 
     PackageInfo p = packs.get(i); 
     if ((isSystemPackage(p) == false)) 
     { 
      String appName = p.applicationInfo.loadLabel(getPackageManager()).toString(); 
      Drawable icon = p.applicationInfo.loadIcon(getPackageManager()); 

      try { 
       PackageInfo packageInfo = getPackageManager().getPackageInfo(p.applicationInfo.packageName, PackageManager.GET_PERMISSIONS); 

       //Get Permissions 
       String[] requestedPermissions = packageInfo.requestedPermissions; 
       StringBuilder sbPermissionSt = new StringBuilder(); 

       if(requestedPermissions != null) 
       { 
        for (int j = 0; j < requestedPermissions.length; j++) 
        { 
         Log.d("test", requestedPermissions[j]); 
         sbPermissionSt.append(requestedPermissions[j]+","); 
        } 
       } 

       res.add(new AppList(appName, icon, sbPermissionSt.toString())); 
      } 
      catch (PackageManager.NameNotFoundException nme) 
      { 
       nme.printStackTrace(); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    } 
    return res; 
} 

你的AppList。java的

public class AppList 
{ 
private String name; 
Drawable icon; 
private String permissions; 

public AppList(String name, Drawable icon, String permissions) 
{ 
    this.name = name; 
    this.icon = icon; 
    this.permissions = permissions; 
} 

public String getName() { 
    return name; 
} 

public Drawable getIcon() { 
    return icon; 
} 

public String getPermissions() { 
    return permissions; 
} 

public void setPermissions(String permissions) { 
    this.permissions = permissions; 
} 

}

添加該代碼設置適配器將列表視圖後(附聽衆)

userInstalledApps.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
     { 
      AppList appList = installedAppAdapter.getItem(position); 
      String permissions = appList.getPermissions(); 
      Toast.makeText(MainActivity.this, permissions, Toast.LENGTH_LONG).show(); 
     } 
    }); 
+0

字段權限是什麼意思 – Baadsha

+0

我在向你的AppList類中添加一個屬性'String permissions;'並創建它''setter/getter'來保存安裝的應用程序權限,比如'private String name; Drawable icon;' – Geek

+0

請解釋一下這個........如何根據我的應用實現?...... PackageManager pm = getPackageManager(); List packages = pm.getInstalledApplications(PackageManager.GET_META_DATA); (ApplicationInfo applicationInfo:packages) { 。 。 。 。 – Baadsha

相關問題