让LED47R5200开机自动播放电视
来源:互联网 发布:美知上海日语培训学校 编辑:程序博客网 时间:2024/04/29 07:33
说明
家里买了个康佳的LED47R5200PDE的Android电视,反应各种慢,操作各种不流畅。太郁闷了,感觉完全是被康佳和京东给坑了。打电话各种反应,结果是各种不理睬。特别是康佳,严重鄙视之。最让人讨厌的是每次开机都要进入Android主页,而不是直接播放电视。心中那个郁闷啊。这让开机时需要两个遥控器操作。
算了,求人不如求己,我自己写个开机自动播放电视的应用。
反编译分析
2013-12-15更新,下载地址在文件最后,
话不多说,下面开始。
==========================================================================================================
下载一个launch,反编译之。
1、首先查看AndroidManifest.xml文件,找到
<activity android:theme="@style/Theme" android:name="com.cyanogenmod.trebuchet.Launcher" android:clearTaskOnLaunch="true" android:stateNotNeeded="true" android:launchMode="singleTask" android:windowSoftInputMode="adjustPan"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.MONKEY" /> </intent-filter> </activity>
2、使用UltraEdit查看com.cyanogenmod.trebuchet.Launcher的代码(Launcher.smali),呼出函数列表,找到:
.method private startTVSystem()V .locals 7 .prologue .line 884 const-string v4, "activity" invoke-virtual {p0, v4}, Lcom/cyanogenmod/trebuchet/Launcher;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; move-result-object v0 check-cast v0, Landroid/app/ActivityManager; .line 885 .local v0, am:Landroid/app/ActivityManager; const/4 v4, 0x2 invoke-virtual {v0, v4}, Landroid/app/ActivityManager;->getRunningTasks(I)Ljava/util/List; move-result-object v4 const/4 v5, 0x0 invoke-interface {v4, v5}, Ljava/util/List;->get(I)Ljava/lang/Object; move-result-object v4 check-cast v4, Landroid/app/ActivityManager$RunningTaskInfo; iget-object v1, v4, Landroid/app/ActivityManager$RunningTaskInfo;->topActivity:Landroid/content/ComponentName; .line 886 .local v1, cn:Landroid/content/ComponentName; const-string v4, "Launcher" new-instance v5, Ljava/lang/StringBuilder; const-string v6, "the top activity==========" invoke-direct {v5, v6}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V invoke-virtual {v1}, Landroid/content/ComponentName;->getPackageName()Ljava/lang/String; move-result-object v6 invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v5 invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v5 invoke-static {v4, v5}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I .line 887 invoke-virtual {v1}, Landroid/content/ComponentName;->getPackageName()Ljava/lang/String; move-result-object v4 const-string v5, "com.konka.tvsettings" invoke-virtual {v4, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v4 if-eqz v4, :cond_0 .line 888 const-string v4, "Launcher" const-string v5, "the TV app is already on the top task list" invoke-static {v4, v5}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I .line 904 :goto_0 return-void .line 891 :cond_0 invoke-virtual {v1}, Landroid/content/ComponentName;->getPackageName()Ljava/lang/String; move-result-object v4 const-string v5, "com.konka.avenger" invoke-virtual {v4, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v4 if-eqz v4, :cond_1 .line 892 invoke-virtual {p0}, Lcom/cyanogenmod/trebuchet/Launcher;->closeTVWindow()V .line 894 const-wide/16 v4, 0x3e8 :try_start_0 invoke-static {v4, v5}, Ljava/lang/Thread;->sleep(J)V :try_end_0 .catch Ljava/lang/InterruptedException; {:try_start_0 .. :try_end_0} :catch_0 .line 900 :cond_1 :goto_1 new-instance v3, Landroid/content/Intent; const-string v4, "com.konka.tvsettings.intent.action.RootActivity" invoke-direct {v3, v4}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V .line 901 .local v3, intentActivity:Landroid/content/Intent; const/high16 v4, 0x1020 invoke-virtual {v3, v4}, Landroid/content/Intent;->addFlags(I)Landroid/content/Intent; .line 903 invoke-virtual {p0}, Lcom/cyanogenmod/trebuchet/Launcher;->getApplicationContext()Landroid/content/Context; move-result-object v4 invoke-virtual {v4, v3}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V goto :goto_0 .line 895 .end local v3 #intentActivity:Landroid/content/Intent; :catch_0 move-exception v2 .line 896 .local v2, e:Ljava/lang/InterruptedException; invoke-virtual {v2}, Ljava/lang/InterruptedException;->printStackTrace()V goto :goto_1.end method
找到:
new-instance v3, Landroid/content/Intent; const-string v4, "com.konka.tvsettings.intent.action.RootActivity" invoke-direct {v3, v4}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V .line 901 .local v3, intentActivity:Landroid/content/Intent; const/high16 v4, 0x1020 invoke-virtual {v3, v4}, Landroid/content/Intent;->addFlags(I)Landroid/content/Intent; .line 903 invoke-virtual {p0}, Lcom/cyanogenmod/trebuchet/Launcher;->getApplicationContext()Landroid/content/Context; move-result-object v4 invoke-virtual {v4, v3}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V
看看这儿:
invoke-direct {v3, v4}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V//看Intent的源码3439 /**3440 * Create an intent with a given action. All other fields (data, type,3441 * class) are null. Note that the action <em>must</em> be in a3442 * namespace because Intents are used globally in the system -- for3443 * example the system VIEW action is android.intent.action.VIEW; an3444 * application's custom action would be something like3445 * com.google.app.myapp.CUSTOM_ACTION.3446 *3447 * @param action The Intent action, such as ACTION_VIEW.3448 */3449 public Intent(String action) {3450 setAction(action);3451 }
3、把这段代码,用java表示出来,如下所示:
/** * 启动TV。 */ public void startTV() { //invoke-direct {v3, v4}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V Intent it = new Intent("com.konka.tvsettings.intent.action.RootActivity"); it.addFlags(0x1020); this.startActivity(it); }
4、写个APK,测试下。测试代码如下
package com.cnblogs.jevan.autostarttv;import com.cnblogs.jevan.autoplaytv.R;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;/** * 讨厌每次开机都要点击下遥控器的确认键才能播放电视,所以想自己写个应用程序。让塔开机每次都自动进入电视节目。 * @author jevan * @version (1.0 at 2013-6-14) 测试接口。 */public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ((Button)findViewById(R.id.button1)).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub startTV(); } }); } /** * 启动TV。 */ public void startTV() { //invoke-direct {v3, v4}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V Intent it = new Intent("com.konka.tvsettings.intent.action.RootActivity"); it.addFlags(0x1020); this.startActivity(it); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; }}
5、测试OK,效果正常。增加开机自动运行的功能。
迁移了博客,把代码补全,下面是开机自运行代码:
/** * @author enlangs (http://blog.csdn.net/enlangs) * @version (1.0 at 2013-6-15) 接受开机完成的消息。 * @version 1.2 at 2013-12-15 * */public class AutoRunBroadcastReceiver extends BroadcastReceiver {private final static String TAG = AutoRunBroadcastReceiver.class.getSimpleName();/* (non-Javadoc) * @see android.content.BroadcastReceiver#onReceive(android.content.Context, android.content.Intent) */@Overridepublic void onReceive(Context arg0, Intent arg1) {if(arg1.getAction().equals("android.intent.action.BOOT_COMPLETED")){Log.e(TAG,"=================== onReceive ========================");try {Thread.sleep(5000);//等5秒,給系統5秒时间准备硬件。可能5秒都不够。} catch (InterruptedException e) {e.printStackTrace();}Tools.startTV(arg0);}}}
使用说明:
一定要把应用程序放在/system/app目录下,也就是说,系统必须root,然后使用re文件管理器来移动文件。
下载地址
:http://download.csdn.net/detail/enlangs/6719879
完整源码:
https://github.com/enlangs/AutoStartTV
0 0
- 让LED47R5200开机自动播放电视
- 让电脑自动开机
- 关于Android 电视 viedo 自动播放
- 创维电视来电自动开机与设置开机画报
- 让程序开机自动运行
- 让程序开机自动启动
- 电脑自动开机并播放音乐
- 电脑自动开机并播放音乐
- Android开机启动自动播放视频
- 让Symbian应用程序开机自动启动
- 让Symbian应用程序开机自动启动
- 让Symbian应用程序开机自动启动
- 让Symbian应用程序开机自动启动
- 让Symbian应用程序开机自动启动
- 让Symbian应用程序开机自动启动
- 让Symbian应用程序开机自动启动
- 让Symbian应用程序开机自动启动
- 让Symbian应用程序开机自动启动
- C++中的虚函数!
- Android中的AutoMutex
- 突然想到的“社会发展历程”
- cpu性能天梯图
- 常用开放DNS服务器IP地址列表
- 让LED47R5200开机自动播放电视
- 《建立一个属于自己的AVR的RTOS》笔记——OSTaskSemPend
- Android中的java层的线程暂停和恢复实现
- 【转】DHCP的请求过程
- 第16周项目2--指来指去(1)
- Android中的socket本地通讯框架
- 测试:通过Office world 2007发布博文
- Android中java层使用LocalSocket和底层进行通讯
- Android查看stdout 和stderr