Android App

외부저장소 동영상 플레이어 in Android Studio

YunSeong 2021. 9. 4. 14:59
728x90
반응형

1. AndroidManifest.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.internetlessonplayer">
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <application
        android:requestLegacyExternalStorage="true"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:usesCleartextTraffic="true"
        android:theme="@style/Theme.InternetLessonPlayer"
        android:screenOrientation="portrait">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>
cs

2. build.gradle (:app)

1
2
3
4
5
        ...
dependencies {
    implementation 'gun0912.ted:tedpermission:2.0.0'
        ...
}
cs

3. item.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:id="@+id/item">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="이름"
        android:textColor="@color/black"
        android:textSize="25sp"
        android:id="@+id/tv_name"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tv_tag"
        android:textSize="17sp"
        android:text="범주"/>
</LinearLayout>
cs

4. bottom_menu.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/item_home"
        android:enabled="true"
        android:icon="@drawable/ic_baseline_home_24"
        android:title="home"/>
    <item
        android:id="@+id/item_homePage"
        android:enabled="true"
        android:icon="@drawable/ic_baseline_open_in_browser_24"
        android:title="page"/>
    <item
        android:id="@+id/item_add"
        android:enabled="true"
        android:icon="@drawable/ic_baseline_add_box_24"
        android:title="add"/>
    <item
        android:id="@+id/item_setting"
        android:enabled="true"
        android:icon="@drawable/ic_baseline_settings_24"
        android:title="setting"/>
</menu>
cs

5. activity_main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:id="@+id/fl_main"/>
    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/bn_main"
        app:itemIconTint="#000000"
        app:itemTextColor="#000000"
        app:menu="@menu/bottom_menu"/>
</LinearLayout>
cs

6. fragment_main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
        <androidx.recyclerview.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:scrollbarSize="5dp"
            android:scrollbarFadeDuration="0"
            android:scrollbarThumbVertical="@color/black"
            android:scrollbars="vertical"
            android:visibility="visible"
            android:id="@+id/rv">
        </androidx.recyclerview.widget.RecyclerView>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="invisible"
            android:orientation="vertical"
            android:id="@+id/player">
            <VideoView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/vv"
                android:layout_weight="0"/>
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="이름"
                android:textSize="20sp"
                android:textColor="@color/black"
                android:id="@+id/tv_aboutVideo"/>
        </LinearLayout>
    </FrameLayout>
</LinearLayout>
cs

7. fragment_addpage.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="동영상 이름"
        android:textSize="30dp"/>
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="ex) 이름"
        android:id="@+id/et_name"/>
    <TextView
        android:layout_marginTop="30dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:textSize="30dp"/>
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="ex) 범주"
        android:id="@+id/et_tag"/>
    <TextView
        android:layout_marginTop="30dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="동영상 경로"
        android:textSize="30dp"/>
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="file:///~"
        android:id="@+id/et_path"/>
    <Button
        android:layout_marginTop="30dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="동영상 추가"
        android:id="@+id/btn_add"/>
</LinearLayout>
cs

8. fragment_setting.xml

1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</androidx.constraintlayout.widget.ConstraintLayout>
cs

9. fragment_browser.xml

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <WebView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/wv"/>
</androidx.constraintlayout.widget.ConstraintLayout>
cs

10. MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package com.example.internetlessonplayer;
 
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.recyclerview.widget.RecyclerView;
 
import android.Manifest;
import android.app.ActionBar;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toast;
 
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.gun0912.tedpermission.PermissionListener;
import com.gun0912.tedpermission.TedPermission;
 
import org.jetbrains.annotations.NotNull;
 
import java.util.ArrayList;
 
import static com.example.internetlessonplayer.FragmentMain.FILENAME;
import static com.example.internetlessonplayer.FragmentMain.NAMEOFAMOUNT;
 
public class MainActivity extends AppCompatActivity {
 
    RecyclerView rv;
    LinearLayout player;
    BottomNavigationView bottomNavigationView;
 
    public static MainActivity mainActivity;
 
    public static FragmentMain fragmentMain;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        mainActivity = this;
 
        TedPermission.with(this)
                .setPermissionListener(permission)
                .setRationaleMessage("강의 재생을 위하여 권한을 허용해주세요")
                .setDeniedMessage("권한이 거부되었습니다. 설정 > 권한에서  허용할 수 있습니다.")
                .setPermissions(Manifest.permission.READ_EXTERNAL_STORAGE)
                .check();
 
        bottomNavigationView = (BottomNavigationView)findViewById(R.id.bn_main);
        bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull @NotNull MenuItem item) {
                FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                switch (item.getItemId()) {
                    case R.id.item_home:
                        fragmentMain = new FragmentMain();
                        ft.replace(R.id.fl_main, fragmentMain);
                        break;
                    case R.id.item_homePage:
                        FragmentBrowser fragmentBrowser = new FragmentBrowser();
                        ft.replace(R.id.fl_main, fragmentBrowser);
                        break;
                    case R.id.item_add:
                        FragmentAddPage fragmentAddPage = new FragmentAddPage();
                        ft.replace(R.id.fl_main, fragmentAddPage);
                        break;
                    case R.id.item_setting:
                        FragmentSetting fragmentSetting = new FragmentSetting();
                        ft.replace(R.id.fl_main, fragmentSetting);
                        break;
                }
                ft.commit();
                return true;
            }
        });
    }
 
    public void changeStatusOfNavi(int i) {
        bottomNavigationView.setVisibility(i);
    }
 
    PermissionListener permission = new PermissionListener() {
        @Override
        public void onPermissionGranted() {
            Toast.makeText(MainActivity.this"권한 허가", Toast.LENGTH_SHORT);
        }
 
        @Override
        public void onPermissionDenied(ArrayList<String> deniedPermissions) {
            Toast.makeText(MainActivity.this"권한 거부", Toast.LENGTH_SHORT);
        }
    };
 
 
 
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
            rv = FragmentMain.rv;
        if ((keyCode == KeyEvent.KEYCODE_BACK) && rv.getVisibility() == View.INVISIBLE) {
            player = FragmentMain.player;
            rv.setVisibility(View.VISIBLE);
            FragmentMain.function_1();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}
cs

11. FragmentMain.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package com.example.internetlessonplayer;
 
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.VideoView;
 
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.ActionBar;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
 
import org.jetbrains.annotations.NotNull;
 
import java.io.FileOutputStream;
import java.util.ArrayList;
 
public class FragmentMain extends Fragment {
 
    public static RecyclerView rv;
    private static View view;
    public static VideoView vv;
 
    public TextView textView;
 
    public static FragmentMain mContext;
 
    LinearLayoutManager layoutManager;
 
    private ArrayList<MainData> arrayList;
    Adapter adapter;
 
    public static LinearLayout player;
 
    public static final String FILENAME = "file";
    public static final String NAMEOFAMOUNT = "amount";
    public static final String FIRSTNAMEOFNAME = "name";
    public static final String FIRSTNAMEOFTAG = "tag";
    public static final String FIRSTNAMEOFPATH = "path";
 
    @Nullable
    @org.jetbrains.annotations.Nullable
    @Override
    public View onCreateView(@NonNull @org.jetbrains.annotations.NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
 
        view = inflater.inflate(R.layout.fragment_main, container, false);
 
        mContext = this;
 
        arrayList = new ArrayList<>();
 
        adapter = new Adapter(arrayList);
 
        SharedPreferences sharedPreferences = ((MainActivity)MainActivity.mainActivity).getSharedPreferences(FILENAME, 0);
        for (int i = 0; i < sharedPreferences.getInt(NAMEOFAMOUNT, 0); i++){
            MainData mainData = new MainData(sharedPreferences.getString(FIRSTNAMEOFNAME+i, null), sharedPreferences.getString(FIRSTNAMEOFTAG+i, null), sharedPreferences.getString(FIRSTNAMEOFPATH+i, null));
            arrayList.add(mainData);
        }
 
        Log.e("FragmentMain"String.valueOf(sharedPreferences.getInt(NAMEOFAMOUNT, 0)));
        
        layoutManager = new LinearLayoutManager(getContext());
 
        textView = (TextView)view.findViewById(R.id.tv_aboutVideo);
 
        rv = view.findViewById(R.id.rv);
        rv.setLayoutManager(layoutManager);
        rv.setAdapter(adapter);
        adapter.notifyDataSetChanged();
 
        rv = (RecyclerView)view.findViewById(R.id.rv);
        player = (LinearLayout)view.findViewById(R.id.player);
 
        vv = (VideoView)view.findViewById(R.id.vv);
 
        return view;
    }
 
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public static void function_1() {
        RecyclerView rv;
        LinearLayout player;
        rv = (RecyclerView)view.findViewById(R.id.rv);
        player = (LinearLayout)view.findViewById(R.id.player);
 
        if (rv.getVisibility() == View.INVISIBLE) {
            rv.setVisibility(View.INVISIBLE);
            player.setVisibility(View.VISIBLE);
            ActionBar actionBar = ((MainActivity)MainActivity.mainActivity).getSupportActionBar();
            ((MainActivity)MainActivity.mainActivity).changeStatusOfNavi(View.GONE);
            actionBar.hide();
            ((MainActivity)MainActivity.mainActivity).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
        else if (rv.getVisibility() == View.VISIBLE) {
            rv.setVisibility(View.VISIBLE);
            player.setVisibility(View.INVISIBLE);
            ActionBar actionBar = ((MainActivity)MainActivity.mainActivity).getSupportActionBar();
            ((MainActivity)MainActivity.mainActivity).changeStatusOfNavi(View.GONE);
            actionBar.show();
            ((MainActivity)MainActivity.mainActivity).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    }
 
    public void addVideo(String name, String tag, String path) {
        MainData mainData = new MainData(name, tag, path);
        FragmentMain.this.arrayList.add(mainData);
        adapter.notifyDataSetChanged();
 
        SharedPreferences sharedPreferences = ((MainActivity)MainActivity.mainActivity).getSharedPreferences(FILENAME, 0);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString((FIRSTNAMEOFNAME + sharedPreferences.getInt(NAMEOFAMOUNT, 0)), name);
        editor.putString((FIRSTNAMEOFTAG + sharedPreferences.getInt(NAMEOFAMOUNT, 0)), tag);
        editor.putString((FIRSTNAMEOFPATH + sharedPreferences.getInt(NAMEOFAMOUNT, 0)), path);
 
        editor.putInt(NAMEOFAMOUNT, sharedPreferences.getInt(NAMEOFAMOUNT, 0+ 1);
 
        editor.commit();
    }
}
 
cs

12. MainData.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.example.internetlessonplayer;
 
import android.net.Uri;
 
public class MainData {
 
    String name;
    String tag;
    String path;
 
    public MainData(String name, String tag, String path) {
        this.name = name;
        this.tag = tag;
        this.path = path;
    }
 
    public String getPath() {
        return this.path;
    }
 
    public void setUri(String path) {
        this.path = path;
    }
 
    public String getName() {
        return this.name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getTag() {
        return this.tag;
    }
 
    public void setTag(String tag) {
        this.tag = tag;
    }
}
cs

13. Adapter.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package com.example.internetlessonplayer;
 
import android.content.pm.ActivityInfo;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Build;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.VideoView;
 
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.ActionBar;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.recyclerview.widget.RecyclerView;
 
import org.jetbrains.annotations.NotNull;
 
import java.io.FileOutputStream;
import java.util.ArrayList;
 
public class Adapter extends RecyclerView.Adapter<Adapter.CustomViewHolder> {
 
 
    private ArrayList<MainData> arrayList;
    private LinearLayout player;
    private RecyclerView rv;
    private VideoView vv;
 
    public  Adapter(ArrayList<MainData> arrayList) {
        this.arrayList = arrayList;
    }
 
    @Override
    public void onAttachedToRecyclerView(@NonNull @NotNull RecyclerView recyclerView) {
        rv = recyclerView;
        super.onAttachedToRecyclerView(recyclerView);
    }
 
    @NonNull
    @NotNull
    @Override
    public CustomViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
 
        CustomViewHolder holder = new CustomViewHolder(view);
 
        return holder;
    }
 
    @Override
    public int getItemCount() {
        return (null != arrayList ? arrayList.size(): 0);
    }
 
 
 
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public void onBindViewHolder(@NonNull @NotNull Adapter.CustomViewHolder holder, int position) {
        holder.tv_name.setText((arrayList.get(position).getName()));
        holder.tv_tag.setText((arrayList.get(position).getTag()));
        holder.itemView.setTag(position);
 
        holder.tv_name.setOnClickListener(view -> {
            ((FragmentMain)FragmentMain.mContext).textView.setText(holder.tv_name.getText().toString());
            vv = FragmentMain.vv;
            MediaController mediaController = new MediaController(view.getContext());
            mediaController.setAnchorView(vv);
            vv.setMediaController(mediaController);
            vv.setVideoURI(Uri.parse(arrayList.get(position).getPath()));
            vv.start();
            rv.setVisibility(View.INVISIBLE);
            FragmentMain.function_1();
        });
    }
 
    protected class CustomViewHolder extends RecyclerView.ViewHolder {
        protected TextView tv_name;
        protected TextView tv_tag;
 
        public CustomViewHolder(@NonNull @NotNull View itemView) {
            super(itemView);
            this.tv_name = (TextView)itemView.findViewById(R.id.tv_name);
            this.tv_tag = (TextView)itemView.findViewById(R.id.tv_tag);
        }
 
 
        public TextView getTextViewName() {
            return this.tv_name;
        }
 
        public TextView getTextViewTag() {
            return this.tv_tag;
        }
    }
}
cs

14. FragmentAddPage.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package com.example.internetlessonplayer;
 
import android.content.SharedPreferences;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
 
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
 
import static com.example.internetlessonplayer.MainActivity.fragmentMain;
 
public class FragmentAddPage extends Fragment {
 
    EditText et_name;
    EditText et_tag;
    EditText et_path;
    Button btn_add;
 
    private View view;
 
    @Nullable
    @org.jetbrains.annotations.Nullable
    @Override
    public View onCreateView(@NonNull @org.jetbrains.annotations.NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_addpage, container, false);
 
        et_name = (EditText)view.findViewById(R.id.et_name);
        et_path = (EditText)view.findViewById(R.id.et_path);
        et_tag = (EditText)view.findViewById(R.id.et_tag);
 
        btn_add = (Button)view.findViewById(R.id.btn_add);
        btn_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 
                MainActivity.fragmentMain.addVideo(et_name.getText().toString(), et_tag.getText().toString(), et_path.getText().toString());
                et_name.setText("");
                et_path.setText("");
                et_tag.setText("");
            }
        });
 
        return view;
    }
}
 
cs

15. FragmentSetting.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.example.internetlessonplayer;
 
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
 
public class FragmentSetting extends Fragment {
 
    private View view;
    @Nullable
    @org.jetbrains.annotations.Nullable
    @Override
    public View onCreateView(@NonNull @org.jetbrains.annotations.NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
 
        view = inflater.inflate(R.layout.fragment_setting, container, false);
        return view;
    }
}
cs

16. FragmentBrowser.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.example.internetlessonplayer;
 
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
 
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
 
public class FragmentBrowser extends Fragment {
 
    WebView wv;
 
    private View view;
 
    @Nullable
    @org.jetbrains.annotations.Nullable
    @Override
    public View onCreateView(@NonNull @org.jetbrains.annotations.NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_browser, container, false);
 
        wv = view.findViewById(R.id.wv);
 
        wv.getSettings().setJavaScriptEnabled(true);
        wv.loadUrl("~~~~~~~~");
 
        wv.setWebChromeClient(new WebChromeClient());
        wv.setWebViewClient(new WebViewClient());
 
        return view;
    }
 
 
}
\
cs

17. gradle.properties

1
android.enableJetifier = true
cs
728x90
반응형