অ্যান্ড্রয়েড: জাভা.লাং.সিকিউরিটি এক্সসেপশন: অনুমতি অস্বীকার: ইন্টেন্ট শুরু করুন


112

আমি GWVectraNotifier ক্রিয়াকলাপ সহ একটি অ্যাপ্লিকেশন তৈরি করেছি যা অন্যান্য অ্যাপ্লিকেশন থেকে বিজ্ঞপ্তি প্রদর্শনের জন্য ডাকা হয়।

বিজ্ঞপ্তি সংলাপে, 'শো' বোতাম এবং 'বন্ধ' বোতামটি থাকবে।

'শো' বাটনে ক্লিক করুন, সম্পর্কিত ক্রিয়াকলাপ শুরু হবে।

উপরের অ্যাপ্লিকেশনটির কার্যকারিতা পরীক্ষা করতে,

আমি চেকমেইল ইভেন্ট ট্রিগারে কে 9 মেল অ্যাপ্লিকেশন থেকে GWVectraNotifier ক্রিয়াকলাপটি শুরু করেছি।

আমি GWVectraNotifier ক্রিয়াকলাপ সফলভাবে শুরু করতে সক্ষম হয়েছি, তবে 'শো' বোতামের অন্লিক আমাকে K9mail এর 'ম্যাসেজলিস্ট' ক্রিয়াকলাপটি শুরু করতে হবে do এটি করার জন্য, আমি নীচের কোডটি লিখেছিলাম:

Intent i = new Intent();
i.setComponent(new ComponentName("com.fsck.k9", "com.fsck.k9.activity.MessageList"));
i.putExtra("account", accUuid);
i.putExtra("folder", accFolder);
startActivity(i); 

যা ছুড়ে:

WARN/ActivityManager(59): Permission denied: checkComponentPermission() reqUid=10050
WARN/ActivityManager(59): Permission Denial: starting Intent { cmp=com.fsck.k9/.activity.MessageList (has extras) } from ProcessRecord{43f6d7c8 675:com.i10n.notifier/10052} (pid=675, uid=10052) requires null
WARN/System.err(675): java.lang.SecurityException: Permission Denial: starting Intent { cmp=com.fsck.k9/.activity.MessageList (has extras) } from ProcessRecord{43f6d7c8 675:com.i10n.notifier/10052} (pid=675, uid=10052) requires null
WARN/System.err(675):     at android.os.Parcel.readException(Parcel.java:1247)
WARN/System.err(675):     at android.os.Parcel.readException(Parcel.java:1235)
WARN/System.err(675):     at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1298)
WARN/System.err(675):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1373)
WARN/System.err(675):     at android.app.Activity.startActivityForResult(Activity.java:2817)
WARN/System.err(675):     at android.app.Activity.startActivity(Activity.java:2923)
WARN/System.err(675):     at com.i10n.notifier.GWVectraNotifier$2$1.run(GWVectraNotifier.java:63)
WARN/System.err(675):     at android.app.Activity.runOnUiThread(Activity.java:3707)
WARN/System.err(675):     at com.i10n.notifier.GWVectraNotifier$2.onClick(GWVectraNotifier.java:53)
WARN/System.err(675):     at android.view.View.performClick(View.java:2408)
WARN/System.err(675):     at android.view.View$PerformClick.run(View.java:8816)
WARN/System.err(675):     at android.os.Handler.handleCallback(Handler.java:587)
WARN/System.err(675):     at android.os.Handler.dispatchMessage(Handler.java:92)
WARN/System.err(675):     at android.os.Looper.loop(Looper.java:123)
WARN/System.err(675):     at android.app.ActivityThread.main(ActivityThread.java:4627)
WARN/System.err(675):     at java.lang.reflect.Method.invokeNative(Native Method)
WARN/System.err(675):     at java.lang.reflect.Method.invoke(Method.java:521)
WARN/System.err(675):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
WARN/System.err(675):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
WARN/System.err(675):     at dalvik.system.NativeStart.main(Native Method)

আসলে আমি বুঝতে পারি না কে 9 মেলের মেসেজলিস্ট অ্যাক্সেস করার জন্য আমার নোটিফায়ার অ্যাপ্লিকেশনটির ম্যানিফেস্ট ফাইলটিতে কোন অনুমতিগুলি অন্তর্ভুক্ত করতে হবে। আমি k9mail অ্যাপ্লিকেশনটির ম্যানিফেস্ট ফাইলের অন্তর্ভুক্ত অনুমতিগুলির নীচে আটকানো করছি:

<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
<uses-permission android:name="android.permission.READ_OWNER_DATA"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="org.thialfihar.android.apg.permission.READ_KEY_DETAILS"/>
<permission android:name="com.fsck.k9.permission.READ_ATTACHMENT"
            android:permissionGroup="android.permission-group.MESSAGES"
            android:protectionLevel="dangerous"
            android:label="@string/read_attachment_label"
            android:description="@string/read_attachment_desc"/>
<uses-permission android:name="com.fsck.k9.permission.READ_ATTACHMENT"/>
<permission android:name="com.fsck.k9.permission.REMOTE_CONTROL"
             android:permissionGroup="android.permission-group.MESSAGES"
             android:protectionLevel="dangerous"
             android:label="@string/remote_control_label"
             android:description="@string/remote_control_desc"/>
<uses-permission android:name="com.fsck.k9.permission.REMOTE_CONTROL"/>
<permission android:name="com.fsck.k9.permission.READ_MESSAGES"
            android:permissionGroup="android.permission-group.MESSAGES"
            android:protectionLevel="normal"
            android:label="@string/read_messages_label"
            android:description="@string/read_messages_desc"/>
<uses-permission android:name="com.fsck.k9.permission.READ_MESSAGES"/>
<permission android:name="com.fsck.k9.permission.DELETE_MESSAGES"
            android:permissionGroup="android.permission-group.MESSAGES"
            android:protectionLevel="normal"
            android:label="@string/delete_messages_label"
            android:description="@string/read_messages_desc"/>
<uses-permission android:name="com.fsck.k9.permission.DELETE_MESSAGES"/>           

আমার অ্যাপ্লিকেশনটিতে কোন অনুমতিটি অন্তর্ভুক্ত করার জন্য কেউ আমাকে বলতে পারবেন? উপরের অনুমতিগুলিতে কিছু কেবল k9mail এর জন্য, কারণ সেগুলি কে -9-র জন্য লেখা অনুমতি শ্রেণি। সুতরাং, আমি কেবল উপরের প্রদত্ত অনুমতিগুলিতে অ্যান্ড্রয়েডের অন্তর্নির্মিত অনুমতিগুলি অন্তর্ভুক্ত করতে সক্ষম হব। আমি পাশাপাশি চেষ্টা করেও চেষ্টা করেছি, তবে এটি আমার সমস্যার সমাধান করেনি :(


আমি এটিকে অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএলে ম্যাসেজলিস্ট অ্যাক্টিভিটি ট্যাগের অধীনে ম্যানিফেস্ট ফাইলটিতে নিম্নলিখিত উদ্দেশ্যগুলি ফিল্টারটি যুক্ত করে সমাধান করেছি: <ইন্টেন্ট-ফিল্টার> <অ্যাকশন অ্যান্ড্রয়েড: নাম = "android.intent.action.MAIN" /> </ অভিপ্রায়-ফিল্টার >
স্বার্থী ইপি

আমি উভয় << ইন্টেন্ট-ফিল্টার> <অ্যাকশন অ্যান্ড্রয়েড: নাম = "android.intent.action.MAIN" /> </intent-filter> এবং অ্যান্ড্রয়েড: এক্সপোর্টড = "সত্য" তবে এখনও আমি জাভা.লং.সিকিউরিটি পাচ্ছি ব্যতিক্রম? আপনি কি দয়া করে এটি সমাধান করতে আমাকে সহায়তা করতে পারেন ..
চরণ পাই

উত্তর:


155

আপনি android:exported="true"যে ক্রিয়াকলাপটি শুরু করার চেষ্টা করছেন তাতে আপনাকে ম্যানিফেস্ট ফাইলটিতে যুক্ত করতে হবে।

অ্যান্ড্রয়েড থেকে : রফতানি ডকুমেন্টেশন :

অ্যান্ড্রয়েড:
অন্যান্য অ্যাপ্লিকেশনগুলির উপাদানগুলির দ্বারা ক্রিয়াকলাপ চালু করা যায় কিনা - তা রফতানি করা হয় - "সত্য" যদি হতে পারে তবে এবং "মিথ্যা" না থাকলে। যদি "মিথ্যা" থাকে তবে ক্রিয়াকলাপটি একই অ্যাপ্লিকেশনটির উপাদান বা একই ব্যবহারকারীর আইডি সহ কেবল অ্যাপ্লিকেশন দ্বারা চালু করা যেতে পারে।

ডিফল্ট মানটিতে ক্রিয়াকলাপের অভিপ্রায় ফিল্টার রয়েছে কিনা তা নির্ভর করে। কোনও ফিল্টারের অনুপস্থিতির অর্থ হ'ল ক্রিয়াকলাপটি কেবল তার সঠিক শ্রেণীর নাম নির্দিষ্ট করেই চাওয়া যেতে পারে। এর দ্বারা বোঝা যায় যে ক্রিয়াকলাপটি কেবল অ্যাপ্লিকেশন-অভ্যন্তরীণ ব্যবহারের উদ্দেশ্যে করা হয় (যেহেতু অন্যরা শ্রেণীর নাম জানতেন না) সুতরাং এই ক্ষেত্রে, ডিফল্ট মানটি "মিথ্যা"। অন্যদিকে, কমপক্ষে একটি ফিল্টারের উপস্থিতি বোঝায় যে ক্রিয়াকলাপটি বাহ্যিক ব্যবহারের উদ্দেশ্যে, সুতরাং ডিফল্ট মানটি "সত্য"।

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


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

102

java.lang.SecurityExceptionআপনি দেখতে পাচ্ছেন কারণ আপনি একই কার্যকলাপ ইশারা দুই এন্ট্রি লিখতে পারেন। দ্বিতীয়টি সরান এবং আপনার যেতে ভাল হওয়া উচিত।

আরও ব্যাখ্যা

আপনাকে বিভিন্ন বৈশিষ্ট্য সহ ম্যানিফেস্টে 2 বার ক্রিয়াকলাপ হিসাবে ঘোষণা করা যেতে পারে, যেমন:

 <activity android:name=".myclass"> </activity>

এবং

 <activity android:name=".myclass" android:label="@string/app_name"> 
     <intent-filter> 
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
 </activity>

আপনি ম্যানিফেস্ট থেকে অযাচিত একটি অপসারণ করা উচিত


2
আপনাকে বিভিন্ন বৈশিষ্ট্য সহ ম্যানিফেস্টে 2 বার ক্রিয়াকলাপ হিসাবে ঘোষণা করা যেতে পারে, যেমন: <ক্রিয়াকলাপ অ্যান্ড্রয়েড: নাম = "my মাইক্র্লাস"> </activity> এবং <ক্রিয়াকলাপ অ্যান্ড্রয়েড: নাম = "my মাইক্লাস" অ্যান্ড্রয়েড: লেবেল = "@ স্ট্রিং / app_name "> <ইনটেন্ট-ফিল্টার> <অ্যাকশন অ্যান্ড্রয়েড: নাম =" android.intent.action.MAIN "/> <বিভাগ অ্যান্ড্রয়েড: নাম =" android.intent.category.LAUNCHER "/> </intent-filter> < / ক্রিয়াকলাপ> আপনার ম্যানিফেস্ট থেকে
অযাচিতকে

1
দুর্দান্ত উত্তর জোমিয়া।কিন্তু একটি প্রশ্ন, একবারে আমার কাছে কেবল একটি লঞ্চার ক্রিয়াকলাপ রয়েছে। এবং একই কোড ইমলোটার দিয়ে চালানো হয় তবে ডিভাইসে এটি সুরক্ষা ব্যতিক্রম দেখায় you আপনি দয়া করে বিস্তারিত বলতে পারেন।
তোফিক আহমেদ

আমি মনে করি আপনাকে ডিভাইসে অ্যাপটি আনইনস্টল করতে হবে এবং এটি আবার ইনস্টল করতে হবে। তারপরে এটি কাজ করবে
Jomia

16

আপনার ম্যানিফেস্ট ফাইলটিতে এটি আগে লিখুন </application >

<activity android:name="com.fsck.k9.activity.MessageList">
   <intent-filter>
      <action android:name="android.intent.action.MAIN">
      </action>
   </intent-filter>
</activity>

এবং যদি এটি আপনার সমস্যার সমাধান করে তবে আমাকে বলুন :)


লগগুলি দেখে আমি নিশ্চিত যে এটি সাহায্য করবে। এখানে আপনার সম্পূর্ণ মেনিফেস্ট ফাইলটি একটি জিনিস
মুহাম্মদ শাহাব

<ম্যানিফেস্ট xMLns: অ্যান্ড্রয়েড = " স্কিমাস.অ্যান্ড্রয়েড. com/apk/res/android " প্যাকেজ = "com.i10n.notifier" অ্যান্ড্রয়েড: সংস্করণকোড = "1" অ্যান্ড্রয়েড: সংস্করণনাম = "1.0"> <ব্যবহার-অনুমতি অ্যান্ড্রয়েড: নাম = "android.permission.RECEIVE_BOOT_COMPLETED" /> <ব্যবহার-অনুমতি Android: নাম = "android.permission.READ_CONTACTS" /> <ব্যবহার-অনুমতি Android: নাম = "android.permission.READ_SYNC_SETTINGS" /> <ব্যবহার-অনুমতি অ্যান্ড্রয়েড: নাম = "android.permission.READ_OWNER_Data" /> <ব্যবহার-অনুমতি অ্যান্ড্রয়েড: নাম = "android.permission.ACCESS_NETWORK_STATE" />
স্বার্থী ইপি

<ব্যবহার-অনুমতি অ্যান্ড্রয়েড: নাম = "android.permission.INTERNET" /> <ব্যবহার-অনুমতি অ্যান্ড্রয়েড: নাম = "android.permission.VIBRATE" /> <ব্যবহার-অনুমতি অ্যান্ড্রয়েড: নাম = "android.permission.WAKE_LOCK" / > <ব্যবহার-অনুমতি অ্যান্ড্রয়েড: নাম = "android.permission.WRITE_EXTERNAL_STORAGE" /> <অ্যাপ্লিকেশন অ্যান্ড্রয়েড: আইকন = "@ অঙ্কনযোগ্য / আইকন" অ্যান্ড্রয়েড: লেবেল = "@ স্ট্রিং / অ্যাপ_নাম" অ্যান্ড্রয়েড: থিম = "@ অ্যান্ড্রয়েড: শৈলী / Theme.NoTitleBar "> <কার্যকলাপ android: নাম =" GWVectraNotifier "Android: লেবেল =" @ স্ট্রিং / APP_NAME "অ্যান্ড্রয়েড থিম =" @ অ্যানড্রইড: শৈলী / Theme.Dialog ">।
Swathi ইপি

<intent-filter> <অ্যাকশন অ্যান্ড্রয়েড: নাম = "android.intent.action.MAIN" /> <বিভাগ অ্যান্ড্রয়েড: নাম = "android.intent.category.LAUNCHER" /> </ i> - ফিল্টার> </ কার্যকলাপ> < / অ্যাপ্লিকেশন> </ ম্যানিফেস্ট>
স্বাথি ইপি

উপরের 3 টি মন্তব্যে আমি আমার বিজ্ঞাপক অ্যাপ্লিকেশন ম্যানিফেস্ট ফাইলটি আটকে রেখেছি। আপনার উত্তর দেওয়ার জন্য ধন্যবাদ.
সোয়াথি ইপি

7

এই সঠিক কার্যকলাপে আমার এই সমস্যা ছিল।

আপনি com.fsck.k9.activity.MessageList কোনও বাহ্যিক কার্যকলাপ থেকে শুরু করতে পারবেন না।

আমি এটি দিয়ে সমাধান করেছি:

Intent LaunchK9 = getPackageManager().getLaunchIntentForPackage("com.fsck.k9"); this.startActivity(LaunchK9);

Http://developer.android.com/references/android/content/pm/PackageManager.html ব্যবহার করা হচ্ছে


6

আমি একই ইস্যুতে চলছিলাম এবং আপনি বর্ণিত হিসাবে ইন্টেন্ট ফিল্টারটি এড়াতে চেয়েছিলেন। কিছু খননের পরে, আমি একটি এক্সএমএল অ্যাট্রিবিউট অ্যান্ড্রয়েড পেয়েছি : রফতানি করেছে যে আপনাকে বলা যেতে চাইছে এমন ক্রিয়াকলাপে আপনাকে যুক্ত করা উচিত।

এটি কোনও ক্রিয়াকলাপের সাথে যদি কোনও ক্রিয়াকলাপ যোগ না করে তবে এটি ডিফল্টরূপে মিথ্যাতে সেট করা হয় তবে আপনার যদি কোনও উদ্দিষ্ট ফিল্টার থাকে তা সত্য হয়ে যায়।

এখানে ডকুমেন্টেশন রয়েছে http://developer.android.com/guide/topics/manifest/activity-element.html# এক্সপোর্ট

tl; dr: android:exported="true"আপনার অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল ফাইলটিতে আপনার ক্রিয়াকলাপে যুক্ত করুন এবং অভি-ফিল্টার যুক্ত করা এড়াবেন :)


1

উপাদানটির "রফতানি" পতাকাটি সত্য হিসাবে সেট করা আছে তা নিশ্চিত করুন। অনুমতিটি নির্ধারণকারী উপাদানটি যে উপাদানটি এটি ব্যবহার করে তার আগে ইনস্টল করা উচিত।


এছাড়াও আপনাকে নিশ্চিত করতে হবে যে সিস্টেম স্তর / বিলাসিতা উপভোগ করতে আপনার কাছে সিস্টেম / বেসরকারী-অ্যাপ পার্টিশনে অ্যাপ রয়েছে। এটি KitKat এর পরবর্তী ডিভাইসে প্রয়োজনীয়
নরেন

1

এটি কনফিগারেশনে আপনার ত্রুটি হতে পারে এটি সহজ।

উদাহরণস্বরূপ: ম্যানিফেস্ট.এক্সএমএল

এখানে চিত্র বর্ণনা লিখুন

তবে আমার কনফিগারেশনে ডিফল্ট ক্রিয়াকলাপ রয়েছে pla

এখানে চিত্র বর্ণনা লিখুন

আপনার এই কনফিগারেশনটি এবং ফাইল ম্যানিফেস্ট.এক্সএমএল পরীক্ষা করা দরকার

শুভকামনা


1

আমি target sdk19 টি থেকে কিটক্যাট সংস্করণটি পরিবর্তন করে এই ব্যতিক্রমটি সমাধান করেছিAndroidManifest.xml.

<uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

বিটিডাব্লু, এই মুহুর্তে গ্রেডল এটির যত্ন নেয়, এবং অ্যান্ড্রয়েড বিকাশকারীরা ম্যানিফেস্ট ফাইলে
sdk

1
একটি ভয়ানক সমাধান আছে। কখনও নিচের দিকে লক্ষ্য রাখবেন না।
জ্যারেড বুরোজ

এটি কাজ করবে তবে একটি উচ্চ সম্ভাবনা রয়েছে যা এটি সমাধানের চেয়ে আরও বেশি সমস্যার সৃষ্টি করবে। আমার মতামত
জানায়

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