簡體   English   中英

無法調用com.android.settings.ChooseLockPassword活動

[英]Can't call com.android.settings.ChooseLockPassword activity

我試圖從我自己的應用程序中調用ChooseLockPassword活動,但是發生異常。

Java代碼:

Intent intent = new Intent(Intent.ACTION_RUN);
intent.setComponent(new ComponentName("com.android.settings", "com.android.settings.ChooseLockPassword"));
startActivity(intent);

Android清單

<!-- Lock Screen. -->
<activity android:name="ChooseLockPassword"
          android:exported="true">

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

</activity>  

例外

04-25 17:54:48.599: E/AndroidRuntime(6739): FATAL EXCEPTION: main
04-25 17:54:48.599: E/AndroidRuntime(6739): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.SystemPIN/com.test.SystemPIN.SystemPINTestActivity}: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.RUN cmp=com.android.settings/.ChooseLockPassword } from ProcessRecord{40652e98 6739:com.test.SystemPIN/10033} (pid=6739, uid=10033) requires null
04-25 17:54:48.599: E/AndroidRuntime(6739):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
04-25 17:54:48.599: E/AndroidRuntime(6739):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
04-25 17:54:48.599: E/AndroidRuntime(6739):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
04-25 17:54:48.599: E/AndroidRuntime(6739):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
04-25 17:54:48.599: E/AndroidRuntime(6739):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-25 17:54:48.599: E/AndroidRuntime(6739):     at android.os.Looper.loop(Looper.java:123)
04-25 17:54:48.599: E/AndroidRuntime(6739):     at android.app.ActivityThread.main(ActivityThread.java:3683)

<snip>

04-25 17:54:48.599: E/AndroidRuntime(6739): Caused by: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.RUN cmp=com.android.settings/.ChooseLockPassword } from ProcessRecord{40652e98 6739:com.test.SystemPIN/10033} (pid=6739, uid=10033) requires null
04-25 17:54:48.599: E/AndroidRuntime(6739):     at android.os.Parcel.readException(Parcel.java:1322)
04-25 17:54:48.599: E/AndroidRuntime(6739):     at android.os.Parcel.readException(Parcel.java:1276)
04-25 17:54:48.599: E/AndroidRuntime(6739):     at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1351)

<snip>

您將獲得一個權限被拒絕的異常,這意味着您需要更多權限。 按要求列出的權限為null ,表明您可能根本不被允許調用該活動。

我找到了解決方案,並希望與您分享。

如果您有android源代碼,則可以在Settings清單文件中進行一些修改,該文件位於packages \\ apps \\ settings \\ scr \\ com \\ android \\ settings \\ AndroidManifest.xml

<activity android:name="ChooseLockPassword" android:exported="false"
            android:windowSoftInputMode="stateVisible|adjustResize"/>

行並設置android:exported =“ true”而不是“ false”后,您可以重新編譯源代碼並使用以下幾行調用該對話框

Intent intent = new Intent(Intent.ACTION_RUN);
intent.setComponent(new ComponentName("com.android.settings", "com.android.settings.ChooseLockPassword"));
startActivity(intent);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM