আমার অ্যাপ্লিকেশনটি অন্যান্য অ্যাপ্লিকেশনগুলি ইনস্টল করে এবং এটি কী অ্যাপ্লিকেশনগুলি ইনস্টল করেছে তা ট্র্যাক করা দরকার। অবশ্যই, কেবল ইনস্টল করা অ্যাপ্লিকেশনগুলির একটি তালিকা রেখে এটি অর্জন করা যেতে পারে। তবে এটি প্রয়োজন হবে না! ইনস্টলডবাই (ক, খ) সম্পর্ক বজায় রাখা প্যাকেজম্যানেজারের দায়িত্ব হওয়া উচিত। আসলে, এপিআই অনুসারে এটি হ'ল:
পাবলিক অ্যাবস্ট্রাক্ট স্ট্রিং getInstallerPackageName (স্ট্রিং প্যাকেজনাম) - অ্যাপ্লিকেশনটির প্যাকেজের নামটি প্যাকেজ ইনস্টল করে। এটি প্যাকেজটি কোন বাজার থেকে এসেছে তা সনাক্ত করে।
বর্তমান পদ্ধতির
ইন্টেন্ট ব্যবহার করে APK ইনস্টল করুন
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
startActivity(intent);
অভিপ্রায় ব্যবহার করে APK আনইনস্টল করুন:
Intent intent = new Intent(Intent.ACTION_DELETE, Uri.fromParts("package",
getPackageManager().getPackageArchiveInfo(apkUri.getPath(), 0).packageName,null));
startActivity(intent);
এটি সম্ভবত উপায় নয় যেমন অ্যান্ড্রয়েড মার্কেট প্যাকেজগুলি ইনস্টল / আনইনস্টল করে। তারা প্যাকেজম্যানেজারের আরও উন্নত সংস্করণ ব্যবহার করে। এটি অ্যান্ড্রয়েড গিট সংগ্রহস্থল থেকে অ্যান্ড্রয়েড উত্স কোড ডাউনলোড করে দেখা যায়। নীচে দুটি গোপন পদ্ধতি যা ইনটেন্ট পদ্ধতির সাথে মিলে যায়। দুর্ভাগ্যক্রমে তারা বাহ্যিক বিকাশকারীদের কাছে উপলব্ধ নয়। তবে সম্ভবত তারা ভবিষ্যতে হবে?
আরও ভাল পদ্ধতির
প্যাকেজম্যানেজারটি ব্যবহার করে APK ইনস্টল করা হচ্ছে
/**
* @hide
*
* Install a package. Since this may take a little while, the result will
* be posted back to the given observer. An installation will fail if the calling context
* lacks the {@link android.Manifest.permission#INSTALL_PACKAGES} permission, if the
* package named in the package file's manifest is already installed, or if there's no space
* available on the device.
*
* @param packageURI The location of the package file to install. This can be a 'file:' or a
* 'content:' URI.
* @param observer An observer callback to get notified when the package installation is
* complete. {@link IPackageInstallObserver#packageInstalled(String, int)} will be
* called when that happens. observer may be null to indicate that no callback is desired.
* @param flags - possible values: {@link #INSTALL_FORWARD_LOCK},
* {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST}.
* @param installerPackageName Optional package name of the application that is performing the
* installation. This identifies which market the package came from.
*/
public abstract void installPackage(
Uri packageURI, IPackageInstallObserver observer, int flags,
String installerPackageName);
প্যাকেজম্যানেজারটি ব্যবহার করে APK আনইনস্টল করা
/**
* Attempts to delete a package. Since this may take a little while, the result will
* be posted back to the given observer. A deletion will fail if the calling context
* lacks the {@link android.Manifest.permission#DELETE_PACKAGES} permission, if the
* named package cannot be found, or if the named package is a "system package".
* (TODO: include pointer to documentation on "system packages")
*
* @param packageName The name of the package to delete
* @param observer An observer callback to get notified when the package deletion is
* complete. {@link android.content.pm.IPackageDeleteObserver#packageDeleted(boolean)} will be
* called when that happens. observer may be null to indicate that no callback is desired.
* @param flags - possible values: {@link #DONT_DELETE_DATA}
*
* @hide
*/
public abstract void deletePackage(
String packageName, IPackageDeleteObserver observer, int flags);
পার্থক্য
অভিপ্রায়গুলি ব্যবহার করার সময় স্থানীয় প্যাকেজ ম্যানেজারটি কোন অ্যাপ্লিকেশনটি ইনস্টলেশন থেকে উদ্ভূত তা সম্পর্কে সচেতন হয় না। বিশেষত, getInstallerPackageName (...) শূন্য ফিরে আসে।
লুকানো পদ্ধতি ইনস্টলপ্যাকেজ (...) ইনস্টলার প্যাকেজের নামটিকে প্যারামিটার হিসাবে গ্রহণ করে এবং সম্ভবত এই মানটি সেট করতে সক্ষম।
প্রশ্ন
ইন্টেন্ট ব্যবহার করে প্যাকেজ ইনস্টলারটির নাম নির্দিষ্ট করা সম্ভব? (সম্ভবত ইনস্টলেশন প্যাকেজের নামটি ইনস্টলেশন অভিযানের অতিরিক্ত হিসাবে যুক্ত করা যেতে পারে?)
টিপ: আপনি অ্যান্ড্রয়েড উত্স কোডটি ডাউনলোড করতে চাইলে আপনি এখানে বর্ণিত পদক্ষেপগুলি অনুসরণ করতে পারেন: উত্স গাছটি ডাউনলোড করা। *। জাভা ফাইলগুলি বের করে আনার জন্য এবং প্যাকেজ শ্রেণিবিন্যাস অনুসারে ফোল্ডারে রাখার জন্য আপনি এই ঝরঝরে স্ক্রিপ্টটি পরীক্ষা করে দেখতে পারেন: Eclipse এ অ্যান্ড্রয়েড উত্স কোড দেখুন ।