抽象BaseActivity

抽象BaseActivity
pull/107/head
xufulong 5 years ago
parent 9b13bb8362
commit 52ba7a02a5
  1. 90
      app/src/main/java/com/frank/ffmpeg/activity/BaseActivity.java
  2. 57
      app/src/main/java/com/frank/ffmpeg/activity/MainActivity.java
  3. 135
      app/src/main/java/com/frank/ffmpeg/util/ContentUtil.java

@ -0,0 +1,90 @@
package com.frank.ffmpeg.activity;
import android.Manifest;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import com.frank.ffmpeg.util.ContentUtil;
public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener {
private final static String TAG = BaseActivity.class.getSimpleName();
private final static int REQUEST_CODE = 1234;
private final static String[] permissions = new String[] {
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initWindow();
requestPermission();
setContentView(getLayoutId());
}
private void initWindow() {
if (getSupportActionBar() != null) {
getSupportActionBar().hide();
}
}
private void requestPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(permissions, REQUEST_CODE);
}
}
protected void initViews(int... viewIds) {
for (int viewId : viewIds) {
getView(viewId);
}
}
protected void initViewsWithClick(int... viewIds) {
for (int viewId : viewIds) {
getView(viewId).setOnClickListener(this);
}
}
@Override
public void onClick(View v) {
onViewClick(v);
}
protected void selectFile() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
this.startActivityForResult(intent, 123);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(data != null && data.getData() != null) {
String filePath = ContentUtil.getPath(this,data.getData());
Log.i(TAG,"filePath="+ filePath);
onSelectedFile(filePath);
}
}
protected <T extends View> T getView(int viewId) {
return (T) findViewById(viewId);
}
abstract int getLayoutId();
abstract void onViewClick(View view);
abstract void onSelectedFile(String filePath);
}

@ -1,11 +1,7 @@
package com.frank.ffmpeg.activity;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.BounceInterpolator;
@ -19,37 +15,32 @@ import com.frank.ffmpeg.floating.Screen;
* 使用ffmpeg进行音视频处理入口
* Created by frank on 2018/1/23.
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
public class MainActivity extends BaseActivity {
private final static String[] mPermissions = new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
};
private final static int CODE_STORAGE = 999;
@Override
int getLayoutId() {
return R.layout.activity_main;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
checkPermission();
}
private void initView() {
findViewById(R.id.btn_audio).setOnClickListener(this);
findViewById(R.id.btn_video).setOnClickListener(this);
findViewById(R.id.btn_media).setOnClickListener(this);
findViewById(R.id.btn_play).setOnClickListener(this);
findViewById(R.id.btn_push).setOnClickListener(this);
findViewById(R.id.btn_live).setOnClickListener(this);
findViewById(R.id.btn_filter).setOnClickListener(this);
findViewById(R.id.btn_reverse).setOnClickListener(this);
findViewById(R.id.btn_floating).setOnClickListener(this);
initViewsWithClick(
R.id.btn_audio,
R.id.btn_video,
R.id.btn_media,
R.id.btn_play,
R.id.btn_push,
R.id.btn_live,
R.id.btn_filter,
R.id.btn_reverse,
R.id.btn_floating
);
}
@Override
public void onClick(View v) {
public void onViewClick(View v) {
Intent intent = new Intent();
switch (v.getId()){
case R.id.btn_audio://音频处理
@ -85,15 +76,6 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
startActivity(intent);
}
//动态申请权限
private void checkPermission(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(mPermissions[0]) != PackageManager.PERMISSION_GRANTED){
requestPermissions(mPermissions, CODE_STORAGE);
}
}
}
/**
* 悬浮窗播放
*/
@ -116,4 +98,9 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
FloatWindow.get().show();
}
@Override
void onSelectedFile(String filePath) {
}
}

@ -0,0 +1,135 @@
package com.frank.ffmpeg.util;
import android.annotation.TargetApi;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
public class ContentUtil {
/**
* Get a file path from a Uri. This will get the the path for Storage
* Access Framework Documents.
* @param context The context
* @param uri The Uri to query
*/
@TargetApi(Build.VERSION_CODES.KITKAT)
public static String getPath(final Context context, final Uri uri) {
// DocumentProvider
if (DocumentsContract.isDocumentUri(context, uri)) {
// ExternalStorageProvider
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/" + split[1];
}
}
// DownloadsProvider
else if (isDownloadsDocument(uri)) {
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
return getDataColumn(context, contentUri, null, null);
}
// MediaProvider
else if (isMediaDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
Uri contentUri = null;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
final String selection = "_id=?";
final String[] selectionArgs = new String[] {
split[1]
};
return getDataColumn(context, contentUri, selection, selectionArgs);
}
}
// MediaStore (and general)
else if ("content".equalsIgnoreCase(uri.getScheme())) {
return getDataColumn(context, uri, null, null);
}
// File
else if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}
return null;
}
/**
**
* Get the value of the data column for this Uri. This is useful for
* MediaStore Uris, and other file-based ContentProviders.
*
* @param context The context
* @param uri The Uri to query
* @param selection (Optional) Filter used in the query.
* @param selectionArgs (Optional) Selection arguments used in the query.
* @return The value of the _data column, which is typically a file path.
*/
private static String getDataColumn(Context context, Uri uri, String selection,
String[] selectionArgs) {
Cursor cursor = null;
final String column = "_data";
final String[] projection = {
column
};
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
null);
if (cursor != null && cursor.moveToFirst()) {
final int index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(index);
}
} finally {
if (cursor != null)
cursor.close();
}
return null;
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is ExternalStorageProvider.
*/
private static boolean isExternalStorageDocument(Uri uri) {
return "com.android.externalstorage.documents".equals(uri.getAuthority());
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is DownloadsProvider.
*/
private static boolean isDownloadsDocument(Uri uri) {
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is MediaProvider.
*/
private static boolean isMediaDocument(Uri uri) {
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
}
Loading…
Cancel
Save