public class KeyguardSelectorView extends LinearLayout implements KeyguardSecurityView { ... ... public void onTrigger(View v, int target) { final int resId = mGlowPadView.getResourceIdForTarget(target); switch (resId) { case R.drawable.ic_action_assist_generic: Intent assistIntent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE)) .getAssistIntent(mContext, true, UserHandle.USER_CURRENT); if (assistIntent != null) { mActivityLauncher.launchActivity(assistIntent, false, true, null, null); } else { Log.w(TAG, "Failed to get intent for assist activity"); } mCallback.userActivity(0); break; case R.drawable.ic_lockscreen_camera: mActivityLauncher.launchCamera(null, null); mCallback.userActivity(0); break;frameworks/base/packages/Keyguard/src/com/android/keyguard/KeyguardActivityLauncher.java//參考camera,再復製一個出來即可 case R.drawable.ic_lockscreen_abc: mActivityLauncher.launchNNTest(); mCallback.userActivity(0); break;case R.drawable.ic_lockscreen_unlock_phantom: case R.drawable.ic_lockscreen_unlock: mCallback.userActivity(0); mCallback.dismiss(false); break; } } }
public abstract class KeyguardActivityLauncher { ... ... private static final Intent MYINTENT = new Intent (); public void launchCamera(Handler worker, Runnable onSecureCameraStarted) { LockPatternUtils lockPatternUtils = getLockPatternUtils(); // Workaround to avoid camera release/acquisition race when resuming face unlock // after showing lockscreen camera (bug 11063890). KeyguardUpdateMonitor.getInstance(getContext()).setAlternateUnlockEnabled(false); if (lockPatternUtils.isSecure()) { // Launch the secure version of the camera if (wouldLaunchResolverActivity(SECURE_CAMERA_INTENT)) { // TODO: Show disambiguation dialog instead. // For now, we'll treat this like launching any other app from secure keyguard. // When they do, user sees the system's ResolverActivity which lets them choose // which secure camera to use. launchActivity(SECURE_CAMERA_INTENT, false, false, null, null); } else { launchActivity(SECURE_CAMERA_INTENT, true, false, worker, onSecureCameraStarted); } } else { // Launch the normal camera launchActivity(INSECURE_CAMERA_INTENT, false, false, null, null); } }setClassName(Context packageContext, String className)public void launchNNTest() { MYINTENT.setClassName("com.main","com.main.MainActivity"); launchActivity(MYINTENT, false, false, null, null); }}
對apk右鍵兩下,可以看到AndroidManifest.xml
利用反組譯來取得package和classname
命令:java -jar AXMLPrinter2.jar AndroidManifest.xml > test.txt
下載:AXMLPrinter2.jar
圖片的位置:
frameworks/base/packages/Keyguard/res/drawable/ic_lockscreen_camera.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true" android:state_active="false" android:state_focused="false" android:drawable="@drawable/ic_lockscreen_camera_normal" /> <item android:state_enabled="true" android:state_active="true" android:state_focused="false" android:drawable="@drawable/ic_lockscreen_camera_activated" /> <item android:state_enabled="true" android:state_active="false" android:state_focused="true" android:drawable="@drawable/ic_lockscreen_camera_activated" /> </selector>res/layout/keyguard_glow_pad_view.xml
<com.android.internal.widget.multiwaveview.GlowPadView xmlns:prvandroid="http://schemas.android.com/apk/prv/res/android" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/glow_pad_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:orientation="horizontal" android:gravity="@integer/kg_selector_gravity" android:contentDescription="@string/keyguard_accessibility_slide_area" prvandroid:targetDrawables="@array/lockscreen_targets_unlock_only //讀取資料,如下" prvandroid:targetDescriptions="@array/lockscreen_target_descriptions_unlock_only" prvandroid:directionDescriptions="@array/lockscreen_direction_descriptions" prvandroid:handleDrawable="@drawable/ic_lockscreen_handle" .... .... />裡面還有其它設定
res/values/arrays.xml (裡面還有其它的,可以自行擇一)
<array name="lockscreen_targets_unlock_only"> <item>@drawable/ic_lockscreen_unlock</item> //上 <item>@drawable/ic_lockscreen_aaa</item> //右 <item>@drawable/ic_lockscreen_abb</item> //下 <item>@null</item> //左 </array>超過4個時,排的型狀,就要在找一下了
這邊有些關於鎖屏的參考文章:
王宪明的android学习之旅 - android锁屏解析二
王宪明的android学习之旅 - android锁屏解析三
Balancor
APK反組譯取得packagename classname
沒有留言:
張貼留言