那么 - 草稿

2020-03-12  本文已影响0人  mahongyin
//判断activity是否存在栈内
private boolean isExistActivity(Class<?> activity) {
    Intent intent = new Intent(getContext(), activity);
    ComponentName cmpName = intent.resolveActivity(getContext().getPackageManager());
    boolean flag = false;
    if (cmpName != null) {// 说明系统中存在这个activity
        ActivityManager am = (ActivityManager) getContext().getSystemService(ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> taskInfoList = am.getRunningTasks(10);//获取从栈顶开始往下查找的10个activity
        for (ActivityManager.RunningTaskInfo taskInfo : taskInfoList) {
            if (taskInfo.baseActivity.equals(cmpName)) {// 说明它已经启动了
                flag = true;
                break;//跳出循环,优化效率
            }
        }
    }
    return flag;//true 存在 falese 不存在
}

桌面快捷方式
添加权限:
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>桌面快捷方式
public void click1(View view) {
Parcelable icon = Intent.ShortcutIconResource.fromContext(
getApplicationContext(), R.drawable.logo);
Intent intent = new Intent();
intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
//生成图标的名称
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "你能");
//不允许重复创建
//intent.putExtra("duplicate", false);
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,icon);
Intent intent2 = new Intent();
intent2.setAction(Intent.ACTION_MAIN);
intent2.addCategory(Intent.CATEGORY_LAUNCHER);
intent2.setComponent(new ComponentName(this, MainActivity.class));
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent2);
sendBroadcast(intent);
}}

打开其他应用
PackageManager packageManager = getPackageManager(); Intent intent = new Intent(); intent = packageManager.getLaunchIntentForPackage("软件包名");
startActivity(intent);

保存assets2sdcard
public void copyFileFromAssetsToSDCard()throws Throwable{ InputStream inStream=getAssets().open("my.zip");
String filePath=android.os.Environment.getExternalStorageDirectory()
.getAbsolutePath()+"/"+"my.zip";
OutputStream outStream=new FileOutputStream(filePath);
byte[]buffer=new byte[1024];
int length=inStream.read(buffer);
outStream.write(buffer,0,length);
outStream.flush();
inStream.close();
outStream.close();

// 动画旋转

tv=(TextView) findViewById(R.id.mainTextView1);
an = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
an.setInterpolator(new LinearInterpolator());// 不停顿
an.setRepeatCount(100);// 重复次数
an.setFillAfter(true);// 停在最后
an.setDuration(4000);// 旋转一次的时间
tv.startAnimation(an);
系统分享
Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND);
去标题
super.onCreate(savedInstanceState);
requestWindowFeature ( Window.FEATURE_NO_TITLE );//取消标题

    getWindow ( ).setFlags ( WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                            WindowManager.LayoutParams.FLAG_FULLSCREEN );//设置全屏
    
            Toast.makeText(MainActivity.this,"好东西要分享哦",Toast.LENGTH_SHORT).show();
                shareIntent.putExtra(Intent.EXTRA_TEXT,      " 哈喽快来找他要吧!");
                shareIntent.setType("text/plain");
                startActivity(Intent.createChooser(shareIntent, "分享到"));

签名查
PackageInfo packageInfo = getPackageManager().getPackageInfo(packname, PackageManager.GET_SIGNATURES);
Signature[] signs = packageInfo.signatures;
Signature sign = signs[0];

卸载apk
Uri uri = Uri.fromParts("package", strPackageName, null);
Intent it = new Intent(Intent.ACTION_DELETE, uri);
startActivity(it);
按键
public boolean onKeyDown(int keyCode, KeyEvent event)

{
if (keyCode == event.KEYCODE_BACK)

{   //返回键 }

if (keyCode == event.KEYCODE_HOME)

{   //HOME键 }

if (keyCode == event.KEYCODE_MENU)

{   //菜单键 }

if (keyCode == event.KEYCODE_VOLUME_DOWN)

{   //音量下键 }

if (keyCode == event.KEYCODE_VOLUME_UP)

{   //音量上键 }

if (keyCode == event.KEYCODE_POWER)

{   //关机键 }

return true;

}

// 打开指定app 包 activity
// Intent intent = new Intent(Intent.ACTION_MAIN);
// intent.addCategory(Intent.CATEGORY_LAUNCHER);
// ComponentName cn = new ComponentName(packageName, className);
// intent.setComponent(cn);
// startActivity(intent);

// String packageName = getContext().getPackageName();
// Intent intent = new Intent();
// PowerManager powerManager = (PowerManager) getContext().getSystemService(Context.POWER_SERVICE);
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// //请求电池优化白名单
// if (powerManager.isIgnoringBatteryOptimizations(packageName)) {
// intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
// } else {
// intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
// intent.setData(Uri.parse("package:" + packageName));
// }
// }
7.0
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${APPLICATIONID}.FileProvider"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="android:authorities">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_path" />
</provider>

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<root-path
name="root"
path="" />
<files-path
name="files"
path="" />

<cache-path
    name="cache"
    path="" />

<external-path
    name="external"
    path="" />

<external-files-path
    name="external_file_path"
    path="" />
<external-cache-path
    name="external_cache_path"
    path="" />

</paths>
private void installApk() { //安装程序
Intent intentUpdate = new Intent("android.intent.action.VIEW");
intentUpdate.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //对Android N及以上的版本做判断
Uri apkUriN = FileProvider.getUriForFile(MainActivity2.this,
MainActivity2.this.getApplicationContext().getPackageName() + ".FileProvider", new File(upgradeMsg.apkpath));
intentUpdate.addCategory("android.intent.category.DEFAULT");
intentUpdate.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //天假Flag 表示我们需要什么权限
intentUpdate.setDataAndType(apkUriN, "application/vnd.android.package-archive");
} else {
Uri apkUri = Uri.fromFile(new File(upgradeMsg.apkpath));
intentUpdate.setDataAndType(apkUri, "application/vnd.android.package-archive");
}
startActivity(intentUpdate);
}

8.0打开安装未知来源
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

private static final int INSTALL_PACKAGES_REQUESTCODE = 10011;
private static final int GET_UNKNOWN_APP_SOURCES = 10012;
private void checkAndroidO() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { //系统 Android O及以上版本
//是否需要处理未知应用来源权限。 true为用户信任安装包安装 false 则需要获取授权
boolean canRequestPackageInstalls = getPackageManager().canRequestPackageInstalls();
if (canRequestPackageInstalls) {
installApk();
} else {
//请求安装未知应用来源的权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, INSTALL_PACKAGES_REQUESTCODE);
}
} else { //直接安装流程
installApk();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case INSTALL_PACKAGES_REQUESTCODE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { //如果已经有这个权限 则直接安装 否则跳转到授权界面
installApk();
} else {
Uri packageURI = Uri.parse("package:" + getPackageName()); //获取包名,直接跳转到对应App授权界面
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
startActivityForResult(intent, GET_UNKNOWN_APP_SOURCES);
}
break;
}

  //我们还需要在 onActivityResult方法中继续做一些相应的处理,好让授权成功后 返回App可以直接安装
   @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    //8.0 以上系统 强更新授权 界面
    switch (requestCode) {
        case GET_UNKNOWN_APP_SOURCES:
            checkAndroidO();
            break;
        default:
            break;
    }

}
上一篇下一篇

猜你喜欢

热点阅读