Có thể bắt đầu "ứng dụng info" màn hình (có nghĩa là, Menu
→ Settings
→ Applications
→ Manage Applications
→ chọn bất kỳ ứng dụng) từ ứng dụng khác?Làm thế nào tôi có thể bắt đầu màn hình thông tin ứng dụng Android theo chương trình?
Trả lời
Trong Android 2.3, bạn có thể sử dụng startActivity()
trên ACTION_APPLICATION_DETAILS_SETTINGS
Intent
, với cách thích hợp Uri
, để hiển thị màn hình "quản lý" của ứng dụng. Tuy nhiên, điều này là mới đối với Android 2.3 - Tôi không biết cách thực hiện điều đó trong các phiên bản trước của Android.
startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_SETTINGS));
sẽ đưa bạn đến danh sách cài đặt/ứng dụng. Nếu bạn muốn mở một ứng dụng cụ thể, tôi nghĩ rằng trong 2.2 và dưới đây không có cách nào, vì vậy bạn sẽ cần phải đi một (không nhất thiết phải đề nghị, vì vô hiệu) cách:
final Intent i = new Intent("android.intent.action.VIEW");
i.setComponent(new ComponentName("com.android.settings","com.android.settings.InstalledAppDetails"));
i.putExtra(...); // need to figure out the correct extra, probably app package name
startActivity(i);
Nhưng lưu ý rằng đây là không được khuyến nghị vì nó không phải là API/ý định chính thức (bộ lọc) và do đó có thể thay đổi trong tương lai.
Trong phiên bản 2.2 trở xuống, không có API công khai mà bạn có thể truy cập. Nhưng bạn vẫn có thể bắt đầu hoạt động InstalledAppDetails cũng giống như ManageApplications. thấy here
// utility method used to start sub activity
private void startApplicationDetailsActivity() {
// Create intent to start new activity
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClass(this, InstalledAppDetails.class);
intent.putExtra(APP_PKG_NAME, mCurrentPkgName);
// start new activity to display extended information
startActivityForResult(intent, INSTALLED_APP_DETAILS);
}
Kết luận: bạn có thể bắt đầu "Thông tin ứng dụng" màn hình như thế này tôi đã viết:
private static final String SCHEME = "package";
private static final String APP_PKG_NAME_21 = "com.android.settings.ApplicationPkgName";
private static final String APP_PKG_NAME_22 = "pkg";
private static final String APP_DETAILS_PACKAGE_NAME = "com.android.settings";
private static final String APP_DETAILS_CLASS_NAME = "com.android.settings.InstalledAppDetails";
public static void showInstalledAppDetails(Context context, String packageName) {
Intent intent = new Intent();
final int apiLevel = Build.VERSION.SDK_INT;
if (apiLevel >= 9) { // above 2.3
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts(SCHEME, packageName, null);
intent.setData(uri);
} else { // below 2.3
final String appPkgName = (apiLevel == 8 ? APP_PKG_NAME_22
: APP_PKG_NAME_21);
intent.setAction(Intent.ACTION_VIEW);
intent.setClassName(APP_DETAILS_PACKAGE_NAME,
APP_DETAILS_CLASS_NAME);
intent.putExtra(appPkgName, packageName);
}
context.startActivity(intent);
}
cảm ơn bạn rất nhiều! điều này đã cứu tôi rất nhiều thời gian. nên bình luận "ở trên 2.3" được thay đổi thành "2.3 trở lên"? – kristianlm
hoạt động hoàn hảo cho mọi ứng dụng đã cài đặt. Tuy nhiên, nếu tôi cố gắng mở cài đặt của bất kỳ ứng dụng hệ thống nào, màn hình trống sẽ xuất hiện. –
Ngoài ra chúng ta cần thêm intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); trong cả hai câu lệnh. tức là nếu() {... ở đây ...} người khác {... ở đây ...} –
Từ API Level 9 (Android 2.3), bạn có thể bắt đầu một Intent với android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS. Như vậy:
packageName = "your.package.name.here"
try {
//Open the specific App Info page:
Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + packageName));
startActivity(intent);
} catch (ActivityNotFoundException e) {
//e.printStackTrace();
//Open the generic Apps page:
Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);
startActivity(intent);
}
Cũ câu hỏi, cải thiện câu trả lời:
/**
* <p>Intent to show an applications details page in (Settings) com.android.settings</p>
*
* @param context The context associated to the application
* @param packageName The package name of the application
* @return the intent to open the application info screen.
*/
public static Intent newAppDetailsIntent(Context context, String packageName) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("package:" + packageName));
return intent;
} else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.FROYO) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClassName("com.android.settings",
"com.android.settings.InstalledAppDetails");
intent.putExtra("pkg", packageName);
return intent;
}
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClassName("com.android.settings",
"com.android.settings.InstalledAppDetails");
intent.putExtra("com.android.settings.ApplicationPkgName", packageName);
return intent;
}
tôi đã sử dụng Paolo giải pháp để mở chi tiết Cài đặt ứng dụng trong SDK 23+ khi người dùng đã từ chối yêu cầu sự cho phép trong quá khứ và chọn tùy chọn "Không hỏi lại" trong hộp thoại hệ thống yêu cầu quyền.
Nhưng trong trường hợp này, tôi đã sử dụng phương thức getPackageName()
trực tiếp.
Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
- 1. Android chụp màn hình theo chương trình
- 2. Chụp màn hình android và tạo video theo chương trình
- 3. Bắt đầu chương trình trên màn hình thứ hai?
- 4. Trong Android, làm thế nào tôi có thể tắt màn hình một cách có lập trình?
- 5. Làm thế nào để có được màn hình DPI (linux, mac) theo chương trình?
- 6. Bật màn hình theo chương trình
- 7. Làm cách nào để bắt đầu một ứng dụng JNLP theo chương trình?
- 8. Bắt buộc ứng dụng Cocoa bắt đầu ở chế độ 32 bit theo chương trình
- 9. Java Swing; Tôi làm cách nào để chương trình bắt đầu ở bên phải của màn hình?
- 10. Tôi có thể gọi trang web java bắt đầu trong chương trình không?
- 11. Ảnh chụp màn hình từ dịch vụ nền của một ứng dụng khác (theo chương trình)
- 12. KDE và Multi-Monitor, cách bắt đầu chương trình trên màn hình được mở từ
- 13. Làm thế nào để bắt đầu khai thác thông tin?
- 14. Làm cách nào để chụp ảnh màn hình theo chương trình?
- 15. Trò chơi của tôi có biểu tượng rộng cho màn hình bắt đầu như thế nào?
- 16. Làm cách nào để khởi chạy một ứng dụng cụ thể theo chương trình trong Android?
- 17. Tạo các phân đoạn toàn màn hình theo chương trình
- 18. Làm cách nào để thay đổi trình bảo vệ màn hình theo chương trình?
- 19. Chương trình SDL/C++ OpenGL, làm thế nào để tôi ngừng SDL bắt được SIGINT
- 20. đầy đủ ứng dụng màn hình android
- 21. làm thế nào tôi có thể đặt biểu tượng ứng dụng lập trình android
- 22. Tôi có thể phát radio theo chương trình trên Android không?
- 23. Chụp ảnh màn hình trang web theo chương trình
- 24. Chụp ảnh màn hình theo chương trình không nắm bắt được nội dung của surfaceVIew
- 25. Bắt đầu chương trình trên màn hình thứ hai (khung Qt)
- 26. Làm thế nào tôi có thể bắt đầu ra từ một con cá chép trong Perl?
- 27. Làm cách nào để tạo menu trong menu bắt đầu cho chương trình của tôi?
- 28. Video chụp màn hình trong iOS theo chương trình
- 29. Làm thế nào tôi có thể lấy thông tin hệ thống/phần cứng thông qua Java?
Tôi sẽ không đề xuất sau. Điều gì sẽ xảy ra nếu ứng dụng độc hại sử dụng gói: com.android.settings? –
@PaoloRovelli Tôi đã viết "không nhất thiết được đề xuất", nhưng vì một lý do khác. Tôi không nghĩ rằng bạn có thể tránh được sự nguy hiểm mà bạn đề cập đến; nếu hai ứng dụng sử dụng cùng một ý định (chuỗi), thì người dùng sẽ luôn nhận được một hộp thoại để chọn ứng dụng để sử dụng (làm giảm nguy cơ một chút). Nhưng cũng lưu ý rằng tham số trong phương pháp tiếp cận đầu tiên cũng không có gì ngoài một chuỗi: http://developer.android.com/reference/android/provider/Settings.html#ACTION_APPLICATION_SETTINGS - vì vậy không có sự bảo vệ nào khỏi ứng dụng độc hại nếu nó sử dụng tên gói com.android.settings. –