lấy tên ứng dụng từ tên gói


84

Tôi muốn lấy tên ứng dụng từ tên gói ứng dụng. Ai đó làm ơn chỉ cho tôi cách tôi có thể lấy cái này.

public class AppInstalledListener extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        String action = intent.getAction();
        if(action.equals("android.intent.action.PACKAGE_ADDED")){
            Logger.debug("DATA:"+intent.getData().toString());
        }
        if(action.equals("android.intent.action.PACKAGE_REMOVED")){
            Logger.debug("DATA:"+intent.getData().toString());
        }
        if(action.equals("android.intent.action.PACKAGE_REPLACED")){
            Logger.debug("DATA:"+intent.getData().toString());
        }
    }
}

Câu trả lời:


196

Bạn có thể sử dụng PackageManagerlớp để lấy ApplicationInfo:

final PackageManager pm = getApplicationContext().getPackageManager();
ApplicationInfo ai;
try {
    ai = pm.getApplicationInfo( this.getPackageName(), 0);
} catch (final NameNotFoundException e) {
    ai = null;
}
final String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)");

Điều này sẽ trả về tên ứng dụng như được xác định trong <application>thẻ của tệp kê khai.


1
thật hoàn hảo. Đã tìm kiếm nó trong nhiều giờ, cảm ơn Xion. : D
drulabs

3
nó trả lại cho tôi không biết mọi lúc tôi alrady có tên gói chỉ muốn biết tên từ tên gói
nida 12/02/15

Điều này không hoạt động khi tôi sử dụng điều này trong bộ thu toàn cầu
Ziv Kesten

bạn không thể nhận được applicationInfo của một gói sau PACKAGE_REMOVED.
John61590,

hoàn hảo .. chỉ cần sao chép dán .. hoàn thành công việc. cảm ơn bạn.
ABHIMANGAL MS

37

Thử đi

final String packageName = "my.application.package"
PackageManager packageManager= getApplicationContext().getPackageManager();
String appName = (String) packageManager.getApplicationLabel(packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA));

và thay thế packageNamebằng tên đầy đủ gói của bạn.

bạn có thể lấy packageName bằng mContext.getPackageName()where mContext = yourActivityName.thischo Activity và getActivity () cho phân mảnh.


15
 public static String getAppNameFromPkgName(Context context, String Packagename) {
    try {
        PackageManager packageManager = context.getPackageManager();
        ApplicationInfo info = packageManager.getApplicationInfo(Packagename, PackageManager.GET_META_DATA);
        String appName = (String) packageManager.getApplicationLabel(info);
        return appName;
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
        return "";
    }
}

3

Có vẻ như bạn có thể nhận được sự kiện gói mới được thêm vào sau đó một khái niệm rất đơn giản để có được tất cả thông tin liên quan về gói đó như một thông tin như vậy là tên ứng dụng vì vậy đây là khái niệm

-> trình quản lý gói thiết bị của bạn có tất cả thông tin liên quan đến nó vì vậy chỉ cần tạo một đối tượng của nó, nó sẽ cung cấp cho bạn tất cả thông tin liên quan đến tên gói.

-> Bạn cũng nên nhớ rằng mục đích cung cấp cho bạn "package: real_package_name" vì vậy trước tiên bạn phải lấy tên thật trước bằng cách tràn (tôi đã sử dụng) hoặc bằng bất kỳ triển khai đơn giản nào khác của Chuỗi

-> Đây là mã hy vọng bạn sẽ có được những gì bạn muốn Tôi cũng cung cấp thông tin về cách bạn có thể lấy tên ứng dụng, biểu tượng ứng dụng, phiên bản ứng dụng, mã phiên bản ứng dụng, v.v.

    public class NewAppReciver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
    if(intent.getAction().equals("android.intent.action.PACKAGE_ADDED")){
    String[] a=intent.getData().toString().split(":");
    String packageName=a[a.length-1];

    List<PackageInfo> packageInfoList =          context.getPackageManager().getInstalledPackages(0);
    for (int i = 0; i < packageInfoList.size(); i++) {
        PackageInfo packageInfo = packageInfoList.get(i);
        if(packageInfo.packageName.equals(packageName)){
            String appName = packageInfo.applicationInfo.loadLabel(context.getPackageManager()).toString();
            String appVersion = packageInfo.versionName;
            int appVerCode = packageInfo.versionCode;
            Drawable app_icon = packageInfo.applicationInfo.loadIcon(context.getPackageManager());
             }
         }
      }
   }    
}

Nhưng tại thời điểm Uninstall ứng dụng bạn chỉ có thể lấy tên gói như khi Un cài đặt mọi thông tin khác đều bị hệ thống gỡ bỏ.


Ý định.getData (). toString () không phải là cách để thực hiện, dữ liệu trong ý định được cấu trúc.
Olaf Achthoven vào

-2
PackageManager pm = getPackageManager();

IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.MAIN");
filter.addCategory("android.intent.category.HOME");
filter.addCategory("android.intent.category.DEFAULT");

Context context = getApplicationContext();
ComponentName component = new ComponentName(context.getPackageName(), TestReplaceHomeAppActivity.class.getName());

ComponentName[] components = new ComponentName[] {new ComponentName("com.android.launcher", "com.android.launcher.Launcher"), component};

pm.clearPackagePreferredActivities("com.android.launcher");
pm.addPreferredActivity(filter, IntentFilter.MATCH_CATEGORY_EMPTY, components, component);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.