আমি কীভাবে আমার অ্যাপ্লিকেশনটি প্রারম্ভকালে শুরু করব?


241

আমি এই লিঙ্কে নমুনা কোডটি ব্যবহার করার চেষ্টা করেছি তবে এটি পুরানো বলে মনে হচ্ছে এবং এটি কার্যকর হয়নি। সুতরাং অ্যান্ড্রয়েড বুট আপ শেষ হয়ে গেলে আমার অ্যাপ্লিকেশনটি স্বয়ংক্রিয়ভাবে শুরু করার জন্য আমাকে কী পরিবর্তন করতে হবে এবং কোন ফাইলগুলিতে করতে হবে?

উত্তর:


315

প্রথমত, আপনার এতে অনুমতি দরকার AndroidManifest.xml:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

এছাড়াও, আপনার মধ্যে AndroidManifest.xml, আপনার পরিষেবাটি সংজ্ঞায়িত করুন এবং BOOT_COMPLETED ক্রিয়াটি শুনুন :

<service android:name=".MyService" android:label="My Service">
    <intent-filter>
        <action android:name="com.myapp.MyService" />
    </intent-filter>
</service>

<receiver
    android:name=".receiver.StartMyServiceAtBootReceiver"
    android:label="StartMyServiceAtBootReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

তারপরে আপনাকে রিসিভারটি সংজ্ঞায়িত করতে হবে যা BOOT_COMPLETED ক্রিয়া পাবে এবং আপনার পরিষেবা শুরু করবে ।

public class StartMyServiceAtBootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            Intent serviceIntent = new Intent(context, MyService.class);
            context.startService(serviceIntent);
        }
    }
}

এবং এখন ফোনটি শুরু হয়ে গেলে আপনার পরিষেবাটি চলমান উচিত।


8
ক্রিয়াকলাপ: ডেভেলপার.অ্যান্ড্রয়েড . com/ guide / টপিক্স / ফান্ডামেন্টালস / অ্যাক্টিভিটিস.এইচটিএমএল পরিষেবাদি: বিকাশকারী.অ্যান্ড্রয়েড. com/guide/topics/fundamentals/services.html ফোনটি আসলে যখন শুরু হয় তখন আপনার অ্যাপ্লিকেশন শুরু করতে, আপনাকে প্রয়োজন উপরের মত দেখায় পরিষেবাটি নিবন্ধ করুন এবং তারপরে আপনি নিজের অ্যাপ্লিকেশন শুরু করতে স্টার্টঅ্যাক্টিভিটি () ব্যবহার করতে পারেন। যদিও তারা যদি এটির জন্য জিজ্ঞাসা না করে তবে তাদের সামনে পর্দা রাখা ভাল ধারণা নয়।
শান শুল্টে

19
কেবল এটি যুক্ত করতে চেয়েছিলেন যে Intent.ACTION_BOOT_COMPLETEDআপনার রিসিভারের স্ট্রিংটিকে হার্ড-কোডিংয়ের পরিবর্তে ব্যবহার করা ভাল । Intent(context, MySystemService.class)ইন্টেন্ট তৈরি করার সময় নতুন কনস্ট্রাক্টর ব্যবহার করা উচিত ।
ব্রায়ানস্টে

7
ইন্টেন্ট-ফিল্টার ব্যবহার করা হলে ইন্টেন্টের ধরণের জন্য কি পরীক্ষা করার কোনও কারণ আছে?
পাইজুসন

1
কিছু কারণে তোমার দর্শন লগ করা পেয়ে Multiple markers at this line - BroadcastReceiver cannot be resolved to a type - The public type StartMyServiceAtBootReceiver must be defined in its own fileউপর public classলাইন। কোন ধারনা?
প্যাটিড

3
মাইসিস্টেম সার্ভিস কি?
ক্রীড়া 21

120

অ্যান্ড্রয়েড ডিভাইস পুনরায় বুট করার পরে কীভাবে কোনও ক্রিয়াকলাপ চালানো শুরু করবেন:

উপাদানটির মধ্যে (উপাদানটির মধ্যে নয় ) আপনার AndroidManifest.xmlফাইলে এই কোডটি সন্নিবেশ করুন :<application><activity>

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<receiver
    android:enabled="true"
    android:exported="true" 
    android:name="yourpackage.yourActivityRunOnStartup"
    android:permission="android.permission.RECEIVE_BOOT_COMPLETED">

    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <action android:name="android.intent.action.QUICKBOOT_POWERON" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

</receiver>

তারপরে একটি নতুন শ্রেণি তৈরি করুন yourActivityRunOnStartup( ম্যানিফেস্টে উপাদানটির android:nameজন্য নির্দিষ্ট মেলা <receiver>):

package yourpackage;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class yourActivityRunOnStartup extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            Intent i = new Intent(context, MainActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
    }

}

দ্রষ্টব্য: কলটি i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);গুরুত্বপূর্ণ কারণ ক্রিয়াকলাপটি কার্যকলাপের বাইরে একটি প্রসঙ্গ থেকে শুরু করা হয়েছিল। এটি ছাড়া ক্রিয়াকলাপ শুরু হবে না।

এছাড়াও, মান android:enabled, android:exportedএবং android:permissionমধ্যে <receiver>ট্যাগটি বাধ্যতামূলক মনে হচ্ছে না। অ্যাপ্লিকেশনটি এই মানগুলি ছাড়াই ইভেন্টটি গ্রহণ করে। উদাহরণ এখানে দেখুন


স্থানীয় পরিষেবা না করা এড়াতে আমি এই "শর্টকাট" পছন্দ করি। যে কোডটি প্রসারিত শ্রেণীর অন্তর্ভুক্ত Application? ভিতরে হতে পারে onCreate()?
কেউ কোথাও

2
এটা দেখে মনে হচ্ছে কোডের যে অনুচ্ছেদ মধ্যে হওয়া উচিত onReceive()একটি এরBroadcastReceiver
কেউ কোথাও

2
এই কোডটি "yourActivityrRunOnStartup" নামক ক্রিয়াকলাপে হওয়া উচিত যা ব্রডকাস্টআরসিভার ক্লাসটি প্রসারিত করে এবং অন-রিসিপ () পদ্ধতির অভ্যন্তরে।
থ্রিলাস

2
আমি একটি ১০ টি আপভোট দেওয়ার চেষ্টা করেছি কিন্তু পারলাম না। দুঃখিত এবং আপনাকে ধন্যবাদ।
সায়কা

1
এটি আমার পক্ষে কাজ করেছে, তবে কেবলমাত্র যদি আমার অভিপ্রায় ফিল্টারটিতে কেবল "<অ্যাকশন অ্যান্ড্রয়েড: নাম =" android.intent.action.BOOT_COMPLETED "/>" থাকে। আমি যদি অন্য দুটি ব্যবহার করি তবে এটি কাজ করে না।
emhomm4

67

ACTION_BOOT_COMPLETE শুনুন এবং সেখান থেকে আপনার যা করা দরকার তা করুন। এখানে একটি কোড স্নিপেট আছে।

হালনাগাদ:

উত্তরের মূল লিঙ্কটি নিচে, সুতরাং মন্তব্যের উপর ভিত্তি করে, এখানে কোডটি লিঙ্কযুক্ত, কারণ লিঙ্কগুলি নিচে থাকার সময় কেউ কখনই কোডটি মিস করবে না।

AndroidManLive.xML (অ্যাপ্লিকেশন অংশ) এ:

<receiver android:enabled="true" android:name=".BootUpReceiver"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED">

        <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
</receiver>

...

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

...

public class BootUpReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
                Intent i = new Intent(context, MyActivity.class);  //MyActivity can be anything which you want to start on bootup...
                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(i);  
        }

}

সূত্র: https://web.archive.org/web/20150520124552/http://www.androidsnippets.com/autostart-an-application-at-bootup


এই কোডটি কোন ফাইলটি স্থাপন করেছে: পাবলিক ক্লাসের বুটআপ রিসিভার সম্প্রচারিত করে সম্প্রচারক
জেফ জেনেস

এটি কাজ করে, ধন্যবাদ! (অ্যান্ড্রয়েড 4.0.০.৪ এপিআই স্তরের 15 এ কাজ করেছেন)। হ্যাঁ .. এটি 2017 এবং এখনও আমার অ্যান্ড্রয়েডের জন্য বিকাশ করতে হবে 4.0.4 .. :(
লুকা

2
অ্যান্ড্রয়েড 8.0 এ কাজ করে না! যদিও Android 4.0 এ কাজ করে।
কোডজম্বি

আমি একই কোড ব্যবহার করছি তবে এটি কিটক্যাট সংস্করণে কাজ করছে না, অ্যান্ড্রয়েড টিভি শুরু হলে আমি অ্যাপ্লিকেশনটি শুরু করতে চাই
আশুতোষ ত্রিপাঠি

@ আশুতোষ ত্রিপাঠি আপনি কি এটি ঠিক করেছিলেন?
ralphgabb


2

শানের সমাধান আমার পক্ষে প্রাথমিকভাবে কার্যকর হয়নি (অ্যান্ড্রয়েড ৪.২.২)। আমাকে একই অ্যান্ড্রয়েড প্রকল্পে একটি ডামি ক্রিয়াকলাপ যোগ করতে হয়েছিল এবং ডিভাইসে ম্যানুয়ালি ক্রিয়াকলাপটি কমপক্ষে একবার চালাতে হয়েছিল। এরপরে শানের সমাধানটি কাজ শুরু করে এবং ব্রডকাস্টারসিভারকে পরবর্তী পুনরায় বুট করার পরে অবহিত করা হয়েছিল।


0

স্ক্রিনশট

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

যদি আপনি অ্যান্ড্রয়েড সংস্করণ 5.1 ব্যবহার করেন তবে আপনাকে অ্যাপ্লিকেশন সেটিংস থেকে ডিস-সিলেক্ট করতে হবে (লঞ্চ করতে সীমাবদ্ধ)।

সেটিংস> অ্যাপ্লিকেশন> আপনার অ্যাপ্লিকেশন> লঞ্চ করতে সীমাবদ্ধ করুন (নির্বাচন না করা)


3
আমি মনে করি না এটি কখনও স্ট্যান্ডার্ড ছিল। আমি কখনও "লঞ্চ নিষিদ্ধ করার" কথা শুনিনি। এটি বিভিন্ন স্যামসাং, আসুস, সনিতে কখনও দেখেনি ... এটি আমার কাছে কোনও ধারণা রাখে না। এটি বলে যে কেবলমাত্র অ্যাপ্লিকেশনটি শুরু করার অনুমতি দেওয়া হচ্ছে? এটার মানে কি?
অবিশ্বাস্য জানুয়ারী

0

বুট প্রক্রিয়া চলাকালীন ধীরগতি এড়ানোর android.intent.action.USER_PRESENTপরিবর্তে আরেকটি পদ্ধতি ব্যবহার করা android.intent.action.BOOT_COMPLETED। তবে এটি কেবলমাত্র trueযদি ব্যবহারকারী লক স্ক্রিনটি সক্ষম করে থাকে - অন্যথায় এই অভিপ্রায়টি কখনই সম্প্রচারিত হয় না।

রেফারেন্স ব্লগ - অ্যান্ড্রয়েডের ACTION_USER_PRESENT ইন্টেন্ট সহ সমস্যা


সুতরাং, অন্য কথায়, এটি ব্যবহার করা উচিত নয়
22:30
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.