import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.lang.Thread.UncaughtExceptionHandler;
import android.app.Application;
// 应用程序 配置到清单文件中
public class MyApplication extends Application {
// 程序最先执行的
@Override
public void onCreate() {
super.onCreate();
// 程序运行首先调用
System.out.println("Application");
Thread.currentThread().setUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
}
//处理为捕获的异常
private class MyUncaughtExceptionHandler implements UncaughtExceptionHandler{
// 死后的遗言
@Override
public void uncaughtException(Thread thread, Throwable ex) {
File file=new File("/mnt/sdcard/error.txt");
PrintStream err=null;
try {
err = new PrintStream(file);
ex.printStackTrace(err);// 把异常写到文件中
err.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 自杀的处理 首先杀死当前进程 然后重启下程序 回到报错的activity上一个界面
android.os.Process.killProcess(android.os.Process.myPid());
}
}
}
自杀比较容易,那么如何在自杀之后重启本程序呢?
/**
* 启动应用程序
*/
private void startApp() {
// 遍历清单文件 找到 带有 main意图过滤器的Activity
PackageManager manager=getPackageManager();
// try {
// //PackageInfo packageInfo = manager.getPackageInfo(appInfo.getPackageName(), 0);
// man
// } catch (NameNotFoundException e) {
// e.printStackTrace();
// }
Intent launchIntentForPackage = manager.getLaunchIntentForPackage(appInfo.getPackageName());
if(launchIntentForPackage!=null)
startActivity(launchIntentForPackage);
else
Toast.makeText(getApplicationContext(), "关键服务不能直接启动", 0).show();
}
appInfo是得到要启动的程序的包名,所以说,只要知道一个应用程序的包名,就可以通过这种方式来启动他。
再推荐几个比较常用的:
// 详细信息的功能
private void detail() {
Intent intent=new Intent("android.settings.APPLICATION_DETAILS_SETTINGS");
intent.setData(Uri.parse("package:"+appInfo.getPackageName()));
startActivity(intent);
}
private void sharedApp() {
// <intent-filter>
// <action android:name="android.intent.action.SEND" />
// <category android:name="android.intent.category.DEFAULT" />
// <data android:mimeType="text/plain" />
// </intent-filter>
Intent intent=new Intent();
intent.setAction("android.intent.action.SEND");
intent.addCategory("android.intent.category.DEFAULT");
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "推荐您一款应用程序"+appInfo.getName()+"下载地址 goole市场");
startActivity(intent);
// 微信 微博 空间 陌陌
}
private void uninistallApp() {
// <intent-filter>
// <action android:name="android.intent.action.VIEW" />
// <action android:name="android.intent.action.DELETE" />
// <category android:name="android.intent.category.DEFAULT" />
// <data android:scheme="package" />
// </intent-filter>
if (appInfo.isUser()) {
if(appInfo.getPackageName().equals(getPackageName())){
Toast.makeText(getApplicationContext(), "休想卸载当前软件!!!!", 0).show();
return ;
}
Intent intent = new Intent("android.intent.action.DELETE");
intent.addCategory("android.intent.category.DEFAULT");
intent.setData(Uri.parse("package:" + appInfo.getPackageName()));
startActivityForResult(intent, 0);
} else {
Toast.makeText(getApplicationContext(), "系统程序需要root权限才可以卸载", 0)
.show();
}
// userInfos.remove(appInfo);
}