অ্যান্ড্রয়েড, অন্যান্য অ্যাপ্লিকেশন চালু হওয়ার সময় সনাক্ত করুন


94

আমি এমন একটি অ্যাপ্লিকেশন বিকাশের চেষ্টা করছি যা কোনও ব্যবহারকারীকে কোনও পাসওয়ার্ড ছাড়াই একটি নির্দিষ্ট অ্যাপটিতে যেতে বাধা দেয়। দৃশ্যটি হ'ল ...

  1. ব্যবহারকারী "ইমেল" অ্যাপ্লিকেশন ক্লিক করে (উদাহরণস্বরূপ)
  2. আমার অ্যাপ্লিকেশনটি একটি অ্যাপ্লিকেশন প্রবর্তন সনাক্ত করে
  3. আমার অ্যাপ্লিকেশন নিশ্চিত করে যে এটি "ইমেল" অ্যাপ্লিকেশন
  4. আমার অ্যাপ্লিকেশন একটি পাসওয়ার্ড জিজ্ঞাসা করে উপরের দিকে একটি ভিউ খুলবে
  5. ব্যবহারকারী একটি পাসওয়ার্ড প্রবেশ করান, যদি সঠিক হয় তবে আমার অ্যাপ্লিকেশনটি অদৃশ্য হয়ে যায়, উপরে "ইমেল" অ্যাপ্লিকেশন রেখে

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

কেউ সাহায্য করতে পারেন? আমি কি এটিকে সঠিকভাবে চলতে শুরু করছি, নতুন অ্যাপ্লিকেশনগুলি সন্ধানের উদ্দেশ্যটি সম্প্রচারিত করার জন্য খুঁজছি বা নতুন উদ্দেশ্যগুলির জন্য সিস্টেম লগটি পড়া বা দেশীয় কোডে কিছু করা উচিত?

যে কোনও পয়েন্টার সাহায্য করবে, আপনি যদি এর পুরোপুরি উত্তর না দিতে পারেন তবে আমি আরও কিছু গবেষণা করতে সক্ষম হব। অনেক ধন্যবাদ. আয়ান


তারা কীভাবে এটি করেছে তা আমি নিশ্চিত নই, তবে অ্যাপ প্রটেক্টর এর মতো অ্যাপ্লিকেশনগুলি আপনি যা চাইছেন ঠিক তাই করে তোলে, তাই এটি প্রযুক্তিগতভাবেই সম্ভব।
হ্যানস্পেইড

@ অ্যালান আপনি কীভাবে সমস্যার সমাধান করেছেন তা দয়া করে আপনার জ্ঞান ভাগ করে নিতে পারেন
নিদা

হাই আপনি সমাধান পেয়েছেন?
জিজ্ঞাসা সমাধানগুলি

উত্তর:


34

আমি মনে করি আমরা logcat এর আউটপুটটি ব্যবহার করতে এবং বিশ্লেষণ করতে পারি।

অনুরূপ সমস্ত প্রোগ্রামে আমি এই অনুমতি পেয়েছি:

android.permission.READ_LOGS

এর অর্থ তারা সকলেই এটি ব্যবহার করে তবে মনে হয় প্রোগ্রামটি শুরু হয় এবং এর পরে আমাদের প্রোগ্রাম (অ্যাপ প্রোটেক্টর) শুরু হয়ে সামনে আনবে।

নীচে কোড ব্যবহার করুন:

try
    {
        Process mLogcatProc = null;
        BufferedReader reader = null;
        mLogcatProc = Runtime.getRuntime().exec(new String[]{"logcat", "-d"});

        reader = new BufferedReader(new InputStreamReader(mLogcatProc.getInputStream()));

        String line;
        final StringBuilder log = new StringBuilder();
        String separator = System.getProperty("line.separator"); 

        while ((line = reader.readLine()) != null)
        {
            log.append(line);
            log.append(separator);
        }
        String w = log.toString();
        Toast.makeText(getApplicationContext(),w, Toast.LENGTH_LONG).show();
    }
    catch (Exception e) 
    {
        Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
    }

এবং ম্যানিফেস্ট ফাইলে এটির অনুমতি যুক্ত করতে ভুলবেন না।


দয়া করে, আমাদের এই কোডটি কোথায় রাখতে হবে? একটি পরিষেবা? অন ​​স্টার্টকমন্ডে ()?
হাইথেম স্যুইসি

57
জেলিবিয়ান এবং উপরের থেকে কাজ করবে না। READ_LOGS অনুমতি এখন কেবল সিস্টেম অ্যাপ্লিকেশনের জন্য সংরক্ষিত।
Ran

5
আপনি কি এ সম্পর্কে একেবারে নিশ্চিত? কারণ স্মার্ট অ্যাপলক জেবি ডিভাইসে এমনকি এটি করতে সক্ষম হয়েছে বলে মনে হচ্ছে। অ্যাপ্লিকেশনটি নিজেকে ডিভাইস প্রশাসকের স্থিতিতে উন্নীত করার কারণে কি? play.google.com/store/apps/…
কার্তিক বালাকৃষ্ণান

4
@ টোরসেলাইট, এই অ্যাপ্লিকেশনটির "চলমান কাজগুলি পান" অনুমতি রয়েছে, সুতরাং এটি পরিবর্তে সম্ভবত এই কৌশলটি ব্যবহার করছে।
স্যাম

4
@ রান তাই এখনই এটি কীভাবে ব্যবহার করতে হবে ... প্রশ্নটিতে বর্ণিত সমস্যা সমাধানের জন্য এখনই কি কোনও সমাধান পাওয়া যাচ্ছে যেহেতু আমার জেলি
বিনের

19

এটি করার একটি কৌতুকপূর্ণ উপায় হল একটি সময়সী লুপের সাথে একটি পরিষেবা রয়েছে যা পরীক্ষা করে

ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo = am.getRunningAppProcesses();

ফোনে কী চলছে তা দেখার জন্য আপনি সেই তালিকাটি দিয়ে চলেছেন। এখন আপনি তাদের আইডিস এবং প্রসেসনাম দিয়ে সনাক্ত করতে পারেন, তাই মানক ক্রিয়াকলাপের জন্য কাস্টমগুলির পক্ষে এটি খুব ভাল আপনি যদি এগুলি সমস্ত বৈষম্যমূলক আচরণ বন্ধ না করেন ...

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

পাসওয়ার্ড জিনিসের জন্য আপনি যখন কোনও অ্যাপ্লিকেশন সুরক্ষিত বা যেকোন কিছু খুঁজে পান তখনই আপনি আপনার ক্রিয়াকলাপ শুরু করতে পারেন।


অ্যাপটি চালু করা / পুনরায় চালু করার সময়টি পাওয়া কি সম্ভব?
লিয়েনা

4
এর android.app.usageপরিবর্তে অ্যান্ড্রয়েড এল ব্যবহার করুন প্যাকেজ। বিকাশকারী.অ্যান্ড্রয়েড.
com

12

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

আপনি যা করতে সক্ষম হবেন তা হ'ল লঞ্চারটি প্রতিস্থাপন করা । যদি ব্যবহারকারী এতে সম্মত হন।


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

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

12
class CheckRunningActivity extends Thread{
    ActivityManager am = null;
    Context context = null;

    public CheckRunningActivity(Context con){
        context = con;
        am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    }

    public void run(){
        Looper.prepare();

        while(true){
            // Return a list of the tasks that are currently running,
            // with the most recent being first and older ones after in order.
            // Taken 1 inside getRunningTasks method means want to take only
            // top activity from stack and forgot the olders.
            List< ActivityManager.RunningTaskInfo > taskInfo = am.getRunningTasks(1);

            String currentRunningActivityName = taskInfo.get(0).topActivity.getClassName();

            if (currentRunningActivityName.equals("PACKAGE_NAME.ACTIVITY_NAME")) {
                // show your activity here on top of PACKAGE_NAME.ACTIVITY_NAME
            }
        }
        Looper.loop();
    }
}

আপনি বর্তমান চলমান পেতে পারেন Activityএবং Activityএটি Email প্রয়োগের সাথে মিল রাখে কিনা তা পরীক্ষা করতে পারেন।

চালান CheckRunningActivity Threadউপর Applicationশুরু (বা ডিভাইস বুট)।

new CheckRunningActivity().start();

আপডেট: এই শ্রেণীর android.permission.GET_TASKSঅনুমতি প্রয়োজন , তাই ম্যানিফেস্টে পরবর্তী লাইন যুক্ত করুন:

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

আমি এই পদ্ধতির ব্যবহার করছি তবে এটি লুপের কারণে আপনার "// PACKAGE_NAME.ACTIVITY_NAME" এর উপরে আপনার ক্রিয়াকলাপটি এখানে প্রদর্শন করবে। তার জন্য কোনও কর্মসূচী?
অনুজ শর্মা

আপনি পছন্দসই ফলাফল পেলে চেকরানিংএকটিভিটির থ্রেডটি বন্ধ করুন
ভিয়েস্লাভ গায়দারজি

উত্তরের জন্য ধন্যবাদ, তাহলে / কখন এই থ্রেডটি আবার চালু হবে? আমি একটি স্টিকি পরিষেবা ব্যবহার করছি।
অনুজ শর্মা

সমস্যার প্রসঙ্গে নির্ভর করে, আরও বিশদে বিবরণ দিন দয়া করে আপনি কী পেতে চান।
ভায়াস্লাভ গায়দারজি

4
আপনার কোডে এখানে Looper.loop()বিবৃতিটি দেখে মনে হচ্ছে এটি while(true)কখনই শেষ হবে না লুপটি শেষ না হওয়ার কারণে । এটা কি ভুল?
স্যাম

11

মূল সমস্যাটি হ'ল লঞ্চার (হোম স্ক্রীন) সাধারণত স্পষ্ট উদ্দেশ্যগুলি ব্যবহার করার সময় আপনি অন্তর্নিহিত উদ্দেশ্যগুলি শোনার চেষ্টা করছেন।

একটি অন্তর্নিহিত উদ্দেশ্য হ'ল যখন আপনি "কেউ এই ভিডিওটি প্লে করেন" বলতে চান এবং অ্যান্ড্রয়েড এমন অ্যাপ্লিকেশন বেছে নেয় যা সেই উদ্দেশ্যটি পরিচালনা করতে পারে।

আপনি যখন হোম স্ক্রিনে "ইমেল" আইকনটি ক্লিক করেন তখন একটি স্পষ্ট উদ্দেশ্য হয়। এটি বিশেষত অ্যান্ড্রয়েডকে সম্পূর্ণরূপে যোগ্য নাম (যেমন com.android.mail বা কিছু) দ্বারা সেই নির্দিষ্ট অ্যাপটি খুলতে বলছে।

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

আপনি যা করার চেষ্টা করছেন তা অ্যান্ড্রয়েড সুরক্ষা মডেলের বিরুদ্ধে যায়।

আপনার সুরক্ষা ব্যবস্থায় অভিপ্রায়গুলি প্রেরণ করার জন্য নির্দিষ্ট অ্যাপ্লিকেশন বিকাশকারীদের সাথে অংশীদার হ'ল আপনি যা করতে পারেন তা কিন্তু আপনি সম্ভবত এটি মোকাবেলা করতে চান এমন কিছু নয়।


6

getRunningTasks() অ্যান্ড্রয়েড এল এ অবচয় করা হয়েছে

অ্যাপ ব্যবহারের পরিসংখ্যানগুলি পেতে আপনি android.app.usage প্যাকেজ থেকে UsageStats বর্গ ব্যবহার করতে পারেন ।

নতুন অ্যাপ ব্যবহারের পরিসংখ্যান এপিআই অ্যাপ্লিকেশন বিকাশকারীদের অ্যাপ্লিকেশনগুলির ব্যবহার সম্পর্কিত পরিসংখ্যান সংগ্রহ করার অনুমতি দেয়। এই API টি অবহেলিত getRecentTasks () পদ্ধতির চেয়ে আরও বিশদ ব্যবহারের তথ্য সরবরাহ করে।

এই এপিআই ব্যবহার করতে, আপনাকে অবশ্যই প্রথমে android.permission.PACKAGE_USAGE_STATSআপনার ম্যানিফেস্টে অনুমতি ঘোষণা করতে হবে । ব্যবহারকারীর অবশ্যই এই অ্যাপ্লিকেশনটির জন্য অ্যাক্সেস সক্ষম করতে হবে Settings > Security > Apps with usage access

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


ব্যবহারের পরিসংখ্যানগুলি কীভাবে অ্যাপটি অগ্রভাগে রয়েছে তা জেনে সহায়তা করতে পারে?
অজয়

3

সম্ভবত আপনার কোনও পরিষেবা দরকার, এমন কিছু যা অবিচ্ছিন্নভাবে পটভূমিতে চলবে। আপনি যা বলেছিলেন সেভাবে আপনার সেবা করা উচিত। অ্যান্ড্রয়েড.ইনটি.অ্যাকশন.আরগ্রিডে অ্যান্ড্রয়েড.ইনটিএন্ট.এই.এইচ.এই.এইচ.এস. ক্যাটাগরি সহ শুনুন। তারপরে সেই ব্রডকাস্ট রিসিভারটি অন-রিসিভ পদ্ধতিতে ওভাররাইড করে এবং অ্যাপ্লিকেশনটির নাম দেখতে চেক করুন etc.


4
এটি কেবল যে পদ্ধতি সম্পর্কে আমি ভাবছিলাম তার মতো মনে হচ্ছে তবে আমি বেসিক ব্রডকাস্টার্সিভারের সাথে মেইন (বিড়াল। লঞ্চার) সম্প্রচারের জন্য লড়াই করছি। এর আগে কি কেউ এই কাজ পরিচালনা করেছে? এই পর্যায়ে আমি কেবল একটি অ্যাপ্লিকেশন চালু হয়েছে বা পুনরায় শুরু হয়েছে তা সনাক্ত করতে চাই। তারপরে আমি প্যাকেজের নামটির সাথে তালিকার সাথে থাকা নাম (গুলি) ধারণ করে স্ট্রিংয়ের সাথে তুলনা করতে পারি।
ইয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.