নিজের থেকে অন্য অ্যাপ্লিকেশনটি খুলুন (উদ্দেশ্য)


136

আমি কীভাবে আমার নিজস্ব প্রোগ্রামগুলি আপডেট করতে জানি এবং আমি কীভাবে পূর্বনির্ধারিত উরি ব্যবহার করে প্রোগ্রামগুলি খুলতে জানি (উদাহরণস্বরূপ এসএমএস বা ইমেলের জন্য)

আমার কীভাবে মাইট্র্যাকগুলি বা অন্য কোনও অ্যাপ্লিকেশন খোলার জন্য একটি উদ্বেগ তৈরি করতে পারি যা আমি জানি না যে তারা কী শোনেন।

আমি এই তথ্যটি ডিডিএমএস থেকে পেয়েছি, তবে আমি এটি ব্যবহার করতে পারি এমন একটি অভিপ্রায় রূপান্তরিত করতে আমি সফল হইনি। মাইক্র্যাকগুলি ম্যানুয়ালি খোলার সময় থেকে নেওয়া হয়।

আপনার সাহায্যের জন্য ধন্যবাদ

05-06 11:22:24.945: INFO/ActivityManager(76): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks bnds=[243,338][317,417] }
05-06 11:22:25.005: INFO/ActivityManager(76): Start proc com.google.android.maps.mytracks for activity com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks: pid=1176 uid=10063 gids={3003, 1015}
05-06 11:22:26.995: INFO/ActivityManager(76): Displayed activity com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks: 1996 ms (total 1996 ms)

উত্তর:


141

প্রথমত, অ্যান্ড্রয়েডে "অ্যাপ্লিকেশন" ধারণাটি কিছুটা বর্ধিত is

একটি অ্যাপ্লিকেশন - প্রযুক্তিগতভাবে একটি প্রক্রিয়া - একাধিক ক্রিয়াকলাপ, পরিষেবা, সামগ্রী সরবরাহকারী এবং / বা সম্প্রচার শ্রোতা থাকতে পারে। যদি তাদের মধ্যে কমপক্ষে একটি চলমান থাকে তবে অ্যাপ্লিকেশনটি চলছে এবং চলছে (প্রক্রিয়া)।

সুতরাং, আপনাকে যা সনাক্ত করতে হবে তা হল আপনি কীভাবে "অ্যাপ্লিকেশন শুরু করতে" চান।

ঠিক আছে ... আপনি এখানে যা চেষ্টা করতে পারেন তা এখানে:

  1. action=MAINএবং এর সাথে একটি অভিপ্রায় তৈরি করুনcategory=LAUNCHER
  2. PackageManagerব্যবহার করে বর্তমান প্রসঙ্গটি থেকে পানcontext.getPackageManager
  3. packageManager.queryIntentActivity(<intent>, 0)যেখানে অভিপ্রায় রয়েছে category=LAUNCHER, action=MAINবা packageManager.resolveActivity(<intent>, 0)প্রধান / লঞ্চারের সাথে প্রথম ক্রিয়াকলাপটি পাবেন
  4. পান ActivityInfoতুমি আগ্রহী মধ্যে
  5. থেকে ActivityInfo, packageNameএবং পানname
  6. অবশেষে, সঙ্গে সঙ্গে অন্য অভিপ্রায় তৈরি category=LAUNCHER, action=MAIN,componentName = new ComponentName(packageName, name) এবংsetFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
  7. অবশেষে, context.startActivity(newIntent)

আমি যদি তিনটি পৃথক অ্যাপ্লিকেশন খুলতে চাইতাম?
Si8

7
সম্প্রদায় উইকি উত্তর নিচে ভাল, আপনি যদি প্যাকেজের নাম জানা stackoverflow.com/a/7596063/379115
AtWrk - মার্টিন Belcher

কলিং অ্যাপ এবং লঞ্চ করা অ্যাপের মধ্যে আপনি কীভাবে ডেটা পাস করতে পারবেন? আমি 'ইন্টেন্ট.পুটেক্সট্রা () পেয়েছি তবে লঞ্চ অ্যাপটিতে অতিরিক্ত ডেটা কীভাবে পুনরুদ্ধার করতে হবে তা আমি জানি না।
ব্রাম

onCreate=> Bundle extras = getIntent().getExtras()=> if(extras != null) { extras.getString("blah") }ইত্যাদি
গৌরব বৈশ

2
getPackageManager().getLaunchIntentForPackage()ইতিমধ্যে সব আছে যে আপনার জন্য github.com/android/platform_frameworks_base/blob/master/core/...
jrub

231

আমার এ রকম কাজ হয়েছে,

/** Open another app.
 * @param context current Context, like Activity, App, or Service
 * @param packageName the full package name of the app to open
 * @return true if likely successful, false if unsuccessful
 */
public static boolean openApp(Context context, String packageName) {
    PackageManager manager = context.getPackageManager();
    try {
        Intent i = manager.getLaunchIntentForPackage(packageName);
        if (i == null) {
            return false;
            //throw new ActivityNotFoundException();
        }
        i.addCategory(Intent.CATEGORY_LAUNCHER);
        context.startActivity(i);
        return true;
    } catch (ActivityNotFoundException e) {
        return false;
    }
}

ব্যবহারের উদাহরণ:

openApp(this, "com.google.android.maps.mytracks");

আশা করি এটি কাউকে সাহায্য করবে।


5
কারণ getLaunchIntentForPackage ("অ্যাপ্লিকেশন প্যাকেজ নাম") ব্যতিক্রম হতে পারে।
xtr

এটি একটি দুর্দান্ত উত্তর, সহজ ব্যতিক্রমটি ধরুন এবং আপনার যা প্রয়োজন তা করুন, ব্যবহারকারীকে অবহিত করুন
IT-Dan

5
স্টিকারর হতে হবে না, তবে আপনি getLaunchIntentForPackageকলটির ফলাফল ব্যবহারের পরে প্রথম লাইনে নতুন উদ্দেশ্য বরাদ্দ করার কোনও কারণ নেই ।
ক্রিস লেসি

2
getLaunchIntentForPackage()ইতিমধ্যে বিভাগটি জুড়েছে
জুরব

96
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.setComponent(ComponentName.unflattenFromString("com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks"));
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    startActivity(intent);

সম্পাদনা:

মতামত হিসাবে পরামর্শ হিসাবে, আগে একটি লাইন যোগ করুন startActivity(intent);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

18
তবে এটির ক্রিয়াকলাপটির নাম জানা দরকার
njzk2

আমি এটি চেষ্টা করে দেখেছি এবং FLAG_ACTIVITY_NEW_TASK পতাকাটি ব্যবহার করার প্রস্তাব দিয়ে একটি ত্রুটি পেয়েছি। আমি স্টার্টঅ্যাক্টিভিটির আগে এই লাইনটি যুক্ত করেছি এবং এটি কাজ করেছে: intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
ডেভিড-হোজে

1
@ njzk2 গুগল প্লেতে কোনও কিছুর জন্য প্যাকেজের নাম সন্ধান করা সহজ; এটি ঠিক সেখানে ইউআরএল আছে। উদাহরণস্বরূপ: play.google.com/store/apps/…
দা-জিন

@ আইসাইব্বি হ্যাঁ প্যাকেজের নামটি খুঁজে পাওয়া সহজ তবে আপনি কীভাবে লঞ্চটির ক্রিয়াকলাপটির শ্রেণীর নামটি খুঁজে পাবেন?
ফ্রেইকহেড

@ ফ্রেইকহেড আপনি ঠিক বলেছেন আমি আমি এই উত্তর সমাধান ব্যবহৃত চিন্তা করুন: stackoverflow.com/a/8944286/1224186 তাই কার্যকলাপ নাম প্রয়োজন না হয়, এবং তাই আমি মনে করি যে এখানে njzk2 অকেজো আমার উত্তর করে তোলে।
দা-জিন

39

আপনার যদি ইতিমধ্যে প্যাকেজটির নাম সক্রিয় করতে চান তবে আপনি নীচের কোডটি ব্যবহার করতে পারেন যা কিছুটা জেনেরিক:

PackageManager pm = context.getPackageManager();
Intent appStartIntent = pm.getLaunchIntentForPackage(appPackageName);
if (null != appStartIntent)
{
    context.startActivity(appStartIntent);
}

আমি খুঁজে পেয়েছি যে মেইন ক্রিয়াকলাপ শুরু করার নিয়মিত পদ্ধতিতে মূল ক্রিয়াকলাপটি খুঁজে পাওয়া যায় না এমন ক্ষেত্রে এটি আরও ভাল কাজ করে।


আমার জন্য সেরা উত্তর :-) আমার জন্য সহায়ক। ধন্যবাদ
জলপেশ খাখি

এটা আমার জন্য নিখুঁত। আপনাকে অনেক ধন্যবাদ মুজিকান্ত:)
অ্যালেক্স

13

এটি মাস্টারগৌরভ সমাধানে আমার সমাধান বেসের কোড:

private void  launchComponent(String packageName, String name){
    Intent launch_intent = new Intent("android.intent.action.MAIN");
    launch_intent.addCategory("android.intent.category.LAUNCHER");
    launch_intent.setComponent(new ComponentName(packageName, name));
    launch_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    activity.startActivity(launch_intent);
}

public void startApplication(String application_name){
    try{
        Intent intent = new Intent("android.intent.action.MAIN");
        intent.addCategory("android.intent.category.LAUNCHER");

        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        List<ResolveInfo> resolveinfo_list = activity.getPackageManager().queryIntentActivities(intent, 0);

        for(ResolveInfo info:resolveinfo_list){
            if(info.activityInfo.packageName.equalsIgnoreCase(application_name)){
                launchComponent(info.activityInfo.packageName, info.activityInfo.name);
                break;
            }
        }
    }
    catch (ActivityNotFoundException e) {
        Toast.makeText(activity.getApplicationContext(), "There was a problem loading the application: "+application_name,Toast.LENGTH_SHORT).show();
    }
}

10

ইনভারসাস থেকে সমাধানটি ব্যবহার করে, আমি একটি ফাংশন সহ স্নিপেটটি প্রসারিত করেছি, যখন এই মুহুর্তে পছন্দসই অ্যাপ্লিকেশন ইনস্টল করা হবে না তখনই ডাকা হবে। সুতরাং এটি কাজ করে: প্যাকেজের নামে অ্যাপ্লিকেশন চালান। যদি পাওয়া না যায় তবে অ্যান্ড্রয়েড বাজার খুলুন - এই প্যাকেজটির জন্য গুগল খেলুন

public void startApplication(String packageName)
{
    try
    {
        Intent intent = new Intent("android.intent.action.MAIN");
        intent.addCategory("android.intent.category.LAUNCHER");

        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        List<ResolveInfo> resolveInfoList = getPackageManager().queryIntentActivities(intent, 0);

        for(ResolveInfo info : resolveInfoList)
            if(info.activityInfo.packageName.equalsIgnoreCase(packageName))
            {
                launchComponent(info.activityInfo.packageName, info.activityInfo.name);
                return;
            }

        // No match, so application is not installed
        showInMarket(packageName);
    }
    catch (Exception e) 
    {
        showInMarket(packageName);
    }
}

private void launchComponent(String packageName, String name)
{
    Intent intent = new Intent("android.intent.action.MAIN");
    intent.addCategory("android.intent.category.LAUNCHER");
    intent.setComponent(new ComponentName(packageName, name));
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    startActivity(intent);
}

private void showInMarket(String packageName)
{
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName));
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}

এবং এটি এর মতো ব্যবহৃত হয়:

startApplication("org.teepee.bazant");

6

এটা ব্যবহার কর :

    PackageManager pm = getPackageManager();
    Intent intent = pm.getLaunchIntentForPackage("com.package.name");
    startActivity(intent);

কোন ধারণা আছে? বিদ্যমান অ্যাপ্লিকেশনটির অভ্যন্তরে ডিভাইস স্টোরে ইনস্টলের পরিবর্তে একটি test.apk খুলুন। বিদ্যমান প্রকল্পে সঞ্চিত একটি বোতাম মধ্যাহ্নভোজ টেস্ট.এপকে অ্যাপ্লিকেশন ক্লিক করার সময় ইঙ্গিতগুলি। অগ্রিম ধন্যবাদ.
সেলিম রাজা

6

অ্যাপ্লিকেশনটি উপস্থিত থাকলে এটি খুলুন বা এটি ইনস্টল করার জন্য প্লে স্টোর অ্যাপ্লিকেশনটি খুলুন:

private void open() {
    openApplication(getActivity(), "com.app.package.here");
}

public void openApplication(Context context, String packageN) {
    Intent i = context.getPackageManager().getLaunchIntentForPackage(packageN);
    if (i != null) {
        i.addCategory(Intent.CATEGORY_LAUNCHER);
        context.startActivity(i);
    } else {
        try {
            context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageN)));
        }
        catch (android.content.ActivityNotFoundException anfe) {
            context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + packageN)));
        }
    }
}

(i! = নাল)
ভেল্ল্ল

4

আমার অ্যাপ্লিকেশন ক্রিয়াকলাপ থেকে অন্য অ্যাপ্লিকেশন কার্যকলাপ শুরু করতে। এটা আমার জন্য ভাল কাজ করছে।

নীচে কোডটি কাজ করবে যদি অন্য একটি অ্যাপ্লিকেশন ইতিমধ্যে আপনার ফোনে ইনস্টল করা হয় অন্যথায় অন্য অ্যাপ্লিকেশনটিতে একটি অ্যাপ ফর্ম পুনর্নির্দেশ করা সম্ভব না o সুতরাং আপনার অ্যাপটি চালু হয়েছে কিনা তা নিশ্চিত হয়ে নিন

Intent intent = new Intent();
intent.setClassName("com.xyz.myapplication", "com.xyz.myapplication.SplashScreenActivity");
startActivity(intent);

দয়া করে একই প্রশ্নের প্রায় অনুরূপ একাধিক উত্তর লিখবেন না। উত্তরের নীচে "সম্পাদনা" লিঙ্কটি ব্যবহার করুন এবং আসলটি পরিবর্তন করুন।
অ্যাড্রিয়ান এইচ এইচ এইচ

3

// এটি অ্যান্ড্রয়েড ললিপপ 5.0.2 এ কাজ করে

public static boolean launchApp(Context context, String packageName) {

    final PackageManager manager = context.getPackageManager();
    final Intent appLauncherIntent = new Intent(Intent.ACTION_MAIN);
    appLauncherIntent.addCategory(Intent.CATEGORY_LAUNCHER);

    List<ResolveInfo> resolveInfos = manager.queryIntentActivities(appLauncherIntent, 0);
    if ((null != resolveInfos) && (!resolveInfos.isEmpty())) {
        for (ResolveInfo rInfo : resolveInfos) {
            String className = rInfo.activityInfo.name.trim();
            String targetPackageName = rInfo.activityInfo.packageName.trim();
            Log.d("AppsLauncher", "Class Name = " + className + " Target Package Name = " + targetPackageName + " Package Name = " + packageName);
            if (packageName.trim().equals(targetPackageName)) {
                Intent intent = new Intent();
                intent.setClassName(targetPackageName, className);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(intent);
                Log.d("AppsLauncher", "Launching Package '" + packageName + "' with Activity '" + className + "'");
                return true;
            }
        }
    }
    return false;
}

2

যেহেতু অ্যাপ্লিকেশনগুলিকে ফোন সেটিংসের অনেকগুলি পরিবর্তন করার অনুমতি নেই, আপনি অন্য অ্যাপ্লিকেশনের মতোই সেটিংস ক্রিয়াকলাপটি খুলতে পারেন।

আপনি নিজেই সেটিংটি ম্যানুয়ালি সংশোধন করার পরে লগগিট আউটপুটটি দেখুন:

INFO/ActivityManager(1306): Starting activity: Intent { act=android.intent.action.MAIN cmp=com.android.settings/.DevelopmentSettings } from pid 1924

তারপরে আপনার অ্যাপ্লিকেশন থেকে সেটিংস পৃষ্ঠাটি প্রদর্শন করতে এটি ব্যবহার করুন:

String SettingsPage = "com.android.settings/.DevelopmentSettings";

try
{
Intent intent = new Intent(Intent.ACTION_MAIN);             
intent.setComponent(ComponentName.unflattenFromString(SettingsPage));             
intent.addCategory(Intent.CATEGORY_LAUNCHER );             
startActivity(intent); 
}
catch (ActivityNotFoundException e)
{
 log it
}

2

এপিআই স্তর 3+ এর জন্য কোডের এক লাইনের বেশি আর কিছু নয়:

Intent intent = context.getPackageManager().getLaunchIntentForPackage("name.of.package");

একটি CATEGORY_INFO লঞ্চ ইন্টেন্টটি ফিরিয়ে আনুন (উদাহরণস্বরূপ অ্যাপ্লিকেশন সম্পর্কিত কিছু তথ্য সরবরাহ করার জন্য অ্যাপ্লিকেশনগুলির কোনও প্রবর্তক কার্যকলাপ নেই, ওয়ালপেপারগুলি) এবং যদি এটি খুঁজে না পাওয়া যায় তবে প্যাকেজের CATEGORY_LAUNCH উপস্থিত থাকলে তা ফিরিয়ে দেয়।


2

আপনি যদি কার্যকলাপের চেয়ে সার্ভিস শুরু করার চেষ্টা করছেন তবে এটি আমার জন্য কাজ করেছে:

Intent intent = new Intent();
intent.setClassName("com.example.otherapplication", "com.example.otherapplication.ServiceName");
context.startService(intent);

অন্যান্য উত্তরে উল্লিখিত হিসাবে আপনি যদি ইন্টেন্ট.সেট কম্পোনেন্ট (...) পদ্ধতি ব্যবহার করেন তবে আপনি "স্টার্টসোভার্সের সাথে অন্তর্নিহিত উদ্দেশ্যগুলি নিরাপদ নয়" সতর্কতা পেতে পারেন।


2

বিকল্পভাবে আপনি অন্য অ্যাপ্লিকেশনটিতে আপনার অ্যাপ্লিকেশন থেকে অভিপ্রায়টি এটি সহ খুলতে পারেন:

Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

uriঅন্যান্য অ্যাপ্লিকেশনটিতে ডললিংকটি কোথায়


2

নিম্নলিখিত ব্যবহার করুন:

String packagename = "com.example.app";
startActivity(getPackageManager().getLaunchIntentForPackage(packagename));

2

অ্যান্ড্রয়েডে অন্য অ্যাপ্লিকেশন থেকে একটি অ্যাপ্লিকেশন চালু করুন

  Intent launchIntent = getActivity.getPackageManager().getLaunchIntentForPackage("com.ionicframework.uengage");
        startActivity(launchIntent);

2

আপনি যদি অন্য অ্যাপ্লিকেশনটি খুলতে চান এবং এটি ইনস্টল না হয় আপনি এটি ডাউনলোড করতে গুগল অ্যাপ স্টোরে প্রেরণ করতে পারেন

  1. উদাহরণস্বরূপ প্রথমে ওপেনঅথর অ্যাপ তৈরি করুন

    public static boolean openOtherApp(Context context, String packageName) {
        PackageManager manager = context.getPackageManager();
         try {
            Intent intent = manager.getLaunchIntentForPackage(packageName);
            if (intent == null) {
                //the app is not installed
                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 (ActivityNotFoundException e) {
                    //throw new ActivityNotFoundException();
                    return false;
                }
    
             }
             intent.addCategory(Intent.CATEGORY_LAUNCHER);
             context.startActivity(intent);
             return true;
        } catch (ActivityNotFoundException e) {
            return false;
        }
    
    }

2.- ব্যবহার

openOtherApp(getApplicationContext(), "com.packageappname");

0

এই কোডটি ব্যবহার করে দেখুন, আশা করি এটি আপনাকে সহায়তা করবে। যদি এই প্যাকেজটি উপলভ্য থাকে তবে এটি অ্যাপ্লিকেশনটি খুলবে বা অন্যথায় ডাউনলোডের জন্য প্লে স্টোরটি খুলবে

    String  packageN = "aman4india.com.pincodedirectory";

            Intent i = getPackageManager().getLaunchIntentForPackage(packageN);
            if (i != null) {
                i.addCategory(Intent.CATEGORY_LAUNCHER);
                startActivity(i);
            } else {
                try {
                    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageN)));
                }
                catch (android.content.ActivityNotFoundException anfe) {
                    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + packageN)));
                }
            }


-3
Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.setComponent(new ComponentName("package_name","package_name.class_name"));
        intent.putExtra("grace", "Hi");
        startActivity(intent);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.