2011-06-04 13 views
14

Yüklü uygulamaları paket yöneticisi ile listelediğim bir uygulama üzerinde çalışıyorum. Tıklanan öğenin paket adını alabilirim, ancak pakete dayalı ayrıntılar ekranını başlatmak istiyorum. Örneğin, listede Dolphin Browser seçildiyse, aşağıdaki görüntüyü görürsünüz. Bunu nasıl yapabilirim? "PaketiAndroid piyasaya sürülüyor uygulamalar detay sayfası

startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:your.package.here"))); 

Ve değiştirin:

enter image description here

Nihai çözüm 7

final int apiLevel = Build.VERSION.SDK_INT; 
Intent intent = new Intent(); 
if (apiLevel >= 9) { 
    //TODO get working on gb 
    //Toast.makeText(SDMove.this, "Gingerbread Not Currently Supported", Toast.LENGTH_LONG).show(); 
    startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, 
          Uri.parse("package:" + pli.pkg.packageName))); 
} else { 
    final String appPkgName = (apiLevel == 8 ? "pkg" : "com.android.settings.ApplicationPkgName"); 
    intent.setAction(Intent.ACTION_VIEW); 
    intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails"); 
    intent.putExtra(appPkgName, pli.pkg.packageName); 
    startActivity(intent); 
} 

cevap

10

Tüm yüklü uygulamaları listeleyen ListActivity ile tam olarak çalışan bir uygulama. Bir paket adını tıkladığınızda, uygulama ayrıntılarını açar.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <ListView 
     android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 
    <TextView android:id="@android:id/empty" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="No apps installed"/> 
</LinearLayout> 

ve simple.xml: senin düzen klasöründe

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
</TextView> 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Intent for getting installed apps. 
    Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); 

    // Get installed apps 
    List<ResolveInfo> appList = this.getPackageManager().queryIntentActivities(mainIntent, 0); 

    // Make new list for package names and fill the list. 
    List<String> packageNameList = new ArrayList<String>(); 
    for (ResolveInfo resolveInfo : appList) { 
     packageNameList.add(resolveInfo.activityInfo.packageName); 
    } 

    // Set the list adapter. 
    setListAdapter(new ArrayAdapter<String>(this, R.layout.simple, packageNameList)); 
} 

public void onListItemClick(ListView l, View v, int position, long id) 
{ 
    // Get the TextView that was clicked. 
    TextView view = (TextView)v; 

    // Get the text from the TextView. 
    String packageName = (String)view.getText(); 

    // Open AppDetails for the selected package. 
    showInstalledAppDetails(packageName); 
} 

public void showInstalledAppDetails(String packageName) { 
    final int apiLevel = Build.VERSION.SDK_INT; 
    Intent intent = new Intent(); 

    if (apiLevel >= 9) { 
     intent.setAction(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); 
     intent.setData(Uri.parse("package:" + packageName)); 
    } else { 
     final String appPkgName = (apiLevel == 8 ? "pkg" : "com.android.settings.ApplicationPkgName"); 

     intent.setAction(Intent.ACTION_VIEW); 
     intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails"); 
     intent.putExtra(appPkgName, packageName); 
    } 

    // Start Activity 
    startActivity(intent); 
} 

main.xml sahip unutmayın. Umarım bu işe yarıyor :)

+0

Bunun için bir izin veya bir şey var mı? Denemeye devam ettiğim herhangi bir şeyle kapatmaya çalışıyorum sadece yönteminizi çalıştırarak masa başı gibi basit bir şeye ayarladım. Ben senin yöntemini koydu sonra showInstalledAppDetails ("com.android.deskclock") koştu; ama ben ne çalışıyorum olursa olsun gücü kapatır ben proje elite gb bir köklü d1 üzerinde çalışan ama app benim min sdk olarak 2.2 ayarladık ama hiçbir fikrim neden kapatmak her zaman yakın – GFlam

+0

Benim 2.2 emülatörü üzerinde çalıştırmak var ama "com.android.deskclock" ı denediğimde "paketi alırken istisna: com.android.deskclock" aldım. Emülatörde çalışan "com.android.settings" gibi başka bir uygulamayı deneyin. Paket adının doğru olması çok önemlidir :) Eğer işe yaramazsanız, stacktrace'i LogCat'dan gönderebilirsiniz. – khellang

+0

Yea, bu yöntem kuvveti kapandığı hedef olarak 2.3 ile yeni bir proje yaptı ama aşağıdaki kod, 2.3 dediğiniz gibi çalıştı ama 2.2'de bu uygulamayı yazdığımdan beri 2.2'de buna ihtiyacım var. Neyse gerçekten orada bir şey görmedim ikinci yılında logcat gönderme ama belki – GFlam

9

bu deneyin Gingerbread API düzeyinde 9 olarak hedef belirlemek ve API seviyesi olarak da min ayarlamak : your.package.here "görmek istediğiniz gerçek paketle ...

+0

Bu sadece 2.3 bir uygulama üzerinde çalışan 2.3 sadece ... – khellang

+0

bunun için bir şey? – GFlam

+0

Bu cevap çok daha iyisi :) –