此文章仅供学习,切勿进行其他非F行为!
安装apk,打开应用查看应用启动信息。通过MP管理器的Activity记录器可以看到应用启动Activity是SplashActivity,比较良心的是启动Activity竟然没有广告。关于Activity的信息从AndroidManifest.xml中也能看出来。
其中来看一下对SplashActivity的定义,既然是入门,就看一下正向的内容。
<activity android:configChanges="keyboardHidden|orientation" android:label="@string/app_name" android:launchMode="singleTask" android:name="com.f0208.lebotv.SplashActivity" android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.MONKEY"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="f4u4e8"/>
</intent-filter>
</activity>
//其中android:configChanges和android:label都是对此Activity的属性的一些定义,具体的可以翻阅开发文档。
比如android:screenOrientation="landscape":指定了该 Activity 的屏幕方向为横向(横屏)。因为这是一个TV版应用,所以是横屏。
然后就是<intent-filter> 元素,用于指定该 Activity 的意图过滤器,即指定它可以响应的意图(Intent)。
<action android:name="android.intent.action.MAIN" />:指定了该 Activity 是应用程序的主要入口点,即它将作为主活动启动。
<category android:name="android.intent.category.DEFAULT" />:指定了默认的意图类别。
<category android:name="android.intent.category.MONKEY" />:指定了一个附加的意图类别,用于模拟器或测试工具。
<category android:name="android.intent.category.LAUNCHER" />:指定了该 Activity 将在应用程序启动器中显示为一个启动图标。
还有一个 <intent-filter> 元素,用于指定该 Activity 可以响应的另一个意图。
<action android:name="android.intent.action.VIEW" />:指定了该 Activity 可以响应 VIEW 意图,用于打开指定的数据。
<category android:name="android.intent.category.DEFAULT" />:指定了默认的意图类别。
<category android:name="android.intent.category.BROWSABLE" />:指定了一个附加的意图类别,表示该 Activity 可以由浏览器调用。
<data android:scheme="f4u4e8" />:指定了该 Activity 可以处理 f4u4e8 方案的数据。
应用启动后进入HomeActivity
public void a(Activity activity, a aVar, boolean z) {
b();
this.f3573b = new Dialog(activity); // 账号登录的Dialog初始化
View inflate = View.inflate(activity, C0444R.layout.user_form, null);
this.f3574c = (ProgressBar) inflate.findViewById(C0444R.id.progress);
this.f3574c.setIndeterminateDrawable(activity.getResources().getDrawable(C0444R.drawable.custom_progress_draw));
EditText editText = (EditText) inflate.findViewById(C0444R.id.user_name_et); // 账号输入
EditText editText2 = (EditText) inflate.findViewById(C0444R.id.user_pass_et); // 密码输入
this.f3573b.setTitle("账号登录");
this.f3573b.setContentView(inflate);
this.f3575d = (Button) inflate.findViewById(C0444R.id.btn_confirm);
this.e = (Button) inflate.findViewById(C0444R.id.btn_confirm_epsd); // 忘记密码按钮
this.f = (Button) inflate.findViewById(C0444R.id.btn_confirm_regist); // 注册按钮
this.f3575d.setOnClickListener(new View$OnClickListenerC0311g(this, editText, editText2, aVar)); // 登录按钮,点击后会跳转,传参就包含输入的账号密码
this.e.setOnClickListener(new View$OnClickListenerC0313i(this, activity, aVar, z));
this.f.setOnClickListener(new View$OnClickListenerC0315k(this, activity, aVar, z));
OnClickListenerC0311g
类的具体定义中,发现onclick函数。str
的布尔值数据。如果找不到对应的键名,则返回默认值 z
。if (!C0261f.a((Context) MyApplication.f3171a, "isUserLogin", false)) {
com.f0208.lebotv.g.J.a(MyApplication.f3171a, "请登录后再操作", (int) C0444R.drawable.toast_smile);
C0320p.a().a((Activity) this, (C0320p.a) new D(this), true);
} else if (this.C.size() == 0) {
r();
}
public static boolean a(Context context, String str, boolean z) {
return context.getSharedPreferences("com.f0208.lebotv", 0).getBoolean(str, z);
}