我正在尝试从我自己的应用程序中调用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>
答案 0 :(得分:0)
您获得了权限被拒绝的异常,这意味着您需要更多权限。根据要求列出的权限为null
,表明可能根本不允许您调用该活动。
答案 1 :(得分:0)
我找到了解决方案并希望与您分享。
如果您有像我这样的Android源代码,您可以在设置清单文件中进行一些修改,该文件位于 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);