আমি আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশন থেকে একটি ইনস্টলড প্যাকেজ চালু করতে চাই। আমি ধরে নিই যে এটি ইন্টেন্টগুলি ব্যবহার করে সম্ভব, তবে আমি এটি করার কোনও উপায় পাইনি। লিঙ্ক আছে, তথ্য কোথায় পাবেন?
আমি আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশন থেকে একটি ইনস্টলড প্যাকেজ চালু করতে চাই। আমি ধরে নিই যে এটি ইন্টেন্টগুলি ব্যবহার করে সম্ভব, তবে আমি এটি করার কোনও উপায় পাইনি। লিঙ্ক আছে, তথ্য কোথায় পাবেন?
উত্তর:
যদি আপনি মূল ক্রিয়াকলাপটি জানেন না, তবে অ্যাপ্লিকেশনটি চালু করতে প্যাকেজের নামটি ব্যবহার করা যেতে পারে।
Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.package.address");
if (launchIntent != null) {
startActivity(launchIntent);//null pointer check in case package name was not found
}
CATEGORY_INFO
, এবং বিভাগ একটি প্রধান কার্যকলাপ জন্য পরবর্তী CATEGORY_LAUNCHER
। রিটার্নস নাল যদি তন্ন তন্ন পাওয়া যায়। "
আমি জানি এটির উত্তর দেওয়া হয়েছে তবে আমি এখানে কীভাবে অনুরূপ কিছু প্রয়োগ করেছি:
Intent intent = getPackageManager().getLaunchIntentForPackage("com.package.name");
if (intent != null) {
// We found the activity now start the activity
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} else {
// Bring user to the market or let them choose an app?
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("market://details?id=" + "com.package.name"));
startActivity(intent);
}
আরও ভাল, পদ্ধতিটি এখানে:
public void startNewActivity(Context context, String packageName) {
Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
if (intent != null) {
// We found the activity now start the activity
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
} else {
// Bring user to the market or let them choose an app?
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("market://details?id=" + packageName));
context.startActivity(intent);
}
}
সদৃশ কোড সরানো হয়েছে:
public void startNewActivity(Context context, String packageName) {
Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
if (intent == null) {
// Bring user to the market or let them choose an app?
intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=" + packageName));
}
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
আমি সমাধান খুঁজে পেয়েছি। অ্যাপ্লিকেশনটির ম্যানিফেস্ট ফাইলটিতে আমি প্যাকেজের নাম পেয়েছি: com.package.address এবং আমি যে প্রধান ক্রিয়াকলাপটি চালু করতে চাই তার নাম: মেইনএকটিভিটি নীচের কোডটি এই অ্যাপ্লিকেশনটি শুরু করে:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setComponent(new ComponentName("com.package.address","com.package.address.MainActivity"));
startActivity(intent);
// in onCreate method
String appName = "Gmail";
String packageName = "com.google.android.gm";
openApp(context, appName, packageName);
public static void openApp(Context context, String appName, String packageName) {
if (isAppInstalled(context, packageName))
if (isAppEnabled(context, packageName))
context.startActivity(context.getPackageManager().getLaunchIntentForPackage(packageName));
else Toast.makeText(context, appName + " app is not enabled.", Toast.LENGTH_SHORT).show();
else Toast.makeText(context, appName + " app is not installed.", Toast.LENGTH_SHORT).show();
}
private static boolean isAppInstalled(Context context, String packageName) {
PackageManager pm = context.getPackageManager();
try {
pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
return true;
} catch (PackageManager.NameNotFoundException ignored) {
}
return false;
}
private static boolean isAppEnabled(Context context, String packageName) {
boolean appStatus = false;
try {
ApplicationInfo ai = context.getPackageManager().getApplicationInfo(packageName, 0);
if (ai != null) {
appStatus = ai.enabled;
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return appStatus;
}
কেউ যদি এটির কাজে লাগে তবে আমার অ্যাপ থেকে বার / কিউআর কোড স্ক্যানার চালু করার উদাহরণটি example
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.setPackage("com.google.zxing.client.android");
try
{
startActivityForResult(intent, SCAN_REQUEST_CODE);
}
catch (ActivityNotFoundException e)
{
//implement prompt dialog asking user to download the package
AlertDialog.Builder downloadDialog = new AlertDialog.Builder(this);
downloadDialog.setTitle(stringTitle);
downloadDialog.setMessage(stringMessage);
downloadDialog.setPositiveButton("yes",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialogInterface, int i)
{
Uri uri = Uri.parse("market://search?q=pname:com.google.zxing.client.android");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
try
{
myActivity.this.startActivity(intent);
}
catch (ActivityNotFoundException e)
{
Dialogs.this.showAlert("ERROR", "Google Play Market not found!");
}
}
});
downloadDialog.setNegativeButton("no",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int i)
{
dialog.dismiss();
}
});
downloadDialog.show();
}
মন্তব্যের উপর নির্ভর করে সম্পাদনা করুন
কিছু সংস্করণে - মতামত হিসাবে প্রস্তাবিত - নিক্ষিপ্ত ব্যতিক্রম পৃথক হতে পারে।
সুতরাং নীচের সমাধানটি কিছুটা সংশোধন করা হয়েছে
Intent launchIntent = null;
try{
launchIntent = getPackageManager().getLaunchIntentForPackage("applicationId");
} catch (Exception ignored) {}
if(launchIntent == null){
startActivity(new Intent(Intent.ACTION_VIEW).setData(Uri.parse("https://play.google.com/store/apps/details?id=" + "applicationId")));
} else {
startActivity(launchIntent);
}
আসল উত্তর
যদিও ভাল উত্তর দেওয়া হয়েছে, একটি দুর্দান্ত সরল বাস্তবায়ন রয়েছে যা অ্যাপ্লিকেশন ইনস্টল না করা থাকলে পরিচালনা করে। আমি এটি এইভাবে করি
try{
startActivity(getPackageManager().getLaunchIntentForPackage("applicationId"));
} catch (PackageManager.NameNotFoundException e) {
startActivity(new Intent(Intent.ACTION_VIEW).setData(Uri.parse("https://play.google.com/store/apps/details?id=" + "applicationId")));
}
আপনি যে প্যাকেজটি খুলতে চান তার সাথে "অ্যাপ্লিকেশনআইড" প্রতিস্থাপন করুন যেমন com.google.maps ইত্যাদি open
PackageManager.getLaunchIntentForPackage(...)
পদ্ধতি নাল ফেরৎ যদি প্যাকেজের নাম স্বীকৃত নয়। এটা ছুঁড়ে না PackageManager.NameNotFoundException
। এখানে দেখুন ।
startActivity(null)
একটি অ্যান্ড্রয়েড 10 এমুলেটর চেষ্টা করেছি এবং এটি একটি NullPointerException
এবং একটি নয় PackageManager.NameNotFoundException
।
startActivity(Intent intent)
পদ্ধতিটি যখন বাতিল হয়ে যায় তখন তার উদ্দেশ্যপূর্ণ আচরণটি কী Intent
এবং আপনাকে কী বলে? অ্যান্ড্রয়েড বিকাশকারীদের ডকুমেন্টেশন কেবল বলে যে এটি একটি নিক্ষেপ করবে ActivityNotFoundException
।
// check for the app if it exist in the phone it will lunch it otherwise, it will search for the app in google play app in the phone and to avoid any crash, if no google play app installed in the phone, it will search for the app in the google play store using the browser :
public void onLunchAnotherApp() {
final String appPackageName = getApplicationContext().getPackageName();
Intent intent = getPackageManager().getLaunchIntentForPackage(appPackageName);
if (intent != null) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} else {
onGoToAnotherInAppStore(intent, appPackageName);
}
}
public void onGoToAnotherInAppStore(Intent intent, String appPackageName) {
try {
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("market://details?id=" + appPackageName));
startActivity(intent);
} catch (android.content.ActivityNotFoundException anfe) {
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("http://play.google.com/store/apps/details?id=" + appPackageName));
startActivity(intent);
}
}
আপনি যদি অন্য অ্যাপ্লিকেশনের নির্দিষ্ট কার্যকলাপটি খুলতে চান তবে আমরা এটি ব্যবহার করতে পারি।
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
final ComponentName cn = new ComponentName("com.android.settings", "com.android.settings.fuelgauge.PowerUsageSummary");
intent.setComponent(cn);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try
{
startActivity(intent)
}catch(ActivityNotFoundException e){
Toast.makeText(context,"Activity Not Found",Toast.LENGTH_SHORT).show()
}
আপনার যদি অন্য অ্যাপ্লিকেশন দরকার হয় তবে টোস্ট না দেখানোর পরিবর্তে আপনি একটি ডায়ালগ প্রদর্শন করতে পারেন। ডায়ালগ ব্যবহার করে আপনি প্রয়োজনীয় অ্যাপ্লিকেশনটি ডাউনলোড করতে ব্যবহারকারীকে প্লে-স্টোরে আনতে পারেন।
com.android.settings.fuelgauge.PowerUsageSummary
শুধু একটি নয় কার্যকলাপ-ওরফে এর com.android.settings.Settings$PowerUsageSummaryActivity
, এবং এটি ছিল অ্যান্ড্রয়েড পাই সরানো , তাই আমি সম্পাদন করা এই উত্তর মামলা পাই করতে summitted। নোট করুন এটি পুরানো সংস্করণের সাথেও সামঞ্জস্যপূর্ণ, এওএসপি 10 নভেম্বর, 2011 এ প্রতিশ্রুতিবদ্ধ দেখুন AF9252849fd94c1f2859c56a4010900ea38a607e ইত্যাদি
আপনি যদি ডেটা এবং ক্রিয়াকলাপটি ইনস্টল করা প্যাকেজটির প্রতিক্রিয়া জানেন তবে এটিকে শুরু করার আগে আপনার সাধারণ উদ্দেশ্যগুলিতে এই তথ্যগুলি যুক্ত করা উচিত।
আপনার যদি অন্য অ্যাপের অ্যান্ড্রয়েড ম্যানিফেস্টে অ্যাক্সেস থাকে তবে আপনি সেখানে প্রয়োজনীয় সমস্ত তথ্য দেখতে পারেন।
নিম্নলিখিত হিসাবে নতুন ক্রিয়াকলাপ চালু করার পদক্ষেপ:
1. প্যাকেজ জন্য অভিপ্রায় পান
2. যদি অভিপ্রায়টি প্লে স্টোরে ব্যবহারকারীদের পুনঃনির্দেশিত করে
3. যদি অভিপ্রায় নাল খোলা কার্যকলাপ না হয়
public void launchNewActivity(Context context, String packageName) {
Intent intent = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.CUPCAKE) {
intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
}
if (intent == null) {
try {
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("market://details?id=" + packageName));
context.startActivity(intent);
} catch (android.content.ActivityNotFoundException anfe) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + packageName)));
}
} else {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}
Intent.setClassName
ডক্স অনুযায়ী ব্যবহার করে কোনও অ্যাপের ক্রিয়াকলাপ শুরু করা সম্ভব ।
একটি উদাহরণ:
val activityName = "com.google.android.apps.muzei.MuzeiActivity" // target activity name
val packageName = "net.nurik.roman.muzei" // target package's name
val intent = Intent().setClassName(packageName, activityName)
startActivity(intent)
এটি বর্তমান অ্যাপের বাইরে খোলার জন্য, উদ্দেশ্যটি শুরু করার আগে এই পতাকাটি যুক্ত করুন।
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
একটি সম্পর্কিত উত্তর এখানে
private fun openOtherApp() {
val sendIntent = packageManager.getLaunchIntentForPackage("org.mab.dhyanaqrscanner")
startActivity(sendIntent)
finishAffinity()
}