অ্যান্ড্রয়েডে বুটে একটি পরিষেবা শুরু করার চেষ্টা করা হচ্ছে


332

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

Andro আইডি

<receiver
    android:name=".StartServiceAtBootReceiver"
    android:enabled="true"
    android:exported="false"
    android:label="StartServiceAtBootReceiver" >
    <intent-filter>
        <action android:name="android.intent.action._BOOT_COMPLETED" />
    </intent-filter>
</receiver>

<service
    android:name="com.test.RunService"
    android:enabled="true" />

সম্প্রচার গ্রহনকারী যন্ত্র

public void onReceive(Context context, Intent intent) {
    if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
        Intent serviceLauncher = new Intent(context, RunService.class);
        context.startService(serviceLauncher);
        Log.v("TEST", "Service loaded at start");
    }
}

2
আমি কী করেছি তা আমি জানি না তবে আমি মনে করি এটি এখন কাজ করে এটি সম্ভবত অ্যান্ড্রয়েড হতে পারে: অনুমতি = "android.permission.RECEIVE_BOOT_COMPLETED" রিসিভারের জন্য
অ্যালেক্স

আপনি <অ্যাকশন অ্যান্ড্রয়েড: নাম = "android.intent.action._BOOT_COMPLETED" />
ওয়ানওয়ার্ল্ড

এক্সপোর্ট করা অবশ্যই সত্য হবে যাতে সিস্টেমটি রিসিভারের আবেদন করতে পারে, না? নাকি এটি ডিফল্টরূপে সত্য?
ইউজেন পেচানেক

উত্তর:


601

অন্যান্য উত্তরগুলি দেখতে ভাল লাগছে, তবে আমি ভেবেছিলাম যে আমি সবকিছুকে একটি সম্পূর্ণ উত্তরের মধ্যে গুটিয়ে দেব।

আপনার AndroidManifest.xmlফাইলটিতে আপনার নিম্নলিখিতগুলি দরকার :

  1. আপনার <manifest>উপাদান:

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
  2. আপনার <application>উপাদানটিতে ( আপনার জন্য একটি পুরোপুরি যোগ্যতাসম্পন্ন [বা আপেক্ষিক] শ্রেণীর নাম ব্যবহার করতে ভুলবেন না BroadcastReceiver):

    <receiver android:name="com.example.MyBroadcastReceiver">  
        <intent-filter>  
            <action android:name="android.intent.action.BOOT_COMPLETED" />  
        </intent-filter>  
    </receiver>

    (আপনার যা দরকার না android:enabled, exportedইত্যাদি,, গুণাবলী: Android এর ডিফল্ট সঠিক হয়)

    ইন MyBroadcastReceiver.java:

    package com.example;
    
    public class MyBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Intent startServiceIntent = new Intent(context, MyService.class);
            context.startService(startServiceIntent);
        }
    }

মূল প্রশ্ন থেকে:

  • এটা পরিষ্কার না যদি <receiver>উপাদানের মাঝে <application>উপাদান
  • এটির জন্য সঠিক সম্পূর্ণ-যোগ্যতাসম্পন্ন (বা আপেক্ষিক) শ্রেণীর নাম BroadcastReceiverনির্দিষ্ট করা থাকলে তা স্পষ্ট নয়
  • একটি টাইপ ছিল <intent-filter>

2
এটি দেখতে ভাল লাগছে। আমি এটি ভিত্তি হিসাবে ব্যবহার করব, ধন্যবাদ :) দুঃখের সাথে কোন চেকমার্ক বা উক্তি বা প্রতিক্রিয়া নেই :(। যে কেউ এটি যাচাই করে?
Nanne

51
কেবলমাত্র একটি পরিপূরক: আপনার অ্যাপ্লিকেশনটি অভ্যন্তরীণ মেমোরিতে ইনস্টল করা আছে তা নিশ্চিত করুন <ম্যানিফেস্ট xMLns: android = "..." প্যাকেজ = "..." অ্যান্ড্রয়েড: ইনস্টললোকেশন = "অভ্যন্তরীণ কেবল">
বাও লে

2
<রিসিভার> ট্যাগে অ্যান্ড্রয়েড জেলিবিয়ান ৪.২.২ তে আমাকে পরিষেবাটি শুরু করার জন্য পূর্ণ-যোগ্য নামের পরিবর্তে ক্লাসের 'আপেক্ষিক নামটি ব্যবহার করতে হয়েছিল, যেমন স্ট্যাকওভারফ্লো
প্রশ্নগুলি

6
যদি রিসিভারটি বিভিন্ন স্টাফের জন্য ব্যবহার করা হয়: <br> if ("android.intent.action.BOOT_COMPLETED"। প্রয়োজনীয়তা (ইন্টেন্ট.জেট অ্যাকশন ())) tent ইনটেন্ট সার্ভিস ইনটেন্ট = নতুন ইন্টেন্ট (প্রসঙ্গ, সার্ভিস_লোকেশন.ক্লাস); // আই.পুটেক্সট্রা ("কেইওয়াই 1", "পরিষেবাটি ব্যবহারের জন্য মূল্য"); context.startService (serviceIntent); }
গুনার বার্নস্টেইন

2
পরিবর্তে আপনার বিকাশকারী.অ্যান্ড্রয়েড . com/ references/ android/ support/ v4/ content/… প্রসারিত করা উচিত । এটি এমন একটি ব্রডকাস্টার্সিভার কার্যকর করার সাধারণ প্যাটার্নের জন্য সহায়তাকারী যা কোনও ডিভাইস ওয়েকআপ ইভেন্ট গ্রহণ করে এবং তারপরে কোনও পরিষেবাতে কাজটি সরিয়ে দেয়, যখন নিশ্চিত হয় যে সংক্রমণকালে ডিভাইসটি ঘুমের দিকে ফিরে না যায়। এই শ্রেণিটি আপনার জন্য আংশিক জাগ্রত লক তৈরি এবং পরিচালনার যত্ন নেয়; এটি ব্যবহারের জন্য আপনাকে অবশ্যই WAKE_LOCK অনুমতির আবেদন করতে হবে।
দামিয়ান

84

অতিরিক্ত তথ্য হিসাবে: বাহ্যিক স্টোরেজ মাউন্ট করার আগে BOOT_COMPLETE অ্যাপ্লিকেশনগুলিতে প্রেরণ করা হয়। সুতরাং যদি অ্যাপ্লিকেশনটি বাহ্যিক স্টোরেজে ইনস্টল করা থাকে তবে এটি BOOT_COMPLETE সম্প্রচার বার্তাটি গ্রহণ করবে না।

বিভাগে আরও বিশদ এখানে সম্প্রচারিত রিসিভারগুলি "বুট সম্পূর্ণ হয়েছে" শুনছেন


উপরের সমস্যাটি প্রতিরোধ করতে, বিকাশকারী কোনও অ্যাপ্লিকেশনটির জন্য ম্যানিফেস্টে "অ্যান্ড্রয়েড: ইনস্টললোকেশন =" অভ্যন্তরীণ মাত্র "সেট করতে পারে that এটি কি খারাপ ধারণা? যদি কোনও স্মার্টফোন অ্যাপের জন্য, যদি 999% (আমার অনুমান) সমস্ত ব্যবহারকারী অ্যাপটি ইনস্টল করেন , বাহ্যিক স্টোরেজের পরিবর্তে অভ্যন্তরীণ স্টোরেজ ব্যবহার করে, তবে মনে হচ্ছে ম্যানিফেস্টে "অভ্যন্তরীণ কেবল" সংযোজন করা ভাল হবে this এ সম্পর্কে আপনার যে কোনও ধারণা বা ধারণাকে আমি প্রশংসা করব
এজেডাব্লু

69

ডিভাইস বুটে কীভাবে পরিষেবা শুরু করবেন (অটোরান অ্যাপ্লিকেশন ইত্যাদি)

প্রথমটির জন্য: সংস্করণ অ্যান্ড্রয়েড ৩.১+ থেকে আপনি BOOT_COMPLETE পাবেন না যদি ব্যবহারকারী কমপক্ষে একবার আপনার অ্যাপ্লিকেশনটি শুরু না করেন বা ব্যবহারকারী "জোর করে বন্ধ" অ্যাপ্লিকেশন না করেন। ম্যালওয়ারটি স্বয়ংক্রিয়ভাবে নিবন্ধিত পরিষেবাটি রোধ করার জন্য এটি করা হয়েছিল। এই সুরক্ষা গর্তটি অ্যান্ড্রয়েডের নতুন সংস্করণগুলিতে বন্ধ ছিল।

সমাধান:

ক্রিয়াকলাপ সহ অ্যাপ্লিকেশন তৈরি করুন। ব্যবহারকারীরা একবার এটি চালালে অ্যাপ্লিকেশনটি BOOT_COMPLETE সম্প্রচার বার্তা গ্রহণ করতে পারে।

দ্বিতীয়টির জন্য: বাহ্যিক স্টোরেজ মাউন্ট করার আগে BOOT_COMPLETE প্রেরণ করা হয়। যদি অ্যাপটি বাহ্যিক স্টোরেজে ইনস্টল করা থাকে তবে এটি BOOT_COMPLETE সম্প্রচার বার্তাটি গ্রহণ করবে না।

এক্ষেত্রে দুটি সমাধান রয়েছে:

  1. অভ্যন্তরীণ সঞ্চয়স্থানে আপনার অ্যাপ্লিকেশনটি ইনস্টল করুন
  2. অভ্যন্তরীণ স্টোরেজে আরও একটি ছোট অ্যাপ ইনস্টল করুন। এই অ্যাপ্লিকেশনটি BOOT_COMPLETE গ্রহণ করে এবং বাহ্যিক স্টোরেজে দ্বিতীয় অ্যাপ চালায়।

যদি আপনার অ্যাপ্লিকেশনটি ইতিমধ্যে অভ্যন্তরীণ স্টোরেজে ইনস্টল করা থাকে তবে নীচের কোডটি কীভাবে ডিভাইস বুটে পরিষেবা শুরু করবেন তা বুঝতে সহায়তা করতে পারে।


ম্যানিফেস্ট.এক্সএমএলে

অনুমতি:

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

আপনার BOOT_COMPLETED রিসিভার নিবন্ধন করুন:

<receiver android:name="org.yourapp.OnBoot">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

আপনার পরিষেবা নিবন্ধন করুন:

<service android:name="org.yourapp.YourCoolService" />

রিসিভার অনবুট.জভাতে:

public class OnBoot extends BroadcastReceiver
{

    @Override
    public void onReceive(Context context, Intent intent) 
    {
        // Create Intent
        Intent serviceIntent = new Intent(context, YourCoolService.class);
        // Start service
        context.startService(serviceIntent);

    }

 }

এইচটিসির জন্য আপনার সম্ভবত এই কোডটি ম্যানিফেস্টে যুক্ত করতে হবে যদি ডিভাইসটি RECEIVE_BOOT_COMPLETED না ধরে:

<action android:name="android.intent.action.QUICKBOOT_POWERON" />

রিসিভার এখন এই মত চেহারা:

<receiver android:name="org.yourapp.OnBoot">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
        <action android:name="android.intent.action.QUICKBOOT_POWERON" />
    </intent-filter>
</receiver>

পুনরায় চালু এমুলেটর বা আসল ডিভাইস ছাড়াই BOOT_COMPLETED কীভাবে পরীক্ষা করবেন? এটি সহজ. এটা চেষ্টা কর:

adb -s device-or-emulator-id shell am broadcast -a android.intent.action.BOOT_COMPLETED

কীভাবে ডিভাইস আইডি পাবেন? আইডির সাথে সংযুক্ত ডিভাইসের তালিকা পান:

adb devices

ডিফল্টরূপে ADT এডিবি আপনি দেখতে পাবেন:

adt-installation-dir/sdk/platform-tools

উপভোগ করুন! )


আপনার প্রথম অনুচ্ছেদটি মূলধন ছিল। আমি এটি আমার ডিবাগারে চালাতে পারিনি।
estornes

34

সাথে

<action android:name="android.intent.action.BOOT_COMPLETED" />  

এছাড়াও ব্যবহার,

<action android:name="android.intent.action.QUICKBOOT_POWERON" />

এইচটিসি ডিভাইসগুলি BOOT_COMPLETED কে ধরা দেয় না


এইচটিসি ডিভাইসগুলির জন্য অনুমতিগুলিতে অনুরূপ কিছু যুক্ত করতে হবে?
নন্দ

2
এটি কিছু পরিস্থিতিতে কার্যকর হতে পারে তবে আমি বুঝতে পারি এইচটিসি ফাস্ট বুট হাইবারনেশনের একধরণের যেখানে সিস্টেম স্টেট ফাইল সিস্টেমে সংরক্ষণ করা হয় এবং android.intent.action.QUICKBOOT_POWERONদ্রুত বুট থেকে পুনরুদ্ধার করার সময় কেবল এটিই প্রেরণ করা হয়। এর অর্থ ফাস্ট বুট থেকে সংরক্ষিত হওয়ার সাথে সাথে পুনরুদ্ধার করার সময় অ্যালার্মগুলি পুনরায় সেট করার মতো জিনিসগুলি করা প্রয়োজন হয় না। সুতরাং <action android:name="android.intent.action.QUICKBOOT_POWERON" />ব্যবহারকারী যখন ডিভাইসটি বুট করেছে বলে মনে করে আপনি কিছু করতে চান তবে কেবল এটি ব্যবহার করা প্রয়োজন ।
HexAndBugs 9

2
অ্যাপ্লিকেশন বিকাশকারীর দৃষ্টিকোণ থেকে আমাদের কখনও কখনও এটি ব্যবহার করা উচিত নয়, যদি আচরণটি কেবল এইচটিসি ডিভাইসে বিদ্যমান থাকে। কারণ, ডকুমেন্টেশন অনুসারে, BOOT_COMPLETED হ'ল ডিভাইসটি চালু করার সময় সর্বদা প্রেরণ করা হবে। কিছু অন্যান্য প্রস্তুতকারক দ্রুত বুট করার আরেকটি পদ্ধতি নিয়ে আসতে পারে এবং আমরা প্রত্যেকের স্পেসিফিকেশনের সাথে আমাদের কোডটি মেসে শেষ করব।
সাবিন সেবাস্তিয়ান

@ হেক্সঅ্যান্ডব্যাগস আপনি কি তা নিশ্চিত করতে পেরেছিলেন যে ফাস্ট বুট হাইবারনেশনের একধরণের যেখানে সিস্টেম স্টেট ফাইল সিস্টেমে সংরক্ষিত আছে? আমি যদি সিস্টেমের অবস্থা সংরক্ষণ না করা হয় তবে দ্রুত বুটের পরে ভবিষ্যতের বিজ্ঞপ্তিগুলির জন্য ব্যবহৃত অ্যালার্মগুলি পুনরায় সেট করতে সক্ষম হতে চাই ... দয়া করে পরামর্শ দিন।
এজেডাব্লু

20

নোট করুন যে প্রশ্নের শুরুতে, একটি টাইপ ভুল আছে:

<action android:name="android.intent.action._BOOT_COMPLETED"/>

পরিবর্তে :

<action android:name="android.intent.action.BOOT_COMPLETED"/>

একটি ছোট "_" এবং এই সমস্ত সমস্যা :)


13

আমি ঠিক এখনই খুঁজে পেয়েছি যে এটি > Fast Bootবিকল্পের কারণে হতে পারেSettingsPower

যখন আমার এই বিকল্পটি বন্ধ রয়েছে, আমার অ্যাপ্লিকেশনটি এই সম্প্রচারটি গ্রহণ করবে তবে অন্যথায় নয়।

উপায় দ্বারা, আমি Android 2.3.3উপর HTC Incredible S

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


ইস্যুটির অবশ্যই সম্ভাব্য কারণ। এইচটিসি ডিজায়ার সি চলমান অ্যানড্রয়েড 4.0.3 এও পর্যবেক্ষণ করা হয়েছে।
জেলিমির


7

উল্লিখিত সমস্ত উত্তর এবং কৌশলগুলি চেষ্টা করার পরে, আমি শেষ পর্যন্ত খুঁজে পাই কেন কোডটি আমার ফোনে কাজ করছে না। "হুয়াওয়ে অনার 3 সি অ্যান্ড্রয়েড 4.2.2 " এর মতো কিছু অ্যান্ড্রয়েড ফোনগুলির সেটিংগুলিতে স্ট্যাটআপ ম্যানেজার মেনু রয়েছে এবং আপনার অ্যাপ্লিকেশনটিকে তালিকায় অবশ্যই চেক করা উচিত। :)


5

আমার একটি অতিরিক্ত- <category>ট্যাগ রয়েছে, জানি না এটির কোনও তফাত হয় কিনা।

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

আপনি কি যদি ইফ-ক্লজটি বাদ দেওয়ার চেষ্টা করেছেন "android.intent.action.BOOT_COMPLETED".equals(intent.getAction(), যেহেতু প্রাপক সম্ভবত কেবলমাত্র সেই অভিপ্রায়টি পান?


এটি চেষ্টা করে দেখুন এবং এটি কার্যকর হয়নি বিটিডব্লিউ আমি উল্লেখ করতে ভুলে গিয়েছিলাম যে আমার কাছে <ব্যবহার-অনুমতি অ্যান্ড্রয়েড: নাম = "android.permission.RECEIVE_BOOT_COMPLETED" />
অ্যালেক্স

2
কেবলমাত্র ক্ষেত্রে: অ্যান্ড্রয়েড.ইনটি.টি.শ্রেণীর যোগ করুন Androidঅ্যান্ড্রয়েড ম্যানিফেস্টে যে কোনও ট্যাগটিতে হোম স্যামসং গ্যালাক্সি ট্যাবটিকে সামঞ্জস্যতা মোড বন্ধ করতে হ্যাক ব্যবহার করার পরেও সামঞ্জস্যতা মোডে অ্যাপটি চালিত করবে। অন্যান্য ট্যাবগুলির জন্য এটি একই কিনা তা নিশ্চিত নন। আমি মোটেও হোম বিভাগ সেট না করার পরামর্শ দিচ্ছি। এটা অপ্রয়োজনীয়
চাঁদনি


3

বাহ্যিক স্টোরেজ মাউন্ট করার আগে BOOT_COMPLETE কে এক্সিকিউটিভ পাঠানো হয় if এটি প্রতিরোধ করতে আপনি নিজের অ্যাপ্লিকেশনটি অভ্যন্তরীণ স্টোরেজে ইনস্টল করতে পারেন। আপনি কেবলমাত্র এই লাইনটি Menifest.xml এ যুক্ত করে এটি করতে পারেন

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="internalOnly"
... >

কিছু এইচটিসি ডিভাইস একটি "দ্রুত বুট" বৈশিষ্ট্য সক্ষম করতে পারে যা গভীর হাইবারনেশনের মতো এবং বাস্তব রিবুট নয় এবং তাই BOOT_COMPLETE অভিপ্রায় না দেয়। এটি পুনরুদ্ধার করতে আপনি আপনার রিসিভারের মধ্যে এই অভিপ্রায় ফিল্টারটি যুক্ত করতে পারেন:

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

আপনার পরামর্শ অনুসারে, উপরোক্ত সমস্যাটি প্রতিরোধের জন্য, বিকাশকারী কোনও অ্যাপ্লিকেশনের জন্য ম্যানিফেস্টে "অ্যান্ড্রয়েড: ইনস্টললোকেশন =" অভ্যন্তরীণ মাত্র "সেট করতে পারে that এটি কি খারাপ ধারণা? স্মার্টফোন অ্যাপ্লিকেশনটির জন্য, যদি সমস্ত ব্যবহারকারীর 99.9% (আমার অনুমান) থাকে বাহ্যিক স্টোরেজের পরিবর্তে অভ্যন্তরীণ স্টোরেজ ব্যবহার করে অ্যাপ্লিকেশনটি সাধারণত ইনস্টল করুন, তবে ম্যানিফেস্টে "অভ্যন্তরীণভাবে" সংযোজনটি ভাল হবে বলে মনে হয় this এ সম্পর্কে আপনার যে কোনও ধারণা বা ধারণাকে আমি প্রশংসা করব --এজেডাব্লু
এজেডাব্লু

3

এটাই আমি করেছি

1. আমি রিসিভার ক্লাস করেছি

public class BootReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //whatever you want to do on boot
       Intent serviceIntent = new Intent(context, YourService.class);
       context.startService(serviceIntent);
    }
}

ম্যানিফেস্টে 2.

<manifest...>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <application...>
        <receiver android:name=".BootReceiver" android:enabled="true" android:exported="false">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
    ...

৩. এবং আপনার সমস্তকে আপনার মূলঅ্যাক্টিভিটিতে রিসিভারটি "সেট" করার দরকার পরে, এটি অনক্রিটের অভ্যন্তরে থাকতে পারে

...
 final ComponentName onBootReceiver = new ComponentName(getApplication().getPackageName(), BootReceiver.class.getName());
        if(getPackageManager().getComponentEnabledSetting(onBootReceiver) != PackageManager.COMPONENT_ENABLED_STATE_ENABLED)
        getPackageManager().setComponentEnabledSetting(onBootReceiver,PackageManager.COMPONENT_ENABLED_STATE_ENABLED,PackageManager.DONT_KILL_APP);
...

চূড়ান্ত স্টিপ আমি এপিডেমোস থেকে শিখেছি


2

আপনি যদি অ্যান্ড্রয়েড স্টুডিও ব্যবহার করছেন এবং আপনি অটো সম্পূর্ণরূপে খুব পছন্দ করেন তবে আমি আপনাকে অবশ্যই অবহিত করব, আমি অ্যান্ড্রয়েড স্টুডিও বনাম 1.1.0 ব্যবহার করছি এবং আমি নীচের অনুমতিটির জন্য অটো-সম্পূর্ণ ব্যবহার করেছি

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

এবং অ্যান্ড্রয়েড স্টুডিও অল্প পরিমাণে RECEIVE_BOOT_COMPLETEDযেমন অটো সম্পন্ন করে receive_boot_completedএবং আমার চুলগুলি টানতে থাকে কারণ আমি ইতিমধ্যে আমার চেকলিস্টটি বুট-এ সেবা শুরু করার জন্য কিছু করতে চাইছি। আমি ঠিক আবার নিশ্চিত করেছি

অ্যান্ড্রয়েড স্টুডিও লোয়ার ক্ষেত্রে এই অনুমতিটি স্বয়ংক্রিয়ভাবে সম্পন্ন করে।


2

@ ডামিয়ান মন্তব্য হিসাবে, এই থ্রেডের সমস্ত উত্তরগুলি এটির ভুল করছে। এটি ম্যানুয়ালি এর মতো করে করা আপনার ডিভাইসটি ঘুমাতে যাওয়া থেকে মাঝখানে আপনার পরিষেবা বন্ধ হয়ে যাওয়ার ঝুঁকি নিয়ে চলে। আপনাকে প্রথমে একটি ওয়েক লক পাওয়া দরকার। ভাগ্যক্রমে, সমর্থন লাইব্রেরি আমাদের এটি করার জন্য একটি ক্লাস দেয় :

public class SimpleWakefulReceiver extends WakefulBroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // This is the Intent to deliver to our service.
        Intent service = new Intent(context, SimpleWakefulService.class);

        // Start the service, keeping the device awake while it is launching.
        Log.i("SimpleWakefulReceiver", "Starting service @ " + SystemClock.elapsedRealtime());
        startWakefulService(context, service);
    }
}

তারপরে, আপনার পরিষেবাতে, জাগ্রত লকটি প্রকাশ করতে ভুলবেন না:

    @Override
    protected void onHandleIntent(Intent intent) {
        // At this point SimpleWakefulReceiver is still holding a wake lock
        // for us.  We can do whatever we need to here and then tell it that
        // it can release the wakelock.

...
        Log.i("SimpleWakefulReceiver", "Completed service @ " + SystemClock.elapsedRealtime());
        SimpleWakefulReceiver.completeWakefulIntent(intent);
    }

আপনার মেইনফেষ্টে ডাব্লুএক.কে.ক্লোক অনুমতি যোগ করতে ভুলবেন না:

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

ছোট প্রশ্ন আমার সন্দেহ আছে। যদি আমার পরিষেবাটি কোনও পরিষেবা এবং ইনটেন্ট সার্ভিস না হয় তবে আমি এইভাবে ব্যবহার করতে পারি না, কারণ অন্যান্ডেলইন্ডেন্ড পদ্ধতিটি সরল পরিষেবাতে ওভাররাইড করা যায় না ?
পাওলো 2988

আমারও একই সমস্যা হচ্ছে। আপনি আমাকে সাহায্য করতে আপত্তি? ধন্যবাদ! stackoverflow.com/questions/35373525/starting-my-service
Ruchir Baronia

হয়তো ব্যবহার করবেন onNewIntent()? অথবা আপনি ইনটেন্ট সার্ভিসের উত্সটি দেখতে পারেন এবং এটি মিলিয়ে তুলতে আপনার পরিষেবার জন্য আপনার কী করা দরকার তা দেখতে
পেয়েছেন

1

আসলে, আমি খুব বেশিদিন আগেই এই সমস্যায় পড়েছি, এবং এটি ঠিক করা সত্যিই সহজ, আপনি "android.intent.action.BOOT_COMPLETED"অনুমতি এবং অভিপ্রায়-ফিল্টার সেটআপ করলে আপনি আসলে কোনও ভুল করেন না ।

মনোযোগ দিন যে আপনি অ্যান্ড্রয়েড X. এক্স এ, বুটে সার্ভিস শুরু করার আগে আপনাকে ব্রডকাস্ট শ্রোতা চালাতে হবে, তার অর্থ আপনাকে প্রথমে একটি ক্রিয়াকলাপ যোগ করতে হবে, একবার আপনার সম্প্রচার রিসিভার চলার পরে, আপনার অ্যাপ্লিকেশনটি আপনার প্রত্যাশা অনুযায়ী কাজ করা উচিত, যাইহোক, অ্যান্ড্রয়েড on. এক্স এ, আমি কোনও কার্যকলাপ ছাড়াই বুটে সার্ভিস শুরু করার কোনও উপায় খুঁজে পাইনি, আমি মনে করি সুরক্ষার কারণে গুগল এটি করেছে।


0

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

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