❶ android判斷系統是否有軟體打開文件mimetype/判斷是否支持文件類型
chm閱讀器,專門閱讀CHM格式電子書的軟體,360手機助手裡有,點下載。如果手機和電腦連接正常的話,360手機助手會自動下載安裝的。
❷ Android 調用其他應用打開文件
java">/**
*打開文件
*@paramfile
*/
privatevoidopenFile(Filefile){
Intentintent=newIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//設置intent的Action屬性
intent.setAction(Intent.ACTION_VIEW);
//獲取文件file的MIME類型
Stringtype=getMIMEType(file);
//設置intent的data和Type屬性。
intent.setDataAndType(/*uri*/Uri.fromFile(file),type);
//跳轉
startActivity(intent);
}
/**
*根據文件後綴名獲得對應的MIME類型。
*@paramfile
*/
privateStringgetMIMEType(Filefile){
Stringtype="*/*";
StringfName=file.getName();
//獲取後綴名前的分隔符"."在fName中的位置。
intdotIndex=fName.lastIndexOf(".");
if(dotIndex<0){
returntype;
}
/*獲取文件的後綴名*/
Stringend=fName.substring(dotIndex,fName.length()).toLowerCase();
if(end=="")returntype;
//在MIME和文件類型的匹配表中找到對應的MIME類型。
for(inti=0;i<MIME_MapTable.length;i++){//MIME_MapTable??在這里你一定有疑問,這個MIME_MapTable是什麼?
if(end.equals(MIME_MapTable[i][0]))
type=MIME_MapTable[i][1];
}
returntype;
}具體的看這篇文章http://tonysun3544.iteye.com/blog/1265884
❸ android intent.setType("type");中怎麼設置兩種指定的mimeType
intent.setType(「image/*」);
//intent.setType(「audio/*」); //選擇音頻
//intent.setType(「video/*」); //選擇視頻 (mp4 3gp 是android支持的視頻格式)
//intent.setType(「video/*;image/*」);//同時選擇視頻和圖片
❹ Android中怎麼實現打開文件時彈出一個打開方式可供選擇的框。
這個是隱私Intent調用,沒有指定明確的Activity,而是設置了條件,只要符合都可以響應。
像你說的這種是根據文件類型做條件來判斷,可以通過Intent的setDataAndType方法實現。
這個Type是指MIME Type,網上有文件名後綴與MIME類型的對照表,可以參考。
提供一個打開內存儲根目錄下1.txt文件的樣例代碼,僅供參考(前提是沒給txt文件設置默認的打開應用)
Intentintent=newIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(Environment.getExternalStorageDirectory()+"/1.txt"),"text/plain");
startActivity(intent);
❺ Android開發入門:如何激活和關閉組件
1、激活組件:意圖(Intents)
當 接收到ContentResolver發出的請求後,內容提供者被激活。而其它三種組件——活動、服務和廣播接收者,被一種叫做意圖(intent)的非同步消息激活。意圖是一個保存著消息內容的Intent對象。對於活動和服務來說,Intent對象指明了請求的操作名稱以及作為操作對象的數據的URI和其它一些信息。
例如,它可以傳遞對活動的一個請求,讓它為用戶顯示一張圖片,或者讓用戶編輯一些文本。而對於廣播接收者而言,Intent對象指明了廣播的行為。例如當照相按鈕被按下,它可以對所有感興趣的對象廣播。
對於每種組件來說,激活的方法是不同的。下面將分別介紹活動、服務、廣播接收者組件的激活方法。
1.1、活動(Activity)組件的激活
通 過傳遞一個Intent對象至Context.startActivity()或Activity.startActivityForResult()以 載入(或指定新工作給)一個活動。相應的活動可以看到初始的意圖,這個意圖通過getIntent() 方法來查看激活活動。Android調用活動的onNewIntent()方法傳遞任何後續的意圖。
一 個活動經常啟動了下一個。如果它期望它所啟動的那個活動返回一個結果,它會調用startActivityForResult()而不是 startActivity()。例如,如果它啟動了一個活動讓用戶挑選一張照片,它可能會返回被選中的照片。結果以一個Intent對象傳遞調用活動的 onActivityResult() 方法。
1.2、服務(Service)組件的激活
通過傳遞一個Intent對象至Context.startService()以啟動一個服務(或給予正在運行的服務以一個新的指令)。Android調用服務的onStart()方法並將Intent對象傳遞給它。
與 此類似,一個Intent可以傳遞給Context.bindService()以在調用的組件和目標服務之間建立持續的連接。這個服務會在調用 onBind() 方法中接受這個Intent對象(如果服務尚未啟動,bindService()會先啟動它)。例如,一個活動可以連接至前面講到的音樂播放服務,並提供 給用戶一個可操作的(用戶界面)以對播放進行控制。這個活動可以調用bindService()來建立連接,然後調用服務中定義的對象來控制播放。
1.3、廣播接收者(Broadcast receiver)組件的激活
應用程序可以通過將Intent對象傳遞給
Context.sendBroadcast()
Context.sendOrderedBroadcast()
Context.sendStickyBroadcast()
及其它類似方法來產生一個廣播。Android會通過onReceive()方法將intent傳遞給所有對此廣播有興趣的廣播接收者。
2、關閉組件
內容提供者僅在響應ContentResolver提出請求的時候激活。而一個廣播接收者僅在響應廣播信息的時候激活。所以,沒有必要去顯式的關閉這些組件。
而活動則不同,它提供了用戶界面。與用戶進行會話,所以只要會話依然持續,哪怕對話進程空閑,它都會一直保持激活狀態。與此相似,服務也會在很長一段時間內保持運行。所以Android提供方法有序地關閉活動和服務。
可以通過調用它的finish()方法來關閉一個活動。一個活動也可以通過調用finishActivity()方法來關閉另外一個活動(它用startActivityForResult() 啟動的)。
服務可以通過調用它的stopSelf()方法來停止,或者調用 Context.stopService()。
當組件不再被使用的時候或者Android必須要為更多活躍的組件回收內存時,組件也可能會被系統關閉。
3、清單(manifest)文件
當Android啟動一個應用程序組件之前,它必須知道那個組件是存在的。所以,應用程序會在一個清單(manifest)文件中聲明它的組件,這個文件會被打包到Android包中。這個.apk文件還將包括應用程序的代碼、文件以及其它資源。
這個清單文件是XML結構的文件,且所有的Android應用程序都把它叫做AndroidManifest.xml。為聲明一個應用程序組件,它還會做很多額外工作,比如指明應用程序所需鏈接到的庫的名稱(除了默認的Android庫之外)以及聲明應用程序期望獲得的各種許可權。
但清單文件的主要功能仍然是向Android聲明應用程序的組件。舉例說明,一個活動可以如下聲明:
<?xmlversion="1.0"encoding="utf-8"?>
<manifest...>
<application...>
<activityandroid:name="com.example.project.FreneticActivity"
android:icon="@drawable/small_pic.png"
android:label="@string/freneticLabel"
...>
</activity>
...
</application>
</manifest>
<activity>元素的name屬性指定了實現了這個活動的Activity類的子類,icon和 label屬性指向了包含展示給用戶的此活動的圖標和標簽的資源文件。其它組件也以類似的方法聲明——<service> 元素用於聲明服務,<receiver> 元素用於聲明廣播接收者,而<provider>元素用於聲明內容提供者。
清單文件中未進行聲明的活動、服務以及內容提供者將不為系統所見, 從而也就不會被運行。然而,廣播接收者既可以在清單文件中聲明,也可以在代碼中動態的創建(作為BroadcastReceiver對象)且調用 Context.registerReceiver()方式注冊到系統。
4、Intent過濾器
Intent對象可以顯式地指定目標組件。如果進行了這種指定,Android會找到這個組件(依據清單文件中的聲明)並激活它。
但如果Intent沒有進行顯式的指定,Android就必須為它找到對於 intent來說最合適的組件。這個過程是通過比較Intent對象和所有可能對象的intent過濾器完成的。組件的intent過濾器會告知 Android它所能處理的intent類型。如同其它關於組件的必要信息一樣,它們在清單文件中進行聲明的。這里是上面示例的一個擴展,其中加入了針對活動的兩個intent過濾器聲明:
<?xmlversion="1.0"encoding="utf-8"?>
<manifest...>
<application...>
<activityandroid:name="com.example.project.FreneticActivity"
android:icon="@drawable/small_pic.png"
android:label="@string/freneticLabel"
...>
<intent-filter...>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter...>
<actionandroid:name="com.example.project.BOUNCE"/>
<dataandroid:mimeType="image/jpeg"/>
<categoryandroid:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
...
</application>
</manifest>
示例中的第一個過濾器——action:「android.intent.action.MAIN」和 category:「android.intent.category.LAUNCHER」的組合,是常見的。
它標記這個活動顯示在應用程序啟動器中,用戶在設備上看到的可啟動的應用程序列表。換句話說,這個活動是應用程序的入口,是用戶選擇運行這個應用程序後所見到的第一個活動。第二個過濾器聲明了這個活動針對特定類型的數據。
一個組件可以擁有任意數量的intent過濾器,每個聲明一系列不同的能力。如果它沒有包含任何過濾器,它將只能被顯式聲明了目標組件名稱的意圖激活。對於廣播接收者,它在代碼中創建並注冊intent過濾器,直接作為IntentFilter的對象實例化。其它過濾器則在清單文件中設置。