Android-AndroidManifest.xml默认启动的Activity(探索篇01)
AndroidManifest.xml-->默认启动 MusicBrowserActivity
<activity android:name=".MusicBrowserActivity"
android:theme="@android:style/Theme.NoTitleBar"
android:exported="true"> <!-- android:exported="true" 是否支持其它应用调用当前组件。
默认值:如果包含有intent-filter 默认值为true; 没有intent-filter默认值为false。 -->
<intent-filter> <!-- 程序主入口 -->
<action android:name="android.intent.action.MAIN" /> <!-- 启动的Launcher -->
<category android:name="android.intent.category.LAUNCHER" /> <!-- 给其他地方/程序调用的action -->
<action android:name="android.intent.action.MUSIC_PLAYER" /> <!-- 隐式启动需要增加category.DEFAULT,new Intent()... -->
<category android:name="android.intent.category.DEFAULT" /> <!-- 和ACTION_MAIN一起使用,用来启动音乐应用程序 -->
<category android:name="android.intent.category.APP_MUSIC" /> </intent-filter> </activity>
MusicBrowserActivity
package liudeli.music2; import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ComponentName;
import android.content.ServiceConnection;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.annotation.NonNull;
import android.util.Log; import liudeli.music2.service.IMediaPlaybackService;
import liudeli.music2.service.MediaPlaybackService;
import liudeli.music2.util.MusicUtils; /**
* Description:主页面入口
* Created by Liudeli on 2017/10/27.
* About: Liudeli
* QICQ: 1830140442
* Email: deliliu@vip.qq.com
* Company: deli.liu@eques.com.cn
* Phone: 15221634614
* Date: 2017/10/27
* CSDN: http://blog.csdn.net/u011967006
*/ public class MusicBrowserActivity extends Activity implements MusicUtils.Defs { private static final String TAG = "MusicBrowserActivity"; private MusicUtils.ServiceToken mToken; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // 系统6.0权限问题
// requestReadExternalPermission(); // 通过SharedPreferences get上一次tab的记录
int activeTab = MusicUtils.getIntPref(this, "activetab", R.id.artisttab); // 如果不等于所有tab选项,就默认[音乐人tab]
if (activeTab != R.id.artisttab
&& activeTab != R.id.albumtab
&& activeTab != R.id.songtab
&& activeTab != R.id.playlisttab) {
activeTab = R.id.artisttab;
} // 去指定start那个Activity [音乐人][专辑][歌曲][播放列表]
MusicUtils.activateTab(this, activeTab); // 我的理解是其他应用程序,来传值进行逻辑操作
String shuf = getIntent().getStringExtra("autoshuffle");
Log.d(TAG, "shuf:" + shuf); if ("true".equals(shuf)) {
mToken = MusicUtils.bindToService(this, autoshuffle);
}
} private ServiceConnection autoshuffle = new ServiceConnection() { public void onServiceConnected(ComponentName classname, IBinder obj) {
// 我们需要再次绑定,这样就可以解除绑定
Log.d(TAG, "我们需要再次绑定,这样就可以解除绑定"); try {
unbindService(this);
} catch (IllegalArgumentException e) {
}
IMediaPlaybackService serv = IMediaPlaybackService.Stub.asInterface(obj);
if (serv != null) {
try {
serv.setShuffleMode(MediaPlaybackService.SHUFFLE_AUTO);
} catch (RemoteException ex) {
}
}
} public void onServiceDisconnected(ComponentName classname) {
}
}; @Override
protected void onDestroy() {
if (null != mToken) {
MusicUtils.unbindFromService(mToken);
}
super.onDestroy();
} /**
* 系统6.0权限问题
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.d(TAG, "requestCode=" + requestCode + "; --->" + permissions.toString()
+ "; grantResult=" + grantResults.toString());
switch (requestCode) {
case 0: { if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) { // permission was granted
// request successfully, handle you transactions // requestReadExternalPermission();
} else { // permission denied
// request failed // requestReadExternalPermission();
} return;
}
default:
break; }
} /**
* 系统6.0权限问题
*/
@SuppressLint("NewApi")
private void requestReadExternalPermission() {
if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "READ permission IS NOT granted..."); if (shouldShowRequestPermissionRationale(Manifest.permission.READ_EXTERNAL_STORAGE)) { Log.d(TAG, "11111111111111");
} else {
// 0 是自己定义的请求coude
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
Log.d(TAG, "222222222222");
}
} else {
Log.d(TAG, "READ permission is granted...");
}
} }
Android-AndroidManifest.xml默认启动的Activity(探索篇01)的更多相关文章
- [android] AndroidManifest.xml - 【 manifest -> Application -> activity 】
<activity android:allowTaskReparenting=["true" | "false"] android:alwaysRetai ...
- android AndroidManifest.xml 属性详细解析
一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...
- Android AndroidManifest.xml详解
AndroidManifest.xml简述: AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activitie ...
- Android AndroidManifest.xml配置文件
AndroidManifest.xml配置文件介绍本质:AndroidManifest.xml是整个应用的主配置清单文件.包含:该应用的包名.版本号.组件.权限等信息.作用:记录该应用的相关配置信息. ...
- [android] AndroidManifest.xml -【manifest】
<manifest> 原文链接:http://www.android-doc.com/guide/topics/manifest/manifest-element.html 最早引入的AP ...
- [android] AndroidManifest.xml 详解
第1部分 标签库+包路径+版本控制 <manifest xmlns:android="http://schemas.android.com/apk/res/android" ...
- Android应用程序进程启动过程(后篇)
前言 在前篇中我们讲到了Android应用程序进程启动过程,这一篇我们来讲遗留的知识点:在应用程序进程创建过程中会启动Binder线程池以及在应用程序进程启动后会创建消息循环. 1.Binder线程池 ...
- [android] AndroidManifest.xml - 【 manifest -> application】
语法: <application android:allowTaskReparenting=["true" | "false"] android:back ...
- [android] AndroidManifest.xml - 【 manifest -> 其他次要配置】
<uses-sdk> 作用:使应用程序的兼容性更好,指明应用程序需要的最小API,编译API以及最大支持的API.值都是整数 <uses-sdk android:minSdkVers ...
随机推荐
- 大型运输行业实战_day07_1_订单查看实现
1.业务分析 每个在窗口售票的售票员都应该可以随时查看自己的售票信息 简单的界面入口如图所示: 对应的html代码: <button onclick="orderDetail()&qu ...
- ElementTree 解析xml(minidom解析xml大文件时,MemoryError)
在使用minido解析xml文件时,因为文件过大,结果报错MemoryError.查询后得知是因为minidom在解析时是将所有文件放到内存里的,很占用内存,所以要考虑换一种方法来处理xml文件. ...
- JSP页面与JSP页面之间传输参数出现中文乱码的解决方案
在学习编程初期JSP与JSP页面之间传输参数大多数都是使用这样的方式 index.jsp?id=*&name=* 这样的传输方式实质上是一种GET传输方式, 那如果出现了中文乱码, 解决方法其 ...
- 分享至微信、QQ、微博、复制链接
var share = { "tit": '您的朋友分享了文章', "desc": '分享来自百度文库,包含...', "pic": 'ht ...
- ubuntu安装谷歌拼音输入法
在这篇教程中,我将告诉你如何在ubuntu系统上安装谷歌拼音输入法.谷歌拼音输入法有基于ibus框架的,也有基于fcitx框架的.我只演示fcitx框架下谷歌拼音输入法的安装,因为ibus框架的谷歌拼 ...
- python OSError: [Errno 22] Invalid argument: 'D:\\crawle\x01.html1'
import urllib.request file = urllib.request.open("http://www.baidu.com") data = file.read( ...
- 对象导航查询和OID查询(补)
----------------siwuxie095 对象导航查询 以客户和联系人为例(一对多) 1.应用场景 ...
- TZOJ 5280 搜索引擎(模拟字符串)
描述 谷歌.百度等搜索引擎已经成为了互连网中不可或缺的一部分.在本题中,你的任务也是设计一个搜索论文的搜索引擎,当然,本题的要求比起实际的需求要少了许多. 本题的输入将首先给出一系列的论文,对于每篇论 ...
- 利用redis完成自动补全搜索功能(二)
前面介绍了自动完成的大致思路,现在把搜索次数的功能也结合上去.我采用的是hash表来做的,当然也可以在生成分词的时候,另外一个有序集合来维护排序, 然后2个有序集合取交集即可.这里介绍hash的方式来 ...
- C#6.0新特性:var s = $"{12}+{23}={12+23}"
为什么会出现$符号,c#6.0才出现的新特性 var s = string.Fromat("{0}+{1}={2}",12,23,12+23) 用起来必须输入string.From ...